diametric 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +6 -14
  2. data/Gemfile +3 -3
  3. data/Jarfile +13 -6
  4. data/LICENSE.txt +2 -2
  5. data/README.md +57 -26
  6. data/Rakefile +1 -0
  7. data/bin/datomic-rest +1 -1
  8. data/bin/download-datomic +1 -1
  9. data/datomic_version.yml +2 -2
  10. data/diametric.gemspec +8 -7
  11. data/ext/diametric/DiametricCollection.java +45 -38
  12. data/ext/diametric/DiametricConnection.java +16 -15
  13. data/ext/diametric/DiametricDatabase.java +9 -8
  14. data/ext/diametric/DiametricEntity.java +104 -21
  15. data/ext/diametric/DiametricObject.java +12 -1
  16. data/ext/diametric/DiametricPeer.java +52 -31
  17. data/ext/diametric/DiametricService.java +2 -0
  18. data/ext/diametric/DiametricSet.java +11 -4
  19. data/ext/diametric/DiametricUUID.java +8 -1
  20. data/ext/diametric/DiametricUtils.java +90 -62
  21. data/lib/diametric.rb +1 -0
  22. data/lib/diametric/associations/collection.rb +103 -0
  23. data/lib/diametric/entity.rb +166 -103
  24. data/lib/diametric/persistence/common.rb +0 -44
  25. data/lib/diametric/persistence/peer.rb +53 -2
  26. data/lib/diametric/persistence/rest.rb +27 -1
  27. data/lib/diametric/query.rb +49 -31
  28. data/lib/diametric/rest_service.rb +8 -9
  29. data/lib/diametric/service_base.rb +7 -7
  30. data/lib/diametric/transactor.rb +6 -5
  31. data/lib/diametric/version.rb +1 -1
  32. data/lib/diametric_service.jar +0 -0
  33. data/spec/config/free-transactor-template.properties +6 -6
  34. data/spec/developer_query_spec.rb +17 -6
  35. data/spec/diametric/entity_spec.rb +62 -139
  36. data/spec/diametric/peer_api_spec.rb +23 -23
  37. data/spec/diametric/persistence/peer_spec.rb +73 -11
  38. data/spec/diametric/persistence/rest_spec.rb +108 -16
  39. data/spec/diametric/query_spec.rb +3 -3
  40. data/spec/diametric/rest_service_spec.rb +4 -4
  41. data/spec/diametric/schema_spec.rb +526 -0
  42. data/spec/diametric/transactor_spec.rb +5 -6
  43. data/spec/integration_spec.rb +7 -7
  44. data/spec/peer_integration_spec.rb +25 -1
  45. data/spec/peer_seattle_spec.rb +1 -2
  46. data/spec/spec_helper.rb +31 -4
  47. data/spec/support/cardinarity_many_example.rb +37 -0
  48. data/spec/support/entities.rb +127 -0
  49. data/spec/support/has_a_example.rb +31 -0
  50. data/spec/support/has_many_example.rb +79 -0
  51. data/spec/support/persistence_examples.rb +13 -5
  52. data/spec/support/various_types_examples.rb +163 -0
  53. data/spec/test_version_file.yml +2 -2
  54. metadata +66 -15
@@ -65,7 +65,8 @@ shared_examples "persistence API" do
65
65
  end
66
66
 
67
67
  it "can find it by attribute" do
68
- model2 = model_class.first({:name => "Wilbur"}, nil, true)
68
+ model2 = model_class.first({:name => "Wilbur"}, nil, true) if model_class.ancestors.include? Diametric::Persistence::Peer
69
+ model2 = model_class.first({:name => "Wilbur"}) if model_class.ancestors.include? Diametric::Persistence::REST
69
70
  model2.should_not be_nil
70
71
  model2.dbid.should == model.dbid
71
72
  model2.should == model if model2.is_a? Rat
@@ -73,23 +74,30 @@ shared_examples "persistence API" do
73
74
  end
74
75
 
75
76
  it "can find all matching conditions" do
76
- mice = model_class.where({:name => "Wilbur"}, nil, true).where(:age => 2).all
77
+ if model_class.ancestors.include? Diametric::Persistence::Peer
78
+ mice = model_class.where({:name => "Wilbur"}, nil, true).where(:age => 2).all
79
+ else
80
+ mice = model_class.where({:name => "Wilbur"}).where(:age => 2).all
81
+ end
77
82
  mice.should == [model]
