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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f2dba3805be9987a863b9c80cad063ff5ce6ecd2
4
- data.tar.gz: 735780ad87bad4795370e51bcf22b71f85184e51
3
+ metadata.gz: 8e9d038884a630f02031c484aa423b935018288d
4
+ data.tar.gz: 2d3c0d69031fea0dddeed6805e483a9b14c33901
5
5
  SHA512:
6
- metadata.gz: 2b3aac7d78671e3b9ffd7c136d88ebded20358121fdf9759762cdd846e697325972725e1183a570412e475fe7fbed5bc3fd9768e885037efb1cf848e122f9ad5
7
- data.tar.gz: 4da1989af164abf4802e5e963491fd68a2da8993154f568107ed8e02d0e8f1e88b4a576371032ee787c16906151a89fa0fabef2e3d94286c69c9d21343d79ddd
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
@@ -1,3 +1,3 @@
1
1
  module EventStore
2
- VERSION = '0.10.0'
2
+ VERSION = '0.10.1'
3
3
  end
@@ -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", "other", serialized_event) }
377
- let(:another_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (event_time).utc, "fqn2", "another", serialized_event2) }
378
- let(:event) { EventStore::Event.new(AGGREGATE_ID_ONE, (oldest_event_time).utc, "fqn1", "event", serialized_event) }
379
- let(:new_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (middle_event_time).utc, "fqn1", "new", serialized_event) }
380
- let(:newest_event) { EventStore::Event.new(AGGREGATE_ID_ONE, (newest_event_time).utc, "fqn1", "newest", serialized_event) }
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.0
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-03-17 00:00:00.000000000 Z
12
+ date: 2016-08-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler