diametric 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: