ruby_event_store-rom 2.1.0 → 2.2.0

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
  SHA256:
3
- metadata.gz: 3af23fb98d5ccf4b0730bfd4da1dfea36b511d5b7d00e82158daaa7ed3ba6979
4
- data.tar.gz: 741f05db9dc98c607888e5a3a07a8289a3d02094e8deecfcf48da150d6388954
3
+ metadata.gz: 0346bda57c2f37b5dd9f545f51d980fef10af52630613aa4741f48aa57d3e8eb
4
+ data.tar.gz: 2e451dd750e028ee9f8a3182e65721c7e3c569a1ac283f9e25cb66e92ac89fac
5
5
  SHA512:
6
- metadata.gz: f6846ccb455e16a59fe7a3e655f912f77998af55527d7e0c49278f52454d3d283e9113b70d7fff4289268dc13018d3b0ab4e0dcb774767a313078c8081e7d7fa
7
- data.tar.gz: b02ae36dbe6641fda9bb4005821f220954f1ff09672736f2f895963ba0fa366442b1aa21100fee0b20663d9b718d5f66f2a28461419caf1b45c6589cefd92bc3
6
+ metadata.gz: b4f057692be3234140fdc0102cc66af4280e1a9b83ecaff362d6a18c644fd7df5ed089dd85e3f62d10ee871d5c41fc1a1660cc96aff08d81f728554c65563070
7
+ data.tar.gz: 3eda5e842ca678da3039b04458f910021ba5639c286c8d5c0eee9c4ccfa2a10d4da3f2c4d534e7e6e65f3dd94d5e26385353b63eba36953b4bcf507e18af9785
@@ -34,20 +34,36 @@ module RubyEventStore
34
34
  where(event_type: types)
35
35
  end
36
36
 
37
- def newer_than(time)
38
- where { |r| r.events[:created_at] > time.localtime }
37
+ def newer_than(time, time_sort_by)
38
+ if time_sort_by == :as_of
39
+ where { |r| string::coalesce(r.events[:valid_at], r.events[:created_at]) > time.localtime }
40
+ else
41
+ where { |r| r.events[:created_at] > time.localtime }
42
+ end
39
43
  end
40
44
 
41
- def newer_than_or_equal(time)
42
- where { |r| r.events[:created_at] >= time.localtime }
45
+ def newer_than_or_equal(time, time_sort_by)
46
+ if time_sort_by == :as_of
47
+ where { |r| string::coalesce(r.events[:valid_at], r.events[:created_at]) >= time.localtime }
48
+ else
49
+ where { |r| r.events[:created_at] >= time.localtime }
50
+ end
43
51
  end
44
52
 
45
- def older_than(time)
46
- where { |r| r.events[:created_at] < time.localtime }
53
+ def older_than(time, time_sort_by)
54
+ if time_sort_by == :as_of
55
+ where { |r| string::coalesce(r.events[:valid_at], r.events[:created_at]) < time.localtime }
56
+ else
57
+ where { |r| r.events[:created_at] < time.localtime }
58
+ end
47
59
  end
48
60
 
49
- def older_than_or_equal(time)
50
- where { |r| r.events[:created_at] <= time.localtime }
61
+ def older_than_or_equal(time, time_sort_by)
62
+ if time_sort_by == :as_of
63
+ where { |r| string::coalesce(r.events[:valid_at], r.events[:created_at]) <= time.localtime }
64
+ else
65
+ where { |r| r.events[:created_at] <= time.localtime }
66
+ end
51
67
  end
52
68
 
53
69
  DIRECTION_MAP = { forward: %i[asc > <], backward: %i[desc < >] }.freeze
@@ -23,7 +23,7 @@ module RubyEventStore
23
23
  end
24
24
 
25
25
  def by_event_type(types)
26
- join(:events).where(event_type: types)
26
+ join_events.where(event_type: types)
27
27
  end
28
28
 
29
29
  def by_stream_and_event_id(stream, event_id)
@@ -34,20 +34,36 @@ module RubyEventStore
34
34
  by_stream(stream).select(:position).order(Sequel.desc(:position)).first
35
35
  end
36
36
 
37
- def newer_than(time)
38
- join(:events).where { |r| r.events[:created_at] > time.localtime }
37
+ def newer_than(time, time_sort_by)
38
+ if time_sort_by == :as_of
39
+ join_events.where { |r| string::coalesce(r.events[:valid_at], r.events[:created_at]) > time.localtime }
40
+ else
41
+ join_events.where { |r| r.events[:created_at] > time.localtime }
42
+ end
39
43
  end
40
44
 
41
- def newer_than_or_equal(time)
42
- join(:events).where { |r| r.events[:created_at] >= time.localtime }
45
+ def newer_than_or_equal(time, time_sort_by)
46
+ if time_sort_by == :as_of
47
+ join_events.where { |r| string::coalesce(r.events[:valid_at], r.events[:created_at]) >= time.localtime }
48
+ else
49
+ join_events.where { |r| r.events[:created_at] >= time.localtime }
50
+ end
43
51
  end
44
52
 
45
- def older_than(time)
46
- join(:events).where { |r| r.events[:created_at] < time.localtime }
53
+ def older_than(time, time_sort_by)
54
+ if time_sort_by == :as_of
55
+ join_events.where { |r| string::coalesce(r.events[:valid_at], r.events[:created_at]) < time.localtime }
56
+ else
57
+ join_events.where { |r| r.events[:created_at] < time.localtime }
58
+ end
47
59
  end
