entity_store_sequel 0.0.8 → 0.0.9
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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1899036c5a8d1dddb1db7d3983403d52457b2f0f
|
4
|
+
data.tar.gz: 351364c47638483e1f5e9720d5a51587100cba99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ecacf83b990024c8d66f42c2b54a225361d02e061c7445d977380cad6edca430c6937dbaa479b92eb46b2daad599cac654e3672fa344c203006ae85ad2b5d01
|
7
|
+
data.tar.gz: 4384bb30c9f78e3f041a2a2a4a95c9747247acf866c190b9234da0f25be64de1cf6b98fe9eb71dba927864f4c78442bfec0238e12ea50c6c66a7e264291bcfc8
|
@@ -121,7 +121,7 @@ module EntityStoreSequel
|
|
121
121
|
:_entity_id => event.entity_id.to_s,
|
122
122
|
:entity_version => event.entity_version,
|
123
123
|
:at => event.attributes[:at],
|
124
|
-
:data => PigeonHole.generate(hash_without_keys(event.attributes, :entity_id, :at)),
|
124
|
+
:data => PigeonHole.generate(hash_without_keys(event.attributes, :entity_id, :at, :entity_version)),
|
125
125
|
}
|
126
126
|
events.insert(doc)
|
127
127
|
end
|
@@ -195,18 +195,24 @@ module EntityStoreSequel
|
|
195
195
|
def get_events(criteria)
|
196
196
|
return {} if criteria.empty?
|
197
197
|
|
198
|
-
|
199
|
-
|
200
|
-
criteria.each do |item|
|
201
|
-
raise ArgumentError.new(":id missing from criteria") unless item[:id]
|
202
|
-
|
203
|
-
query = events.where(:_entity_id => item[:id])
|
198
|
+
query = events
|
204
199
|
|
200
|
+
criteria.each_with_index do |item, i|
|
201
|
+
filter_method = filter_method_name(i)
|
205
202
|
if item[:since_version]
|
206
|
-
query = query.
|
203
|
+
query = query.send(filter_method, '_entity_id = ? AND entity_version > ?', item[:id], item[:since_version])
|
204
|
+
else
|
205
|
+
query = query.send(filter_method, '_entity_id = ?', item[:id])
|
207
206
|
end
|
207
|
+
end
|
208
|
+
|
209
|
+
result = query.to_hash_groups(:_entity_id)
|
210
|
+
|
211
|
+
result.each do |id, events|
|
212
|
+
events.sort_by! { |attrs| [attrs[:entity_version], attrs[:id].to_s] }
|
208
213
|
|
209
|
-
|
214
|
+
# Convert the attributes into event objects
|
215
|
+
events.map! do |attrs|
|
210
216
|
begin
|
211
217
|
if self.class.native_json_hash
|
212
218
|
hash = attrs[:data].to_h
|
@@ -221,9 +227,15 @@ module EntityStoreSequel
|
|
221
227
|
EntityStore::Config.load_type(attrs[:_type]).new(hash)
|
222
228
|
rescue => e
|
223
229
|
log_error "Error loading type #{attrs[:_type]}", e
|
224
|
-
|
230
|
+
nil
|
225
231
|
end
|
226
|
-
end
|
232
|
+
end
|
233
|
+
|
234
|
+
events.compact!
|
235
|
+
end
|
236
|
+
|
237
|
+
criteria.each do |item|
|
238
|
+
result[item[:id].to_s] ||= []
|
227
239
|
end
|
228
240
|
|
229
241
|
result
|
@@ -231,6 +243,10 @@ module EntityStoreSequel
|
|
231
243
|
|
232
244
|
private
|
233
245
|
|
246
|
+
def filter_method_name(index)
|
247
|
+
index == 0 ? :where : :or
|
248
|
+
end
|
249
|
+
|
234
250
|
def hash_without_keys(hash, *keys)
|
235
251
|
hash_dup = hash.dup
|
236
252
|
keys.each { |key| hash_dup.delete(key) }
|
@@ -66,6 +66,24 @@ describe PostgresEntityStore do
|
|
66
66
|
store.add_events([ second_event, unrelated_event, first_event, third_event, fourth_event ])
|
67
67
|
end
|
68
68
|
|
69
|
+
context "multiple entities" do
|
70
|
+
subject { store.get_events( [{ id: event_entity_id }, { id: unknown_id }]) }
|
71
|
+
|
72
|
+
context "all events" do
|
73
|
+
let(:event_entity_id) { entity_id }
|
74
|
+
let(:unknown_id) { random_object_id }
|
75
|
+
let(:since_version) { 0 }
|
76
|
+
|
77
|
+
it "should return the four events in order for known id" do
|
78
|
+
subject[event_entity_id].should == [first_event, second_event, third_event, fourth_event]
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return no events in order unknown id" do
|
82
|
+
subject[unknown_id].should be_empty
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
69
87
|
subject { store.get_events( [{ id: event_entity_id, since_version: since_version }])[event_entity_id] }
|
70
88
|
|
71
89
|
context "all events" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: entity_store_sequel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen Binns
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sequel
|