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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- M2RiODAwYTcyMjZiZWUwNjZjOGNjZDZhMDQ3MTU3YjM1ZjJmZGJhOA==
4
+ ZTgxNzVkNDg1ZTRiYTYxYmExMTQwYTExZTViMWNmM2E5NzkxMzQ0MA==
5
5
  data.tar.gz: !binary |-
6
- YjMyYTNkY2Y4MmRjNjMyYTI1MGU3NGM0MjlhNTBlZWEyYTBkMTVmZA==
6
+ NGNlZTcwMDdkNjcyYmQyMmVlMDY1NTRiNDc5MGVkNmM5ZTMwNWVhMA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MGVhZWRjOWJhMzBlNDBjZGJjNjZkM2U2NDUyMjg5ZmI3MzFkOTQxZGZjYzc3
10
- OGFkMGVlODcwN2Q4MWM5NTZjMDg3ZWZlMzczMmFkYjIxMTUyYzk1ZmVhYWNk
11
- OTk1MmQ3OGUwNmRhYzQyMWQyOTBhMmY3ODQ3NjE0ZWU0NDgyMjQ=
9
+ MGRhZjc4MzU5ZjlmMGIzOTgxNmU5NjQ3NzVhYjhkNzViMWFkNWI5NmY2MmE3
10
+ MGM4ZmQxNDVkZTBlMmQ4MmIzOTVlYzNkMGI5NTM3YTEzODdlN2RjZjUzMGFj
11
+ ZTIxZDA4OGM5OGM2Mjc4NWE4N2E3NmNiMGRmZmUwN2UyNjI3YmI=
12
12
  data.tar.gz: !binary |-
13
- MmM0NTc1MzBmN2VjNmMzN2U5YjFmYzEwNzlkZWE1NjliODRiYjc2YWQzNTVh
14
- ZDJiNWQ5MTAwOTY1MGNlZDFmMzA2Y2UxNzc1ZWE0MWU5YjI2NTEzMjczMzRk
15
- NzE4ZGRmOTM2NTcxMmVlZjQ2MGFiNGU3YjQwMjE0NjQ0M2Y4NzE=
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module EventStore
2
- VERSION = "0.2.7"
2
+ VERSION = "0.2.8"
3
3
  end
@@ -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.7
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-03 00:00:00.000000000 Z
12
+ date: 2014-05-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler