dalton 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: fd9ac2d6eb314a14d3cc4df36671a2d0ef140270
4
+ data.tar.gz: c1ef18468641f9b49a43dbaeea81175981d3d202
5
+ SHA512:
6
+ metadata.gz: 22456dbd587f86774cacd156bb68c3d99507a4c70fc42c066fc9b7c81c66dc647cdf12e23627fc6abebf933e9e4aa0ba5519a1cb1747b132c2255160d736c24a
7
+ data.tar.gz: 5c7356ed6db3aa851dd0e315e4e4fee0e1d3aad1cf712528e76e03d2b4ca39060b15e7ac4681ff711082916dc51f0522e1cefc05e5761205b970c5423793425e
@@ -0,0 +1,19 @@
1
+ # Ignore bundler & gem stuff
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
5
+ Jarfile.lock
6
+ /.jbundler
7
+ pkg/*
8
+
9
+ # Ignore db
10
+ /db
11
+ /vendor/datomic
12
+
13
+ # Ignore all logfiles and tempfiles.
14
+ /log
15
+ /tmp
16
+ /clojure/target/
17
+ clojure/.lein-failures
18
+ clojure/.lein-repl-history
19
+ clojure/pom.xml
@@ -0,0 +1 @@
1
+ compat.version = 2.0
@@ -0,0 +1 @@
1
+ jruby
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
4
+ gem 'jbundler'
5
+ gem 'rspec', '~> 3.0'
6
+ gem 'wrong'
7
+ gem 'pry'
8
+ gem 'rspec-console', :github => 'hanachin/rspec-console', :ref => 'support-rspec3'
data/Jarfile ADDED
@@ -0,0 +1,7 @@
1
+ repository :jboss, 'https://repository.jboss.org/nexus/content/groups/public-jboss'
2
+ repository :couchbase, 'https://files.couchbase.com/maven2/'
3
+ repository :clojars, 'https://clojars.org/repo'
4
+
5
+ # Default group is default
6
+ jar "com.datomic:datomic-pro:[0.9,1.0)"
7
+ jar "com.goodguide:datomizer:0.2.0"
@@ -0,0 +1,35 @@
1
+ # Dalton
2
+
3
+ ## Datomic for JRuby
4
+
5
+ **NB: This project is very alpha. Expect things to change rapidly and without warning.**
6
+
7
+ [![John Dalton][john-dalton-img]][john-dalton-wiki]
8
+
9
+ ### The basics
10
+
11
+ ``` ruby
12
+ connection = Dalton::Connection.connect("datomic:mem://my-cool-db")
13
+
14
+ # transactions!
15
+ connection.transact([:'db/add', Dalton::Utility.tempid('db.part/db'), :'db/ident', :'hello/world'])
16
+ connection.retract(entity)
17
+
18
+ # latest db
19
+ db = connection.refresh
20
+
21
+ # querying
22
+ connection.db.query([:find, '?e', :where, ['?e', :'db/ident', :'hello/world']])
23
+ ```
24
+
25
+ ### TODO
26
+
27
+ * Remove the dependency on Zweikopf and restructure data handling over the bridge
28
+ * More and better docs, especially for `Dalton::Model`
29
+ * Test-drive `Dalton::Model`'s design and fill in missing features
30
+ * Remove the internal `@db` reference from `Dalton::Connection`
31
+ * Improve naming of `Dalton::Utility` functions and consider extending / separating
32
+ * Non-Jruby support, potentially through transit and a local peer server
33
+
34
+ [john-dalton-img]: https://upload.wikimedia.org/wikipedia/commons/thumb/d/d4/John_Dalton_by_Charles_Turner.jpg/240px-John_Dalton_by_Charles_Turner.jpg
35
+ [john-dalton-wiki]: https://en.wikipedia.org/wiki/John_Dalton
@@ -0,0 +1,7 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task :default => :spec
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "dalton/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "dalton"
7
+ s.version = Dalton::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Brian Jenkins", "Joshua Bates"]
10
+ s.email = ["brian@brianjenkins.org", "joshua@goodguide.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{A thin Datomic driver for JRuby}
13
+ s.description = %q{Dalton attempts to give low level access to Datomic from JRuby}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
18
+ s.require_paths = ["lib"]
19
+
20
+ s.add_runtime_dependency 'zweikopf', '0.4.0'
21
+
22
+ s.license = 'EPL'
23
+ end
@@ -0,0 +1,261 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1" ?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml">
4
+
5
+ <head>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
7
+ <title>Eclipse Public License - Version 1.0</title>
8
+ <style type="text/css">
9
+ body {
10
+ size: 8.5in 11.0in;
11
+ margin: 0.25in 0.5in 0.25in 0.5in;
12
+ tab-interval: 0.5in;
13
+ }
14
+ p {
15
+ margin-left: auto;
16
+ margin-top: 0.5em;
17
+ margin-bottom: 0.5em;
18
+ }
19
+ p.list {
20
+ margin-left: 0.5in;
21
+ margin-top: 0.05em;
22
+ margin-bottom: 0.05em;
23
+ }
24
+ </style>
25
+
26
+ </head>
27
+
28
+ <body lang="EN-US">
29
+
30
+ <p align=center><b>Eclipse Public License - v 1.0</b></p>
31
+
32
+ <p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
33
+ PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
34
+ DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
35
+ AGREEMENT.</p>
36
+
37
+ <p><b>1. DEFINITIONS</b></p>
38
+
39
+ <p>&quot;Contribution&quot; means:</p>
40
+
41
+ <p class="list">a) in the case of the initial Contributor, the initial
42
+ code and documentation distributed under this Agreement, and</p>
43
+ <p class="list">b) in the case of each subsequent Contributor:</p>
44
+ <p class="list">i) changes to the Program, and</p>
45
+ <p class="list">ii) additions to the Program;</p>
46
+ <p class="list">where such changes and/or additions to the Program
47
+ originate from and are distributed by that particular Contributor. A
48
+ Contribution 'originates' from a Contributor if it was added to the
49
+ Program by such Contributor itself or anyone acting on such
50
+ Contributor's behalf. Contributions do not include additions to the
51
+ Program which: (i) are separate modules of software distributed in
52
+ conjunction with the Program under their own license agreement, and (ii)
53
+ are not derivative works of the Program.</p>
54
+
55
+ <p>&quot;Contributor&quot; means any person or entity that distributes
56
+ the Program.</p>
57
+
58
+ <p>&quot;Licensed Patents&quot; mean patent claims licensable by a
59
+ Contributor which are necessarily infringed by the use or sale of its
60
+ Contribution alone or when combined with the Program.</p>
61
+
62
+ <p>&quot;Program&quot; means the Contributions distributed in accordance
63
+ with this Agreement.</p>
64
+
65
+ <p>&quot;Recipient&quot; means anyone who receives the Program under
66
+ this Agreement, including all Contributors.</p>
67
+
68
+ <p><b>2. GRANT OF RIGHTS</b></p>
69
+
70
+ <p class="list">a) Subject to the terms of this Agreement, each
71
+ Contributor hereby grants Recipient a non-exclusive, worldwide,
72
+ royalty-free copyright license to reproduce, prepare derivative works
73
+ of, publicly display, publicly perform, distribute and sublicense the
74
+ Contribution of such Contributor, if any, and such derivative works, in
75
+ source code and object code form.</p>
76
+
77
+ <p class="list">b) Subject to the terms of this Agreement, each
78
+ Contributor hereby grants Recipient a non-exclusive, worldwide,
79
+ royalty-free patent license under Licensed Patents to make, use, sell,
80
+ offer to sell, import and otherwise transfer the Contribution of such
81
+ Contributor, if any, in source code and object code form. This patent
82
+ license shall apply to the combination of the Contribution and the
83
+ Program if, at the time the Contribution is added by the Contributor,
84
+ such addition of the Contribution causes such combination to be covered
85
+ by the Licensed Patents. The patent license shall not apply to any other
86
+ combinations which include the Contribution. No hardware per se is
87
+ licensed hereunder.</p>
88
+
89
+ <p class="list">c) Recipient understands that although each Contributor
90
+ grants the licenses to its Contributions set forth herein, no assurances
91
+ are provided by any Contributor that the Program does not infringe the
92
+ patent or other intellectual property rights of any other entity. Each
93
+ Contributor disclaims any liability to Recipient for claims brought by
94
+ any other entity based on infringement of intellectual property rights
95
+ or otherwise. As a condition to exercising the rights and licenses
96
+ granted hereunder, each Recipient hereby assumes sole responsibility to
97
+ secure any other intellectual property rights needed, if any. For
98
+ example, if a third party patent license is required to allow Recipient
99
+ to distribute the Program, it is Recipient's responsibility to acquire
100
+ that license before distributing the Program.</p>
101
+
102
+ <p class="list">d) Each Contributor represents that to its knowledge it
103
+ has sufficient copyright rights in its Contribution, if any, to grant
104
+ the copyright license set forth in this Agreement.</p>
105
+
106
+ <p><b>3. REQUIREMENTS</b></p>
107
+
108
+ <p>A Contributor may choose to distribute the Program in object code
109
+ form under its own license agreement, provided that:</p>
110
+
111
+ <p class="list">a) it complies with the terms and conditions of this
112
+ Agreement; and</p>
113
+
114
+ <p class="list">b) its license agreement:</p>
115
+
116
+ <p class="list">i) effectively disclaims on behalf of all Contributors
117
+ all warranties and conditions, express and implied, including warranties
118
+ or conditions of title and non-infringement, and implied warranties or
119
+ conditions of merchantability and fitness for a particular purpose;</p>
120
+
121
+ <p class="list">ii) effectively excludes on behalf of all Contributors
122
+ all liability for damages, including direct, indirect, special,
123
+ incidental and consequential damages, such as lost profits;</p>
124
+
125
+ <p class="list">iii) states that any provisions which differ from this
126
+ Agreement are offered by that Contributor alone and not by any other
127
+ party; and</p>
128
+
129
+ <p class="list">iv) states that source code for the Program is available
130
+ from such Contributor, and informs licensees how to obtain it in a
131
+ reasonable manner on or through a medium customarily used for software
132
+ exchange.</p>
133
+
134
+ <p>When the Program is made available in source code form:</p>
135
+
136
+ <p class="list">a) it must be made available under this Agreement; and</p>
137
+
138
+ <p class="list">b) a copy of this Agreement must be included with each
139
+ copy of the Program.</p>
140
+
141
+ <p>Contributors may not remove or alter any copyright notices contained
142
+ within the Program.</p>
143
+
144
+ <p>Each Contributor must identify itself as the originator of its
145
+ Contribution, if any, in a manner that reasonably allows subsequent
146
+ Recipients to identify the originator of the Contribution.</p>
147
+
148
+ <p><b>4. COMMERCIAL DISTRIBUTION</b></p>
149
+
150
+ <p>Commercial distributors of software may accept certain
151
+ responsibilities with respect to end users, business partners and the
152
+ like. While this license is intended to facilitate the commercial use of
153
+ the Program, the Contributor who includes the Program in a commercial
154
+ product offering should do so in a manner which does not create
155
+ potential liability for other Contributors. Therefore, if a Contributor
156
+ includes the Program in a commercial product offering, such Contributor
157
+ (&quot;Commercial Contributor&quot;) hereby agrees to defend and
158
+ indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
159
+ against any losses, damages and costs (collectively &quot;Losses&quot;)
160
+ arising from claims, lawsuits and other legal actions brought by a third
161
+ party against the Indemnified Contributor to the extent caused by the
162
+ acts or omissions of such Commercial Contributor in connection with its
163
+ distribution of the Program in a commercial product offering. The
164
+ obligations in this section do not apply to any claims or Losses
165
+ relating to any actual or alleged intellectual property infringement. In
166
+ order to qualify, an Indemnified Contributor must: a) promptly notify
167
+ the Commercial Contributor in writing of such claim, and b) allow the
168
+ Commercial Contributor to control, and cooperate with the Commercial
169
+ Contributor in, the defense and any related settlement negotiations. The
170
+ Indemnified Contributor may participate in any such claim at its own
171
+ expense.</p>
172
+
173
+ <p>For example, a Contributor might include the Program in a commercial
174
+ product offering, Product X. That Contributor is then a Commercial
175
+ Contributor. If that Commercial Contributor then makes performance
176
+ claims, or offers warranties related to Product X, those performance
177
+ claims and warranties are such Commercial Contributor's responsibility
178
+ alone. Under this section, the Commercial Contributor would have to
179
+ defend claims against the other Contributors related to those
180
+ performance claims and warranties, and if a court requires any other
181
+ Contributor to pay any damages as a result, the Commercial Contributor
182
+ must pay those damages.</p>
183
+
184
+ <p><b>5. NO WARRANTY</b></p>
185
+
186
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
187
+ PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
188
+ OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
189
+ ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
190
+ OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
191
+ responsible for determining the appropriateness of using and
192
+ distributing the Program and assumes all risks associated with its
193
+ exercise of rights under this Agreement , including but not limited to
194
+ the risks and costs of program errors, compliance with applicable laws,
195
+ damage to or loss of data, programs or equipment, and unavailability or
196
+ interruption of operations.</p>
197
+
198
+ <p><b>6. DISCLAIMER OF LIABILITY</b></p>
199
+
200
+ <p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
201
+ NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
202
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
203
+ WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
204
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
205
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
206
+ DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
207
+ HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
208
+
209
+ <p><b>7. GENERAL</b></p>
210
+
211
+ <p>If any provision of this Agreement is invalid or unenforceable under
212
+ applicable law, it shall not affect the validity or enforceability of
213
+ the remainder of the terms of this Agreement, and without further action
214
+ by the parties hereto, such provision shall be reformed to the minimum
215
+ extent necessary to make such provision valid and enforceable.</p>
216
+
217
+ <p>If Recipient institutes patent litigation against any entity
218
+ (including a cross-claim or counterclaim in a lawsuit) alleging that the
219
+ Program itself (excluding combinations of the Program with other
220
+ software or hardware) infringes such Recipient's patent(s), then such
221
+ Recipient's rights granted under Section 2(b) shall terminate as of the
222
+ date such litigation is filed.</p>
223
+
224
+ <p>All Recipient's rights under this Agreement shall terminate if it
225
+ fails to comply with any of the material terms or conditions of this
226
+ Agreement and does not cure such failure in a reasonable period of time
227
+ after becoming aware of such noncompliance. If all Recipient's rights
228
+ under this Agreement terminate, Recipient agrees to cease use and
229
+ distribution of the Program as soon as reasonably practicable. However,
230
+ Recipient's obligations under this Agreement and any licenses granted by
231
+ Recipient relating to the Program shall continue and survive.</p>
232
+
233
+ <p>Everyone is permitted to copy and distribute copies of this
234
+ Agreement, but in order to avoid inconsistency the Agreement is
235
+ copyrighted and may only be modified in the following manner. The
236
+ Agreement Steward reserves the right to publish new versions (including
237
+ revisions) of this Agreement from time to time. No one other than the
238
+ Agreement Steward has the right to modify this Agreement. The Eclipse
239
+ Foundation is the initial Agreement Steward. The Eclipse Foundation may
240
+ assign the responsibility to serve as the Agreement Steward to a
241
+ suitable separate entity. Each new version of the Agreement will be
242
+ given a distinguishing version number. The Program (including
243
+ Contributions) may always be distributed subject to the version of the
244
+ Agreement under which it was received. In addition, after a new version
245
+ of the Agreement is published, Contributor may elect to distribute the
246
+ Program (including its Contributions) under the new version. Except as
247
+ expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
248
+ rights or licenses to the intellectual property of any Contributor under
249
+ this Agreement, whether expressly, by implication, estoppel or
250
+ otherwise. All rights in the Program not expressly granted under this
251
+ Agreement are reserved.</p>
252
+
253
+ <p>This Agreement is governed by the laws of the State of New York and
254
+ the intellectual property laws of the United States of America. No party
255
+ to this Agreement will bring a legal action under this Agreement more
256
+ than one year after the cause of action arose. Each party waives its
257
+ rights to a jury trial in any resulting litigation.</p>
258
+
259
+ </body>
260
+
261
+ </html>
@@ -0,0 +1,48 @@
1
+ class ApplicationController
2
+ include Dalton::Model::HasDatabase
3
+
4
+ def datomic_uri
5
+ App.datomic_uri
6
+ end
7
+
8
+ before_filter :refresh_datomic!
9
+
10
+ rescue_from Dalton::NotFound do |e|
11
+ render_404 "Could not find #{e.model} with id #{e.id}"
12
+ end
13
+
14
+ rescue_from Dalton::ValidationError do |e|
15
+ render_403 "#{e.changes.model} was invalid: #{e.errors.inspect}"
16
+ end
17
+ end
18
+
19
+ class PostsController < ApplicationController
20
+ def index
21
+ author = find(User).entity(params[:author])
22
+ @posts = find(Post).where(author: author)
23
+ end
24
+
25
+ def show
26
+ @post = find(Post).entity(params[:id])
27
+ end
28
+
29
+ def create
30
+ author = find(User).entity(params[:author])
31
+ @post = Post.create! do |p|
32
+ p.content = params[:content]
33
+ p.change_ref(:author) do |a|
34
+ a.last_post = p
35
+ end
36
+ end
37
+ end
38
+
39
+ def update
40
+ find(Post).entity(params[:id]).change! do |p|
41
+ p.content = params[:content]
42
+ end
43
+ end
44
+
45
+ def destroy
46
+ find(Post).entity(params[:id]).retract!
47
+ end
48
+ end
@@ -0,0 +1,37 @@
1
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == "jruby" or raise "JRuby required."
2
+
3
+ require 'rubygems'
4
+ require 'jbundler'
5
+ require 'zweikopf'
6
+ require 'pathname'
7
+
8
+ module Dalton
9
+ class DatomicError < StandardError
10
+ end
11
+ end
12
+
13
+ load_dir = Pathname.new(__FILE__).dirname
14
+ load load_dir.join('dalton/utility.rb')
15
+
16
+ load load_dir.join('dalton/datomization.rb')
17
+ load load_dir.join('dalton/undatomization.rb')
18
+
19
+ load load_dir.join('dalton/exception.rb')
20
+ load load_dir.join('dalton/database.rb')
21
+ load load_dir.join('dalton/connection.rb')
22
+ load load_dir.join('dalton/entity.rb')
23
+ load load_dir.join('dalton/transaction_result.rb')
24
+ load load_dir.join('dalton/attribute.rb')
25
+ load load_dir.join('dalton/translation.rb')
26
+
27
+ class Object
28
+ def to_edn
29
+ Dalton::Utility.to_edn(self)
30
+ end
31
+ end
32
+
33
+ # We need to shut down the Datomic driver and Clojure runtime
34
+ # before exit, or there will be ~20 second delay shutting down the JVM.
35
+ at_exit do
36
+ Java::Datomic::Peer.shutdown(true) # true means "also shut down Clojure runtime"
37
+ end