nexia_event_store 0.10.0 → 0.10.1
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 +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
|