78
83
  mice.should include(model)
79
84
  end
80
85
 
81
86
  it "can filter entities" do
82
- mice = model_class.filter(:<, :age, 3).all
87
+ mice = model_class.filter(nil, :<, :age, 3).all if model_class.ancestors.include? Diametric::Persistence::Peer
88
+ mice = model_class.filter(:<, :age, 3).all if model_class.ancestors.include? Diametric::Persistence::REST
83
89
  mice.should == [model]
84
90
  mice.should include(model)
85
91
 
86
- mice = model_class.filter(:>, :age, 3).all
92
+ mice = model_class.filter(nil, :>, :age, 3).all if model_class.ancestors.include? Diametric::Persistence::Peer
93
+ mice = model_class.filter(:>, :age, 3).all if model_class.ancestors.include? Diametric::Persistence::REST
87
94
  mice.should == []
88
95
  end
89
96
 
90
97
  it "can find all" do
91
98
  model_class.new(:name => "Smith", :age => 5).save
92
- mice = model_class.all(nil, true)
99
+ mice = model_class.all(nil, true) if model_class.ancestors.include? Diametric::Persistence::Peer
100
+ mice = model_class.all if model_class.ancestors.include? Diametric::Persistence::REST
93
101
  mice.should_not be_nil
94
102
  mice.size.should == 2
95
103
  names = ["Smith", "Wilbur"]
