rails_event_store_active_record 0.21.0 → 0.22.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 +4 -4
- data/Makefile +1 -1
- data/lib/rails_event_store_active_record/event_repository.rb +85 -44
- data/lib/rails_event_store_active_record/legacy_event_repository.rb +5 -1
- data/lib/rails_event_store_active_record/version.rb +1 -1
- data/rails_event_store_active_record.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 303421f1c02382bcb00a76cc09102dfca1a926dd
|
4
|
+
data.tar.gz: 329ae1361280c35255b69751c77b6fe3657affb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e1b0b2289b35a8cdead875a2cc484bab23ab524ef94c6789553ce7815912f79918d5e666c2fecd9efebec84a9130561ddf586d02ce5f6059df75ffd62d7c54ac
|
7
|
+
data.tar.gz: 4f11f781d3ed17d87d7ff32f759a396116c40cabbf70528a39364567f883df3bd0434078b4a9ce80cb00236f4e691fdd27a8e6dd4492a2cbea9d645018f36462
|
data/Makefile
CHANGED
@@ -15,7 +15,7 @@ mutate: test ## Run mutation tests
|
|
15
15
|
@bundle exec mutant --include lib --require ruby_event_store --use rspec "RailsEventStoreActiveRecord*" \
|
16
16
|
--ignore-subject "RailsEventStoreActiveRecord::EventRepository#normalize_to_array" \
|
17
17
|
--ignore-subject "RailsEventStoreActiveRecord::LegacyEventRepository#normalize_to_array" \
|
18
|
-
--ignore-subject "RailsEventStoreActiveRecord::EventRepository#
|
18
|
+
--ignore-subject "RailsEventStoreActiveRecord::EventRepository#detect_index_violated"
|
19
19
|
|
20
20
|
build:
|
21
21
|
@gem build -V rails_event_store_active_record.gemspec
|
@@ -12,48 +12,19 @@ module RailsEventStoreActiveRecord
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def append_to_stream(events, stream_name, expected_version)
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
when Integer, :any
|
21
|
-
expected_version
|
22
|
-
when :none
|
23
|
-
-1
|
24
|
-
when :auto
|
25
|
-
eis = EventInStream.where(stream: stream_name).order("position DESC").first
|
26
|
-
(eis && eis.position) || -1
|
27
|
-
else
|
28
|
-
raise RubyEventStore::InvalidExpectedVersion
|
29
|
-
end
|
15
|
+
add_to_stream(events, stream_name, expected_version, true) do |event|
|
16
|
+
build_event_record(event).save!
|
17
|
+
event.event_id
|
18
|
+
end
|
19
|
+
end
|
30
20
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
expected_version + index + POSITION_SHIFT
|
35
|
-
end
|
36
|
-
build_event_record(event).save!
|
37
|
-
events = [{
|
38
|
-
stream: RubyEventStore::GLOBAL_STREAM,
|
39
|
-
position: nil,
|
40
|
-
event_id: event.event_id
|
41
|
-
}]
|
42
|
-
events.unshift({
|
43
|
-
stream: stream_name,
|
44
|
-
position: position,
|
45
|
-
event_id: event.event_id
|
46
|
-
}) unless stream_name.eql?(RubyEventStore::GLOBAL_STREAM)
|
47
|
-
events
|
48
|
-
end
|
49
|
-
EventInStream.import(in_stream)
|
21
|
+
def link_to_stream(event_ids, stream_name, expected_version)
|
22
|
+
(normalize_to_array(event_ids) - Event.where(id: event_ids).pluck(:id)).each do |id|
|
23
|
+
raise RubyEventStore::EventNotFound.new(id)
|
50
24
|
end
|
51
|
-
|
52
|
-
|
53
|
-
if detect_pkey_index_violated(e)
|
54
|
-
raise RubyEventStore::EventDuplicatedInStream
|
25
|
+
add_to_stream(event_ids, stream_name, expected_version, nil) do |event_id|
|
26
|
+
event_id
|
55
27
|
end
|
56
|
-
raise RubyEventStore::WrongExpectedEventVersion
|
57
28
|
end
|
58
29
|
|
59
30
|
def delete_stream(stream_name)
|
@@ -133,7 +104,7 @@ module RailsEventStoreActiveRecord
|
|
133
104
|
)
|
134
105
|
mapper.serialized_record_to_event(serialized_record)
|
135
106
|
rescue ActiveRecord::RecordNotFound
|
136
|
-
raise RubyEventStore::EventNotFound
|
107
|
+
raise RubyEventStore::EventNotFound.new(event_id)
|
137
108
|
end
|
138
109
|
|
139
110
|
def get_all_streams
|
@@ -146,10 +117,80 @@ module RailsEventStoreActiveRecord
|
|
146
117
|
|
147
118
|
attr_reader :mapper
|
148
119
|
|
149
|
-
def
|
150
|
-
|
151
|
-
|
152
|
-
|
120
|
+
def add_to_stream(collection, stream_name, expected_version, include_global, &to_event_id)
|
121
|
+
raise RubyEventStore::InvalidExpectedVersion if stream_name.eql?(RubyEventStore::GLOBAL_STREAM) && !expected_version.equal?(:any)
|
122
|
+
|
123
|
+
collection = normalize_to_array(collection)
|
124
|
+
expected_version = normalize_expected_version(expected_version, stream_name)
|
125
|
+
|
126
|
+
ActiveRecord::Base.transaction(requires_new: true) do
|
127
|
+
in_stream = collection.flat_map.with_index do |element, index|
|
128
|
+
position = compute_position(expected_version, index)
|
129
|
+
event_id = to_event_id.call(element)
|
130
|
+
collection = []
|
131
|
+
collection.unshift({
|
132
|
+
stream: RubyEventStore::GLOBAL_STREAM,
|
133
|
+
position: nil,
|
134
|
+
event_id: event_id
|
135
|
+
}) if include_global
|
136
|
+
collection.unshift({
|
137
|
+
stream: stream_name,
|
138
|
+
position: position,
|
139
|
+
event_id: event_id
|
140
|
+
}) unless stream_name.eql?(RubyEventStore::GLOBAL_STREAM)
|
141
|
+
collection
|
142
|
+
end
|
143
|
+
EventInStream.import(in_stream)
|
144
|
+
end
|
145
|
+
self
|
146
|
+
rescue ActiveRecord::RecordNotUnique => e
|
147
|
+
raise_error(e)
|
148
|
+
end
|
149
|
+
|
150
|
+
def raise_error(e)
|
151
|
+
if detect_index_violated(e)
|
152
|
+
raise RubyEventStore::EventDuplicatedInStream
|
153
|
+
end
|
154
|
+
raise RubyEventStore::WrongExpectedEventVersion
|
155
|
+
end
|
156
|
+
|
157
|
+
def compute_position(expected_version, index)
|
158
|
+
unless expected_version.equal?(:any)
|
159
|
+
expected_version + index + POSITION_SHIFT
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def normalize_expected_version(expected_version, stream_name)
|
164
|
+
case expected_version
|
165
|
+
when Integer, :any
|
166
|
+
expected_version
|
167
|
+
when :none
|
168
|
+
-1
|
169
|
+
when :auto
|
170
|
+
eis = EventInStream.where(stream: stream_name).order("position DESC").first
|
171
|
+
(eis && eis.position) || -1
|
172
|
+
else
|
173
|
+
raise RubyEventStore::InvalidExpectedVersion
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
MYSQL_PKEY_ERROR = "for key 'PRIMARY'"
|
178
|
+
POSTGRES_PKEY_ERROR = "event_store_events_pkey"
|
179
|
+
SQLITE3_PKEY_ERROR = "event_store_events.id"
|
180
|
+
|
181
|
+
MYSQL_INDEX_ERROR = "for key 'index_event_store_events_in_streams_on_stream_and_event_id'"
|
182
|
+
POSTGRES_INDEX_ERROR = "Key (stream, event_id)"
|
183
|
+
SQLITE3_INDEX_ERROR = "event_store_events_in_streams.stream, event_store_events_in_streams.event_id"
|
184
|
+
|
185
|
+
def detect_index_violated(e)
|
186
|
+
m = e.message
|
187
|
+
m.include?(MYSQL_PKEY_ERROR) ||
|
188
|
+
m.include?(POSTGRES_PKEY_ERROR) ||
|
189
|
+
m.include?(SQLITE3_PKEY_ERROR) ||
|
190
|
+
|
191
|
+
m.include?(MYSQL_INDEX_ERROR) ||
|
192
|
+
m.include?(POSTGRES_INDEX_ERROR) ||
|
193
|
+
m.include?(SQLITE3_INDEX_ERROR)
|
153
194
|
end
|
154
195
|
|
155
196
|
def build_event_record(event)
|
@@ -46,6 +46,10 @@ instead:
|
|
46
46
|
raise RubyEventStore::EventDuplicatedInStream
|
47
47
|
end
|
48
48
|
|
49
|
+
def link_to_stream(_event_ids, _stream_name, _expected_version)
|
50
|
+
raise RubyEventStore::NotSupported
|
51
|
+
end
|
52
|
+
|
49
53
|
def delete_stream(stream_name)
|
50
54
|
LegacyEvent.where({stream: stream_name}).update_all(stream: RubyEventStore::GLOBAL_STREAM)
|
51
55
|
end
|
@@ -113,7 +117,7 @@ instead:
|
|
113
117
|
end
|
114
118
|
|
115
119
|
def read_event(event_id)
|
116
|
-
build_event_entity(LegacyEvent.find_by(event_id: event_id)) or raise RubyEventStore::EventNotFound
|
120
|
+
build_event_entity(LegacyEvent.find_by(event_id: event_id)) or raise RubyEventStore::EventNotFound.new(event_id)
|
117
121
|
end
|
118
122
|
|
119
123
|
def get_all_streams
|
@@ -30,7 +30,7 @@ Gem::Specification.new do |spec|
|
|
30
30
|
spec.add_development_dependency 'fakefs', '~> 0.11.2'
|
31
31
|
spec.add_development_dependency 'childprocess'
|
32
32
|
|
33
|
-
spec.add_dependency 'ruby_event_store', '= 0.
|
33
|
+
spec.add_dependency 'ruby_event_store', '= 0.22.0'
|
34
34
|
spec.add_dependency 'activesupport', '>= 3.0'
|
35
35
|
spec.add_dependency 'activemodel', '>= 3.0'
|
36
36
|
spec.add_dependency 'activerecord-import', '~> 0.21'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_event_store_active_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.22.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arkency
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -156,14 +156,14 @@ dependencies:
|
|
156
156
|
requirements:
|
157
157
|
- - '='
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version: 0.
|
159
|
+
version: 0.22.0
|
160
160
|
type: :runtime
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
164
|
- - '='
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version: 0.
|
166
|
+
version: 0.22.0
|
167
167
|
- !ruby/object:Gem::Dependency
|
168
168
|
name: activesupport
|
169
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,7 +250,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
250
250
|
version: '0'
|
251
251
|
requirements: []
|
252
252
|
rubyforge_project:
|
253
|
-
rubygems_version: 2.6.
|
253
|
+
rubygems_version: 2.6.13
|
254
254
|
signing_key:
|
255
255
|
specification_version: 4
|
256
256
|
summary: Active Record events repository for Rails Event Store
|