nexia_event_store 0.10.0 → 0.10.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/event_store/event_stream.rb +38 -0
- data/lib/event_store/version.rb +1 -1
- data/spec/event_store/client_spec.rb +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e9d038884a630f02031c484aa423b935018288d
|
4
|
+
data.tar.gz: 2d3c0d69031fea0dddeed6805e483a9b14c33901
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a10cbfaf1914a3cf6b0ee03a45e2548f56a552268deb082459b97e929790c0c03da0854fbc4048b840f59712c3cf3bdc1955187bfdb1a4994d97e297fad5688a
|
7
|
+
data.tar.gz: b4da3da2eb6921f930c7dff3d64db1ece57bd2b4a99ae862321893d705af51f389d9dc978ffea1dc6d433e8ee152ccf7253492aac0a1f4fd11d1b0f1ddd7f1dc
|
@@ -81,9 +81,47 @@ module EventStore
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
# Private: returns the last event before start_time for each of the events named
|
85
|
+
# by fully_qualified_names.
|
86
|
+
#
|
87
|
+
# Generates queries that look like this:
|
88
|
+
#
|
89
|
+
# SELECT events.*, fully_qualified_name
|
90
|
+
# FROM event_store.thermostat_events "events"
|
91
|
+
# INNER JOIN event_store.fully_qualified_names fqn ON fqn.id = fully_qualified_name_id
|
92
|
+
# WHERE events.id IN (SELECT max(events.id) from event_store.thermostat_events "events"
|
93
|
+
# INNER JOIN event_store.fully_qualified_names fqn ON fqn.id = fully_qualified_name_id
|
94
|
+
# WHERE occurred_at < '2016-08-08 06:00:00'
|
95
|
+
# AND fully_qualified_name = 'faceplate_api.system.core.events.HeatingStageStarted'
|
96
|
+
# GROUP BY sub_key);
|
97
|
+
#
|
84
98
|
def last_event_before(start_time, fully_qualified_names = [])
|
85
99
|
timestampz = start_time.strftime("%Y-%m-%d %H:%M:%S%z")
|
86
100
|
|
101
|
+
rows = fully_qualified_names.inject([]) { |memo, name|
|
102
|
+
memo + events.where(events__id: events.where(fully_qualified_name: name).where { occurred_at < timestampz }
|
103
|
+
.select { max(:events__id) }.unordered.group(:sub_key)).all
|
104
|
+
}.sort_by { |r| r[:occurred_at] }
|
105
|
+
|
106
|
+
rows.map {|r| r[:serialized_event] = EventStore.unescape_bytea(r[:serialized_event]); r}
|
107
|
+
end
|
108
|
+
|
109
|
+
# Private: returns the last event before start_time for each of the events named
|
110
|
+
# by fully_qualified_names. Doesn't work when events have multiple valid
|
111
|
+
# sub_keys, but is fast when they don't.
|
112
|
+
#
|
113
|
+
# Generates queries that look like this:
|
114
|
+
#
|
115
|
+
# SELECT events.*, fully_qualified_name
|
116
|
+
# FROM event_store.thermostat_events "events"
|
117
|
+
# INNER JOIN event_store.fully_qualified_names fqn ON fqn.id = fully_qualified_name_id
|
118
|
+
# WHERE occurred_at < '2016-08-08 06:00:00'
|
119
|
+
# AND fully_qualified_name = 'faceplate_api.system.core.events.HeatingStageStarted'
|
120
|
+
# ORDER BY occurred_at DESC LIMIT 1;
|
121
|
+
#
|
122
|
+
def simple_last_event_before(start_time, fully_qualified_names = [])
|
123
|
+
timestampz = start_time.strftime("%Y-%m-%d %H:%M:%S%z")
|
124
|
+
|
87
125
|
rows = fully_qualified_names.inject([]) { |memo, name|
|
88
126
|
memo + events.where(fully_qualified_name: name).where{ occurred_at < timestampz }
|
89
127
|
.reverse_order(:occurred_at, :id).limit(1).all
|
data/lib/event_store/version.rb
CHANGED
@@ -373,11 +373,11 @@ describe EventStore::Client do
|
|
373
373
|
let(:oldest_event_time) { event_time + 1 }
|
374
374
|
let(:middle_event_time) { event_time + 2 }
|
375
375
|
let(:newest_event_time) { event_time + 3 }
|
376
|
-
let(:other_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (event_time).utc, "fqn2", "
|
377
|
-
let(:another_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (event_time).utc, "fqn2", "
|
378
|
-
let(:event) { EventStore::Event.new(AGGREGATE_ID_ONE, (oldest_event_time).utc, "fqn1", "
|
379
|
-
let(:new_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (middle_event_time).utc, "fqn1", "
|
380
|
-
let(:newest_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (newest_event_time).utc, "fqn1", "
|
376
|
+
let(:other_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (event_time).utc, "fqn2", "sub_key2", serialized_event) }
|
377
|
+
let(:another_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (event_time).utc, "fqn2", "sub_key2", serialized_event2) }
|
378
|
+
let(:event) { EventStore::Event.new(AGGREGATE_ID_ONE, (oldest_event_time).utc, "fqn1", "sub_key", serialized_event) }
|
379
|
+
let(:new_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (middle_event_time).utc, "fqn1", "sub_key", serialized_event) }
|
380
|
+
let(:newest_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (newest_event_time).utc, "fqn1", "sub_key", serialized_event) }
|
381
381
|
let(:fqns) { %W(fqn1 fqn2) }
|
382
382
|
let(:events) { [other_event, event, new_event, newest_event] }
|
383
383
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nexia_event_store
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.1
|
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: 2016-
|
12
|
+
date: 2016-08-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|