@@ -0,0 +1,163 @@
1
+ require 'uuid'
2
+
3
+ shared_examples "supports various types" do
4
+ describe "entity instance" do
5
+ let(:model) { model_class.new }
6
+
7
+ it "can save" do
8
+ model.name = "Wilbur"
9
+ model.description = "This bird has a lot of colors on its body which draws other animals' attentions"
10
+ model.talkative = true
11
+ model.colors = 200
12
+ model.average_speed = 12.34
13
+ model.observed = DateTime.parse("2013-12-24T07:18:29")
14
+ # REST failes to save UUID
15
+ if model_class.ancestors.include? Diametric::Persistence::Peer
16
+ model.case_no = UUID.new.generate
17
+ model.serial = UUID.new.generate
18
+ end
19
+ model.save.should be_true
20
+ model.should be_persisted
21
+ end
22
+
23
+ describe '#update_attributes' do
24
+ let(:bird) {
25
+ model.name = "William"
26
+ model.description = "This bird is famous for its colorful body."
27
+ model.talkative = false
28
+ model.colors = 150
29
+ model.average_speed = 6.99
30
+ model.observed = DateTime.parse("2010-11-12T05:16:27")
31
+ # REST failes to save UUID
32
+ if model_class.ancestors.include? Diametric::Persistence::Peer
33
+ model.case_no = UUID.new.generate
34
+ model.serial = UUID.new.generate
35
+ end
36
+ model.save
37
+ model
38
+ }
39
+
40
+ it "saves and updates name" do
41
+ new_values = { "name" => "Stuart" }
42
+ bird.update_attributes(new_values)
43
+
44
+ bird.should_not be_changed
45
+ bird.name.should == "Stuart"
46
+ if model_class.ancestors.include? Diametric::Persistence::Peer
47
+ result = model_class.where({:name => new_values["name"]}, nil, true).first
48
+ else
49
+ result = model_class.where({:name => new_values["name"]}).first
50
+ end
51
+ result.dbid.should == model.dbid
52
+ end
53
+
54
+ it "saves and updates description" do
55
+ new_values = { "description" => "Many words should be here to replace the value of description." }
56
+ bird.update_attributes(new_values)
57
+
58
+ bird.should_not be_changed
59
+ bird.description.should include("Many words")
60
+ if model_class.ancestors.include? Diametric::Persistence::Peer
61
+ result = model_class.where({:description => new_values["description"]}, nil, true).first
62
+ else
63
+ result = model_class.where({:description => new_values["description"]}).first
64
+ end
65
+ result.dbid.should == model.dbid
66
+ end
67
+
68
+ it "saves and updates talkative" do
69
+ new_values = { "talkative" => true }
70
+ bird.update_attributes(new_values)
71
+
72
+ bird.should_not be_changed
73
+ bird.talkative.should be_true
74
+ if model_class.ancestors.include? Diametric::Persistence::Peer
75
+ result = model_class.where({:talkative => new_values["talkative"]}, nil, true).first
76
+ else
77
+ result = model_class.where({:talkative => new_values["talkative"]}).first
78
+ end
79
+ result.dbid.should == model.dbid
80
+ end
81
+
82
+ it "saves and updates colors" do
83
+ new_values = { "colors" => 345 }
84
+ bird.update_attributes(new_values)
85
+
86
+ bird.should_not be_changed
87
+ bird.colors.should be_true
88
+ if model_class.ancestors.include? Diametric::Persistence::Peer
89
+ result = model_class.where({:colors => new_values["colors"]}, nil, true).first
90
+ else
91
+ result = model_class.where({:colors => new_values["colors"]}).first
92
+ end
93
+ result.dbid.should == model.dbid
94
+ end
95
+
96
+ it "saves and updates average_speed" do
97
+ new_values = { "average_speed" => 1.58 }
98
+ bird.update_attributes(new_values)
99
+
100
+ bird.should_not be_changed
101
+ bird.average_speed.should be_true
102
+ if model_class.ancestors.include? Diametric::Persistence::Peer
103
+ result = model_class.where({:average_speed => new_values["average_speed"]}, nil, true).first
104
+ else
105
+ result = model_class.where({:average_speed => new_values["average_speed"]}).first
106
+ end
107
+ result.dbid.should == model.dbid
108
+ end
109
+
110
+ it "saves and updates observed" do
111
+ new_values = { "observed" => DateTime.parse("2012-11-23T06:17:28") }
112
+ bird.update_attributes(new_values)
113
+
114
+ bird.should_not be_changed
115
+ bird.observed.should be_true
116
+ if model_class.ancestors.include? Diametric::Persistence::Peer
117
+ result = model_class.where({:observed => new_values["observed"]}, nil, true).first
118
+ else
119
+ result = model_class.where({:observed => new_values["observed"]}).first
120
+ end
121
+ result.dbid.should == model.dbid
122
+ end
123
+
124
+ it "saves and updates case_no" do
125
+ if model_class.ancestors.include? Diametric::Persistence::REST
126
+ pending "REST fails to save UUID type"
127
+ else
128
+ no = UUID.new.generate
129
+ new_values = { "case_no" => no }
130
+ bird.update_attributes(new_values)
131
+
132
+ bird.should_not be_changed
133
+ bird.case_no.should be_true
134
+ if model_class.ancestors.include? Diametric::Persistence::Peer
135
+ result = model_class.where({:case_no => new_values["case_no"]}, nil, true).first
136
+ else
137
+ result = model_class.where({:case_no => new_values["case_no"]}).first
138
+ end
139
+ result.dbid.should == model.dbid
140
+ end
141
+ end
142
+
143
+ it "saves and updates serial" do
144
+ if model_class.ancestors.include? Diametric::Persistence::REST
145
+ pending "REST fails to save UUID type"
146
+ else
147
+ no = UUID.new.generate
148
+ new_values = { "serial" => no }
149
+ bird.update_attributes(new_values)
150
+
151
+ bird.should_not be_changed
152
+ bird.serial.should be_true
153
+ if model_class.ancestors.include? Diametric::Persistence::Peer
154
+ result = model_class.where({:serial => new_values["serial"]}, nil, true).first
155
+ else
156
+ result = model_class.where({:serial => new_values["serial"]}).first
157
+ end
158
+ result.dbid.should == model.dbid
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
@@ -1,4 +1,4 @@
1
1
  free:
2
- datomic-free-0.8.4122
2
+ 0.9.4497
3
3
  pro:
4
- datomic-pro-0.8.4122
4
+ 0.9.4497
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diametric
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clinton N. Dreisbach
@@ -10,13 +10,16 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-11-10 00:00:00.000000000 Z
13
+ date: 2014-02-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: edn
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
22
+ - - '>='
20
23
  - !ruby/object:Gem::Version
21
24
  version: 1.0.2
22
25
  type: :runtime
@@ -24,6 +27,9 @@ dependencies:
24
27
  version_requirements: !ruby/object:Gem::Requirement
25
28
  requirements:
26
29
  - - ~>
