event_store 0.2.7 → 0.2.8
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 +8 -8
- data/lib/event_store/aggregate.rb +6 -0
- data/lib/event_store/client.rb +4 -0
- data/lib/event_store/event_appender.rb +1 -0
- data/lib/event_store/version.rb +1 -1
- data/spec/event_store/client_spec.rb +81 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZTgxNzVkNDg1ZTRiYTYxYmExMTQwYTExZTViMWNmM2E5NzkxMzQ0MA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NGNlZTcwMDdkNjcyYmQyMmVlMDY1NTRiNDc5MGVkNmM5ZTMwNWVhMA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGRhZjc4MzU5ZjlmMGIzOTgxNmU5NjQ3NzVhYjhkNzViMWFkNWI5NmY2MmE3
|
10
|
+
MGM4ZmQxNDVkZTBlMmQ4MmIzOTVlYzNkMGI5NTM3YTEzODdlN2RjZjUzMGFj
|
11
|
+
ZTIxZDA4OGM5OGM2Mjc4NWE4N2E3NmNiMGRmZmUwN2UyNjI3YmI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWFjYjRiYWY4NDY5ZDRhZmZlYjMxZGQ5M2NiNjlmZmIwNDQ3MTFhN2JkOWEw
|
14
|
+
YWJiOGFmYTVjNzQzZTlkZmE2ZmIzMDYzZDRkNDM3YjJhZDAyYjQwYWYzMzM3
|
15
|
+
NDUyMjIwYzE0MGM1MDc2YWVlNTZjYjc4ZTgyMzVlNTQ2YzkwMzY=
|
@@ -48,6 +48,12 @@ module EventStore
|
|
48
48
|
events.limit(max).where{ version >= version_number.to_i }.all
|
49
49
|
end
|
50
50
|
|
51
|
+
def event_stream_between(start_time, end_time, fully_qualified_names = [])
|
52
|
+
query = events.where(occurred_at: start_time..end_time)
|
53
|
+
query = query.where(fully_qualified_name: fully_qualified_names) if fully_qualified_names && fully_qualified_names.any?
|
54
|
+
query.all.map {|e| e[:serialized_event] = EventStore.unescape_bytea(e[:serialized_event]); e}
|
55
|
+
end
|
56
|
+
|
51
57
|
def event_stream
|
52
58
|
events.all.map {|e| e[:serialized_event] = EventStore.unescape_bytea(e[:serialized_event]); e}
|
53
59
|
end
|
data/lib/event_store/client.rb
CHANGED
@@ -43,6 +43,10 @@ module EventStore
|
|
43
43
|
translate_events @aggregate.events_from(version_number, max)
|
44
44
|
end
|
45
45
|
|
46
|
+
def event_stream_between(start_time, end_time, fully_qualified_names = [])
|
47
|
+
translate_events @aggregate.event_stream_between(start_time, end_time, fully_qualified_names)
|
48
|
+
end
|
49
|
+
|
46
50
|
def peek
|
47
51
|
translate_event @aggregate.last_event
|
48
52
|
end
|
@@ -54,6 +54,7 @@ module EventStore
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def prepare_event raw_event
|
57
|
+
raise ArgumentError.new("Cannot Append a Nil Event") unless raw_event
|
57
58
|
{ :version => raw_event.version.to_i,
|
58
59
|
:aggregate_id => raw_event.aggregate_id,
|
59
60
|
:occurred_at => Time.parse(raw_event.occurred_at.to_s).utc, #to_s truncates microseconds, which brake Time equality
|
data/lib/event_store/version.rb
CHANGED
@@ -127,6 +127,83 @@ describe EventStore::Client do
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
|
+
describe '#event_stream_between' do
|
131
|
+
subject {es_client.new(AGGREGATE_ID_ONE, :device)}
|
132
|
+
|
133
|
+
before do
|
134
|
+
version = subject.version
|
135
|
+
@oldest_event_time = @event_time + 1
|
136
|
+
@middle_event_time = @event_time + 2
|
137
|
+
@newest_event_time = @event_time + 3
|
138
|
+
|
139
|
+
@outside_event = EventStore::Event.new(AGGREGATE_ID_ONE, (@event_time).utc, "middle_event", "#{1002.to_s(2)}_foo", version += 1)
|
140
|
+
@event = EventStore::Event.new(AGGREGATE_ID_ONE, (@oldest_event_time).utc, "oldest_event", "#{1002.to_s(2)}_foo", version += 1)
|
141
|
+
@new_event = EventStore::Event.new(AGGREGATE_ID_ONE, (@middle_event_time).utc, "middle_event", "#{1002.to_s(2)}_foo", version += 1)
|
142
|
+
@newest_event = EventStore::Event.new(AGGREGATE_ID_ONE, (@newest_event_time).utc, "newest_event_type", "#{1002.to_s(2)}_foo", version += 1)
|
143
|
+
subject.append([@event, @new_event, @newest_event])
|
144
|
+
end
|
145
|
+
|
146
|
+
it "returns all events between a start and an end time" do
|
147
|
+
start_time = @oldest_event_time
|
148
|
+
end_time = @newest_event_time
|
149
|
+
subject.event_stream_between(start_time, end_time).length.should == 3
|
150
|
+
end
|
151
|
+
|
152
|
+
it "returns an empty array if start time is before end time" do
|
153
|
+
start_time = @newest_event_time
|
154
|
+
end_time = @oldest_event_time
|
155
|
+
subject.event_stream_between(start_time, end_time).length.should == 0
|
156
|
+
end
|
157
|
+
|
158
|
+
it "returns all the events at a given time if the start time is the same as the end time" do
|
159
|
+
start_time = @oldest_event_time
|
160
|
+
end_time = @oldest_event_time
|
161
|
+
subject.event_stream_between(start_time, end_time).length.should == 1
|
162
|
+
end
|
163
|
+
|
164
|
+
it "returns unencodes the serialized_event fields out of the database encoding" do
|
165
|
+
EventStore.should_receive(:unescape_bytea).once
|
166
|
+
start_time = @oldest_event_time
|
167
|
+
end_time = @oldest_event_time
|
168
|
+
subject.event_stream_between(start_time, end_time).length.should == 1
|
169
|
+
end
|
170
|
+
|
171
|
+
it "returns the raw events translated into SerializedEvents" do
|
172
|
+
subject.should_receive(:translate_events).once.and_call_original
|
173
|
+
start_time = @oldest_event_time
|
174
|
+
end_time = @oldest_event_time
|
175
|
+
subject.event_stream_between(start_time, end_time).length.should == 1
|
176
|
+
end
|
177
|
+
|
178
|
+
it "returns types requested within the time range" do
|
179
|
+
start_time = @oldest_event_time
|
180
|
+
end_time = @newest_event_time
|
181
|
+
fully_qualified_name = 'middle_event'
|
182
|
+
subject.event_stream_between(start_time, end_time, [fully_qualified_name]).length.should == 1
|
183
|
+
end
|
184
|
+
|
185
|
+
it "returns types requested within the time range for more than one type" do
|
186
|
+
start_time = @oldest_event_time
|
187
|
+
end_time = @newest_event_time
|
188
|
+
fully_qualified_names = ['middle_event', 'newest_event_type']
|
189
|
+
subject.event_stream_between(start_time, end_time, fully_qualified_names).length.should == 2
|
190
|
+
end
|
191
|
+
|
192
|
+
it "returns an empty array if there are no events of the requested types in the time range" do
|
193
|
+
start_time = @oldest_event_time
|
194
|
+
end_time = @newest_event_time
|
195
|
+
fully_qualified_names = ['random_strings']
|
196
|
+
subject.event_stream_between(start_time, end_time, fully_qualified_names).length.should == 0
|
197
|
+
end
|
198
|
+
|
199
|
+
it "returns only events of types that exist within the time range" do
|
200
|
+
start_time = @oldest_event_time
|
201
|
+
end_time = @newest_event_time
|
202
|
+
fully_qualified_names = ['middle_event', 'event_name']
|
203
|
+
subject.event_stream_between(start_time, end_time, fully_qualified_names).length.should == 1
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
130
207
|
describe '#peek' do
|
131
208
|
let(:client) {es_client.new(AGGREGATE_ID_ONE, :device)}
|
132
209
|
subject { client.peek }
|
@@ -189,6 +266,10 @@ describe EventStore::Client do
|
|
189
266
|
@client.append([@old_event, @new_event, @really_new_event])
|
190
267
|
@client.snapshot.should == @client.event_stream
|
191
268
|
end
|
269
|
+
|
270
|
+
it "should raise a meaningful exception when a nil event given to it to append" do
|
271
|
+
expect {@client.append([nil])}.to raise_exception(ArgumentError)
|
272
|
+
end
|
192
273
|
end
|
193
274
|
|
194
275
|
describe 'with prior events of same type' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: event_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Saieg, John Colvin
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|