|
1 | 1 | <!DOCTYPE html PUBLIC ""
|
2 | 2 | "">
|
3 |
| -<html><head><meta charset="UTF-8" /><title>Gungnir</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="highlight/solarized-light.css" /><script type="text/javascript" src="highlight/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a> with <a href="https://github.com/xsc/codox-theme-rdash">RDash UI</a> theme</h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Gungnir</span> <span class="project-version">0.0.1-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 current"><a href="README.html"><div class="inner"><span>Gungnir</span></div></a></li><li class="depth-1 "><a href="guide.html"><div class="inner"><span>Guide</span></div></a></li><li class="depth-1 "><a href="database.html"><div class="inner"><span>Database</span></div></a></li><li class="depth-1 "><a href="migrations.html"><div class="inner"><span>Migrations</span></div></a></li><li class="depth-1 "><a href="model.html"><div class="inner"><span>Model</span></div></a></li><li class="depth-1 "><a href="changeset.html"><div class="inner"><span>Changeset</span></div></a></li><li class="depth-1 "><a href="query.html"><div class="inner"><span>Query</span></div></a></li><li class="depth-1 "><a href="transactions.html"><div class="inner"><span>Transactions</span></div></a></li><li class="depth-1 "><a href="ui.html"><div class="inner"><span>UI</span></div></a></li><li class="depth-1 "><a href="form.html"><div class="inner"><span>Form</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>gungnir</span></div></div></li><li class="depth-2 branch"><a href="gungnir.changeset.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>changeset</span></div></a></li><li class="depth-2"><a href="gungnir.database.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>database</span></div></a></li><li class="depth-3"><a href="gungnir.database.builder.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>builder</span></div></a></li><li class="depth-2 branch"><a href="gungnir.decode.html"><div class="inner"><span class="tree" style="top: -52px;"><span class="top" style="height: 61px;"></span><span class="bottom"></span></span><span>decode</span></div></a></li><li class="depth-2 branch"><a href="gungnir.factory.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>factory</span></div></a></li><li class="depth-2 branch"><a href="gungnir.field.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>field</span></div></a></li><li class="depth-2 branch"><a href="gungnir.migration.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>migration</span></div></a></li><li class="depth-2 branch"><a href="gungnir.model.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>model</span></div></a></li><li class="depth-2 branch"><a href="gungnir.query.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>query</span></div></a></li><li class="depth-2 branch"><a href="gungnir.record.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>record</span></div></a></li><li class="depth-2 branch"><a href="gungnir.spec.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>spec</span></div></a></li><li class="depth-2 branch"><a href="gungnir.transaction.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>transaction</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>util</span></div></div></li><li class="depth-3"><a href="gungnir.util.malli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>malli</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#gungnir" id="gungnir"></a>Gungnir</h1> |
| 3 | +<html><head><meta charset="UTF-8" /><title>Gungnir</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="highlight/solarized-light.css" /><script type="text/javascript" src="highlight/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a> with <a href="https://github.com/xsc/codox-theme-rdash">RDash UI</a> theme</h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Gungnir</span> <span class="project-version">0.0.2-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 current"><a href="README.html"><div class="inner"><span>Gungnir</span></div></a></li><li class="depth-1 "><a href="guide.html"><div class="inner"><span>Guide</span></div></a></li><li class="depth-1 "><a href="database.html"><div class="inner"><span>Database</span></div></a></li><li class="depth-1 "><a href="migrations.html"><div class="inner"><span>Migrations</span></div></a></li><li class="depth-1 "><a href="model.html"><div class="inner"><span>Model</span></div></a></li><li class="depth-1 "><a href="changeset.html"><div class="inner"><span>Changeset</span></div></a></li><li class="depth-1 "><a href="query.html"><div class="inner"><span>Query</span></div></a></li><li class="depth-1 "><a href="transactions.html"><div class="inner"><span>Transactions</span></div></a></li><li class="depth-1 "><a href="ui.html"><div class="inner"><span>UI</span></div></a></li><li class="depth-1 "><a href="form.html"><div class="inner"><span>Form</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>gungnir</span></div></div></li><li class="depth-2 branch"><a href="gungnir.changeset.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>changeset</span></div></a></li><li class="depth-2"><a href="gungnir.database.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>database</span></div></a></li><li class="depth-3"><a href="gungnir.database.builder.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>builder</span></div></a></li><li class="depth-2 branch"><a href="gungnir.decode.html"><div class="inner"><span class="tree" style="top: -52px;"><span class="top" style="height: 61px;"></span><span class="bottom"></span></span><span>decode</span></div></a></li><li class="depth-2 branch"><a href="gungnir.factory.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>factory</span></div></a></li><li class="depth-2 branch"><a href="gungnir.field.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>field</span></div></a></li><li class="depth-2 branch"><a href="gungnir.migration.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>migration</span></div></a></li><li class="depth-2 branch"><a href="gungnir.model.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>model</span></div></a></li><li class="depth-2 branch"><a href="gungnir.query.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>query</span></div></a></li><li class="depth-2 branch"><a href="gungnir.record.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>record</span></div></a></li><li class="depth-2 branch"><a href="gungnir.spec.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>spec</span></div></a></li><li class="depth-2 branch"><a href="gungnir.transaction.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>transaction</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>util</span></div></div></li><li class="depth-3"><a href="gungnir.util.malli.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>malli</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#gungnir" id="gungnir"></a>Gungnir</h1> |
4 | 4 | <p>A fully featured, data-driven database library for Clojure.</p>
|
5 |
| -<p><a href="https://travis-ci.org/kwrooijen/gungnir"><img src="https://travis-ci.org/kwrooijen/gungnir.svg?branch=master" alt="Build Status" /></a> <a href="https://codecov.io/gh/kwrooijen/gungnir"><img src="https://codecov.io/gh/kwrooijen/gungnir/branch/master/graph/badge.svg" alt="codecov" /></a> <a href="https://versions.deps.co/kwrooijen/gungnir"><img src="https://versions.deps.co/kwrooijen/gungnir/status.svg" alt="Dependencies Status" /></a> <a href="https://clojars.org/kwrooijen/gungnir"><img src="https://img.shields.io/clojars/v/gungnir.svg" alt="Clojars Project" /></a> <a href="https://clojurians.slack.com/messages/gungnir/"><img src="https://img.shields.io/badge/clojurians-gungnir-blue.svg?logo=slack" alt="Slack" /></a></p> |
| 5 | +<p><a href="https://github.com/kwrooijen/gungnir/actions/workflows/test.yml"><img src="https://github.com/kwrooijen/gungnir/actions/workflows/test.yml/badge.svg" alt="Build Status" /></a> <a href="https://codecov.io/gh/kwrooijen/gungnir"><img src="https://codecov.io/gh/kwrooijen/gungnir/branch/master/graph/badge.svg" alt="codecov" /></a> <a href="https://versions.deps.co/kwrooijen/gungnir"><img src="https://versions.deps.co/kwrooijen/gungnir/status.svg" alt="Dependencies Status" /></a> <a href="https://clojars.org/kwrooijen/gungnir"><img src="https://img.shields.io/clojars/v/kwrooijen/gungnir.svg" alt="Clojars Project" /></a> <a href="https://clojurians.slack.com/messages/gungnir/"><img src="https://img.shields.io/badge/clojurians-gungnir-blue.svg?logo=slack" alt="Slack" /></a></p> |
6 | 6 | <blockquote>
|
7 | 7 | <p>It is said that Gungnir could strike any target, regardless of the wielder’s skill.</p>
|
8 | 8 | <p>- Developer, speaking to the database admin.</p>
|
9 | 9 | </blockquote>
|
10 | 10 | <p><a href="https://kwrooijen.github.io/gungnir/guide.html">Read the guide</a></p>
|
| 11 | +<p><a href="https://github.com/kwrooijen/gungnir-playground">Gungnir code playground</a></p> |
11 | 12 | <p><a href="https://www.youtube.com/watch?v=9Sr_-Vk9wBw">Dutch Clojure Meetup - Gungnir</a></p>
|
12 | 13 | <pre><code class="language-clojure">(gungnir.database/make-datasource!
|
13 |
| - {:adapter "postgresql" |
14 |
| - :username "postgres" |
15 |
| - :password "postgres" |
16 |
| - :database-name "postgres" |
17 |
| - :server-name "localhost" |
18 |
| - :port-number 5432}) |
| 14 | + {:adapter "postgresql" |
| 15 | + :username "postgres" |
| 16 | + :password "postgres" |
| 17 | + :database-name "postgres" |
| 18 | + :server-name "localhost" |
| 19 | + :port-number 5432}) |
19 | 20 |
|
20 | 21 | (def account-model
|
21 | 22 | [:map
|
22 | 23 | [:account/id {:primary-key true} uuid?]
|
23 | 24 | [:account/email {:before-save [:string/lower-case]
|
24 |
| - :before-read [:string/lower-case]} |
| 25 | + :before-read [:string/lower-case]} |
25 | 26 | [:re {:error/message "Invalid email"} #".+@.+\..+"]]
|
26 | 27 | [:account/password {:before-save [:bcrypt]} [:string {:min 6}]]
|
27 | 28 | [:account/password-confirmation {:virtual true} [:string {:min 6}]]
|
|
49 | 50 | (gungnir.changeset/create [:account/password-match?])
|
50 | 51 | (gungnir.query/save!)))
|
51 | 52 |
|
52 |
| -(comment |
53 |
| - (gungnir.query/find-by! :account/email "some@email.com") ;; => {:account/email "some@email.com",,,} |
54 |
| - (-> (gungnir.query/limit 5) |
55 |
| - (gungnir.query/select :account/id :account/email) |
56 |
| - (gungnir.query/all! :account)) ;; => [{:account/email "..." :account/id "..."},,,] |
57 |
| - ) |
| 53 | +(gungnir.query/find-by! :account/email "some@email.com") ;; => {:account/email "some@email.com",,,} |
| 54 | + |
| 55 | +(-> (gungnir.query/limit 5) |
| 56 | + (gungnir.query/select :account/id :account/email) |
| 57 | + (gungnir.query/all! :account)) ;; => [{:account/email "..." :account/id "..."},,,] |
58 | 58 | </code></pre>
|
59 | 59 | <h2><a href="#installation" id="installation"></a>Installation</h2>
|
60 | 60 | <p>Gungnir is still in its design phase and can result in breaking changes while on the SNAPSHOT version. Any breaking changes will be reflected in the updated documentation.</p>
|
61 | 61 | <p>Add the following dependencies to your <code>project.clj</code></p>
|
62 | 62 | <h3><a href="#versions" id="versions"></a>Versions</h3>
|
63 | 63 | <ul>
|
64 |
| -<li><a href="http://repo.clojars.org/kwrooijen/gungnir/0.0.1-SNAPSHOT/">gungnir versions</a></li> |
65 |
| -<li><a href="http://repo.clojars.org/kwrooijen/gungnir.ui/0.0.1-SNAPSHOT/">gungnir.ui versions</a></li> |
| 64 | +<li><a href="http://repo.clojars.org/kwrooijen/gungnir/0.0.2-SNAPSHOT/">gungnir versions</a></li> |
| 65 | +<li><a href="http://repo.clojars.org/kwrooijen/gungnir.ui/0.0.2-SNAPSHOT/">gungnir.ui versions</a></li> |
66 | 66 | </ul>
|
67 |
| -<pre><code class="language-clojure">:dependencies [[kwrooijen/gungnir "0.0.1-xxxxxxxx.yyyyyy-z"] |
| 67 | +<pre><code class="language-clojure">:dependencies [[kwrooijen/gungnir "0.0.2-xxxxxxxx.yyyyyy-z"] |
68 | 68 | ;; Optionally for frontend validation
|
69 |
| - [kwrooijen/gungnir.ui "0.0.1-xxxxxxxx.yyyyyy-z"] |
| 69 | + [kwrooijen/gungnir.ui "0.0.2-xxxxxxxx.yyyyyy-z"] |
70 | 70 | ,,,]
|
71 | 71 | </code></pre>
|
72 | 72 | <h2><a href="#rationale" id="rationale"></a>Rationale</h2>
|
|
0 commit comments