30
+ - !ruby/object:Gem::Version
31
+ version: '1.0'
32
+ - - '>='
27
33
  - !ruby/object:Gem::Version
28
34
  version: 1.0.2
29
35
  - !ruby/object:Gem::Dependency
@@ -32,33 +38,48 @@ dependencies:
32
38
  requirements:
33
39
  - - ~>
34
40
  - !ruby/object:Gem::Version
35
- version: 3.2.14
41
+ version: '3.2'
42
+ - - '>='
43
+ - !ruby/object:Gem::Version
44
+ version: 3.2.16
36
45
  type: :runtime
37
46
  prerelease: false
38
47
  version_requirements: !ruby/object:Gem::Requirement
39
48
  requirements:
40
49
  - - ~>
41
50
  - !ruby/object:Gem::Version
42
- version: 3.2.14
51
+ version: '3.2'
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 3.2.16
43
55
  - !ruby/object:Gem::Dependency
44
56
  name: activemodel
45
57
  requirement: !ruby/object:Gem::Requirement
46
58
  requirements:
47
59
  - - ~>
48
60
  - !ruby/object:Gem::Version
49
- version: 3.2.14
61
+ version: '3.2'
62
+ - - '>='
63
+ - !ruby/object:Gem::Version
64
+ version: 3.2.16
50
65
  type: :runtime
51
66
  prerelease: false
52
67
  version_requirements: !ruby/object:Gem::Requirement
53
68
  requirements:
54
69
  - - ~>
55
70
  - !ruby/object:Gem::Version
56
- version: 3.2.14
71
+ version: '3.2'
72
+ - - '>='
73
+ - !ruby/object:Gem::Version
74
+ version: 3.2.16
57
75
  - !ruby/object:Gem::Dependency
58
76
  name: datomic-client
59
77
  requirement: !ruby/object:Gem::Requirement
60
78
  requirements:
61
79
  - - ~>
80
+ - !ruby/object:Gem::Version
81
+ version: '0.4'
82
+ - - '>='
62
83
  - !ruby/object:Gem::Version
63
84
  version: 0.4.1
64
85
  type: :runtime
@@ -66,6 +87,9 @@ dependencies:
66
87
  version_requirements: !ruby/object:Gem::Requirement
67
88
  requirements:
68
89
  - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: '0.4'
92
+ - - '>='
69
93
  - !ruby/object:Gem::Version
70
94
  version: 0.4.1
71
95
  - !ruby/object:Gem::Dependency
@@ -73,6 +97,9 @@ dependencies:
73
97
  requirement: !ruby/object:Gem::Requirement
74
98
  requirements:
75
99
  - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: '0.9'
102
+ - - '>='
76
103
  - !ruby/object:Gem::Version
77
104
  version: 0.9.9
78
105
  type: :runtime
@@ -80,6 +107,9 @@ dependencies:
80
107
  version_requirements: !ruby/object:Gem::Requirement
81
108
  requirements:
82
109
  - - ~>
110
+ - !ruby/object:Gem::Version
111
+ version: '0.9'
112
+ - - '>='
83
113
  - !ruby/object:Gem::Version
84
114
  version: 0.9.9
85
115
  - !ruby/object:Gem::Dependency
@@ -87,6 +117,9 @@ dependencies:
87
117
  requirement: !ruby/object:Gem::Requirement
88
118
  requirements:
89
119
  - - ~>
120
+ - !ruby/object:Gem::Version
121
+ version: '2.3'
122
+ - - '>='
90
123
  - !ruby/object:Gem::Version
91
124
  version: 2.3.7
92
125
  type: :runtime
@@ -94,6 +127,9 @@ dependencies:
94
127
  version_requirements: !ruby/object:Gem::Requirement
95
128
  requirements:
96
129
  - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: '2.3'
132
+ - - '>='
97
133
  - !ruby/object:Gem::Version
98
134
  version: 2.3.7
99
135
  - !ruby/object:Gem::Dependency
@@ -101,6 +137,9 @@ dependencies:
101
137
  requirement: !ruby/object:Gem::Requirement
102
138
  requirements:
103
139
  - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: '2.3'
142
+ - - '>='
104
143
  - !ruby/object:Gem::Version
105
144
  version: 2.14.1
106
145
  type: :runtime