48
60
 
49
- def older_than_or_equal(time)
50
- join(:events).where { |r| r.events[:created_at] <= time.localtime }
61
+ def older_than_or_equal(time, time_sort_by)
62
+ if time_sort_by == :as_of
63
+ join_events.where { |r| string::coalesce(r.events[:valid_at], r.events[:created_at]) <= time.localtime }
64
+ else
65
+ join_events.where { |r| r.events[:created_at] <= time.localtime }
66
+ end
51
67
  end
52
68
 
53
69
  DIRECTION_MAP = { forward: %i[asc > <], backward: %i[desc < >] }.freeze
@@ -74,7 +90,15 @@ module RubyEventStore
74
90
  if event_order_columns.empty?
75
91
  query.order { |r| stream_order_columns.map { |c| r[:stream_entries][c].public_send(order) } }
76
92
  else
77
- query.join(:events).order { |r| event_order_columns.map { |c| r.events[c].public_send(order) } }
93
+ query.join_events.order { |r| event_order_columns.map { |c| r.events[c].public_send(order) } }
94
+ end
95
+ end
96
+
97
+ def join_events
98
+ if dataset.opts[:join]&.map(&:table)&.include?(events.dataset.first_source_table)
99
+ self
100
+ else
101
+ join(:events)
78
102
  end
79
103
  end
80
104
  end
@@ -65,6 +65,20 @@ module RubyEventStore
65
65
 
66
66
  protected
67
67
 
68
+ def find_event_id_in_stream(specification_event_id, specification_stream_name)
69
+ stream_entries
70
+ .by_stream_and_event_id(specification_stream_name, specification_event_id)
71
+ .fetch(:id)
72
+ rescue ::ROM::TupleCountMismatchError
73
+ raise EventNotFound.new(specification_event_id)
74
+ end
75
+
76
+ def find_event_id_globally(specification_event_id)
77
+ events.by_event_id(specification_event_id).one!.fetch(:id)
78
+ rescue ::ROM::TupleCountMismatchError
79
+ raise EventNotFound.new(specification_event_id)
80
+ end
81
+
68
82
  def read_scope(specification)
69
83
  direction = specification.forward? ? :forward : :backward
70
84
 
@@ -73,20 +87,14 @@ module RubyEventStore
73
87
  end
74
88
 
75
89
  if specification.stream.global?
76
- offset_entry_id = events.by_event_id(specification.start).one!.fetch(:id) if specification.start
77
- stop_entry_id = events.by_event_id(specification.stop).one!.fetch(:id) if specification.stop
90
+ offset_entry_id = find_event_id_globally(specification.start) if specification.start
91
+ stop_entry_id = find_event_id_globally(specification.stop) if specification.stop
78
92
 
79
93
  query = events.ordered(direction, offset_entry_id, stop_entry_id, specification.time_sort_by)
80
94
  query = query.map_with(:event_to_serialized_record, auto_struct: false)
81
95
  else
82
- offset_entry_id =
83
- stream_entries
84
- .by_stream_and_event_id(specification.stream, specification.start)
85
- .fetch(:id) if specification.start
86
- stop_entry_id =
87
- stream_entries
88
- .by_stream_and_event_id(specification.stream, specification.stop)
89
- .fetch(:id) if specification.stop
96
+ offset_entry_id = find_event_id_in_stream(specification.start, specification.stream) if specification.start
97
+ stop_entry_id = find_event_id_in_stream(specification.stop, specification.stream) if specification.stop
90
98
 
91
99
  query =
92
100
  stream_entries.ordered(
@@ -102,10 +110,10 @@ module RubyEventStore
102
110
 
103
111
  query = query.by_event_id(specification.with_ids) if specification.with_ids
104
112
  query = query.by_event_type(specification.with_types) if specification.with_types?
105
- query = query.older_than(specification.older_than) if specification.older_than
106
- query = query.older_than_or_equal(specification.older_than_or_equal) if specification.older_than_or_equal
107
- query = query.newer_than(specification.newer_than) if specification.newer_than
108
- query = query.newer_than_or_equal(specification.newer_than_or_equal) if specification.newer_than_or_equal
113
+ query = query.older_than(specification.older_than, specification.time_sort_by) if specification.older_than
114
+ query = query.older_than_or_equal(specification.older_than_or_equal, specification.time_sort_by) if specification.older_than_or_equal
115
+ query = query.newer_than(specification.newer_than, specification.time_sort_by) if specification.newer_than
116
+ query = query.newer_than_or_equal(specification.newer_than_or_equal, specification.time_sort_by) if specification.newer_than_or_equal
109
117
  query
110
118
  end
111
119
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RubyEventStore
4
4
  module ROM
5
- VERSION = "2.1.0"
5
+ VERSION = "2.2.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_event_store-rom
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Van Horn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-08 00:00:00.000000000 Z
11
+ date: 2023-09-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-container
@@ -171,14 +171,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - ">="
173
173
  - !ruby/object:Gem::Version
174
- version: '2.5'
174
+ version: '2.7'
175
175
  required_rubygems_version: !ruby/object:Gem::Requirement
176
176
  requirements:
177
177
  - - ">="
178
178
  - !ruby/object:Gem::Version
179
179
  version: '0'
180
180
  requirements: []
181
- rubygems_version: 3.4.6
181
+ rubygems_version: 3.4.17
182
182
  signing_key:
183
183
  specification_version: 4
184
184
  summary: ROM events repository for Ruby Event Store