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 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