@@ -108,15 +147,15 @@ dependencies:
108
147
  version_requirements: !ruby/object:Gem::Requirement
109
148
  requirements:
110
149
  - - ~>
150
+ - !ruby/object:Gem::Version
151
+ version: '2.3'
152
+ - - '>='
111
153
  - !ruby/object:Gem::Version
112
154
  version: 2.14.1
113
- description: ! 'Diametric is a library for building schemas, queries, and transactions
114
-
155
+ description: |
156
+ Diametric is a library for building schemas, queries, and transactions
115
157
  for Datomic from Ruby objects. It is also used to map Ruby objects
116
-
117
158
  as entities into a Datomic database.
118
-
119
- '
120
159
  email:
121
160
  - crnixon@gmail.com
122
161
  - ryan@thinkrelevance.com
@@ -136,6 +175,7 @@ files:
136
175
  - datomic_version.yml
137
176
  - diametric.gemspec
138
177
  - lib/boolean_type.rb
178
+ - lib/diametric/associations/collection.rb
139
179
  - lib/diametric/config/environment.rb
140
180
  - lib/diametric/config.rb
141
181
  - lib/diametric/entity.rb
@@ -184,6 +224,7 @@ files:
184
224
  - spec/diametric/persistence_spec.rb
185
225
  - spec/diametric/query_spec.rb
186
226
  - spec/diametric/rest_service_spec.rb
227
+ - spec/diametric/schema_spec.rb
187
228
  - spec/diametric/transactor_spec.rb
188
229
  - spec/integration_spec.rb
189
230
  - spec/parent_child_sample.rb
@@ -195,14 +236,19 @@ files:
195
236
  - spec/seattle_integration_spec.rb
196
237
  - spec/simple_validation_sample.rb
197
238
  - spec/spec_helper.rb
239
+ - spec/support/cardinarity_many_example.rb
198
240
  - spec/support/entities.rb
199
241
  - spec/support/gen_entity_class.rb
242
+ - spec/support/has_a_example.rb
243
+ - spec/support/has_many_example.rb
200
244
  - spec/support/persistence_examples.rb
245
+ - spec/support/various_types_examples.rb
201
246
  - spec/test_version_file.yml
202
247
  - bin/datomic-rest
203
248
  - bin/download-datomic
204
249
  homepage: https://github.com/relevance/diametric
205
- licenses: []
250
+ licenses:
251
+ - MIT
206
252
  metadata: {}
207
253
  post_install_message:
208
254
  rdoc_options: []
@@ -210,17 +256,17 @@ require_paths:
210
256
  - lib
211
257
  required_ruby_version: !ruby/object:Gem::Requirement
212
258
  requirements:
213
- - - ! '>='
259
+ - - '>='
214
260
  - !ruby/object:Gem::Version
215
261
  version: '0'
216
262
  required_rubygems_version: !ruby/object:Gem::Requirement
217
263
  requirements:
218
- - - ! '>='
264
+ - - '>='
219
265
  - !ruby/object:Gem::Version
220
266
  version: '0'
221
267
  requirements: []
222
268
  rubyforge_project:
223
- rubygems_version: 2.0.5
269
+ rubygems_version: 2.1.11
224
270
  signing_key:
225
271
  specification_version: 4
226
272
  summary: ActiveModel for Datomic
@@ -237,6 +283,7 @@ test_files:
237
283
  - spec/diametric/persistence_spec.rb
238
284
  - spec/diametric/query_spec.rb
239
285
  - spec/diametric/rest_service_spec.rb
286
+ - spec/diametric/schema_spec.rb
240
287
  - spec/diametric/transactor_spec.rb
241
288
  - spec/integration_spec.rb
242
289
  - spec/parent_child_sample.rb
@@ -248,7 +295,11 @@ test_files:
248
295
  - spec/seattle_integration_spec.rb
249
296
  - spec/simple_validation_sample.rb
250
297
  - spec/spec_helper.rb
298
+ - spec/support/cardinarity_many_example.rb
251
299
  - spec/support/entities.rb
252
300
  - spec/support/gen_entity_class.rb
301
+ - spec/support/has_a_example.rb
302
+ - spec/support/has_many_example.rb
253
303
  - spec/support/persistence_examples.rb
304
+ - spec/support/various_types_examples.rb
254
305
  has_rdoc: