rails_event_store 0.30.0 → 0.34.0

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
  SHA256:
3
- metadata.gz: a3d4e0009af4124fcd60998861a6a397048887b9e5b3ea57dcf5356b2fd3c2c0
4
- data.tar.gz: f62347ca2d8bf35e365647b09720c6410cb0096b1c512f11176c77f09cc7a808
3
+ metadata.gz: 6b49527704051efaa6da205c5b8b29d7f3ac4e64ea40140ee025388d3a633697
4
+ data.tar.gz: 1d11601df7b08bd465ed6d0cf9148d2a5354f510f3518f3715aad2cbb3529687
5
5
  SHA512:
6
- metadata.gz: 59fd5ddb62bf2fb5e4db8c28771a1888b63bb6b2bbf3e16b0fc703d50a6e2956e65218eb0d6eb5fd3df417b8d49dc0c04a8eb8296a8e686ce32ee1b3721cfce0
7
- data.tar.gz: 8b2720a1bd23f634d5ae5475cad76e39c2a5845f73e99b4059421818af5b2bf34f278186bf807fdb615b146581055e10ab950c6079364262564eb5d789c0cb55
6
+ metadata.gz: 564be64cbbb736bf85b5e45a6f79da57f3b7f0dfb0c6d0ad800e218bdac5e6cb6190ada11703af6ebb7d45bf905a9d5e566951ab713edee9f6a15fbb7c3b8e5b
7
+ data.tar.gz: aa43290fe05178d900bf9e401de737fd809d4b7a20bbdd128a378ba586a706bb70084dcdf1cc24d14d397376f9e71c6b75a515e81d48600c0e142cabe978ea99
data/Gemfile CHANGED
@@ -2,10 +2,12 @@ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  gem 'ruby_event_store', path: '../ruby_event_store'
5
+ gem 'ruby_event_store-browser', path: '../ruby_event_store-browser'
5
6
  gem 'rails_event_store_active_record', path: '../rails_event_store_active_record'
6
7
  gem 'aggregate_root', path: '../aggregate_root'
7
8
  gem 'bounded_context', path: '../bounded_context'
8
9
  gem 'protobuf_nested_struct'
10
+ gem 'sidekiq'
9
11
 
10
12
  if v = ENV['RAILS_VERSION']
11
13
  gem 'rails', v
data/Makefile CHANGED
@@ -1,10 +1,11 @@
1
1
  GEM_VERSION = $(shell cat ../RES_VERSION)
2
2
  GEM_NAME = rails_event_store
3
3
  REQUIRE = $(GEM_NAME)
4
- IGNORE = RailsEventStore.const_missing \
5
- RailsEventStore::Client\#initialize \
6
- RailsEventStore::AsyncProxyStrategy::AfterCommit::AsyncRecord\#rolledback! \
7
- RailsEventStore::AsyncProxyStrategy::AfterCommit::AsyncRecord\#before_committed!
4
+ IGNORE = RailsEventStore::Client\#initialize \
5
+ RailsEventStore::AfterCommitAsyncDispatcher::AsyncRecord\#rolledback! \
6
+ RailsEventStore::AsyncProxyStrategy::AfterCommit* \
7
+ RailsEventStore::ActiveJobDispatcher* \
8
+
8
9
  SUBJECT ?= RailsEventStore*
9
10
 
10
11
  install: ## Install gem dependencies
@@ -23,7 +24,7 @@ test: ## Run unit tests
23
24
 
24
25
  mutate: test ## Run mutation tests
25
26
  @echo "Running mutation tests"
26
- @bundle exec mutant --include lib \
27
+ @MUTATING=true bundle exec mutant --include lib \
27
28
  $(addprefix --require ,$(REQUIRE)) \
28
29
  $(addprefix --ignore-subject ,$(IGNORE)) \
29
30
  --use rspec "$(SUBJECT)"
@@ -1,71 +1,33 @@
1
1
  require 'active_job'
2
2
 
3
3
  module RailsEventStore
4
- module AsyncProxyStrategy
5
- class AfterCommit
6
- def call(klass, event)
7
- if ActiveRecord::Base.connection.transaction_open?
8
- ActiveRecord::Base.
9
- connection.
10
- current_transaction.
11
- add_record(AsyncRecord.new(klass, event))
12
- else
13
- klass.perform_later(YAML.dump(event))
14
- end
15
- end
16
-
17
- private
18
- class AsyncRecord
19
- def initialize(klass, event)
20
- @klass = klass
21
- @event = event
22
- end
23
-
24
- def committed!
25
- @klass.perform_later(YAML.dump(@event))
26
- end
4
+ # @deprecated Use RailsEventStore::ComposedDispatcher and RailsEventStore::ActiveJobScheduler instead
5
+ class ActiveJobDispatcher < RubyEventStore::AsyncDispatcher
6
+ def initialize(proxy_strategy: AsyncProxyStrategy::Inline.new)
7
+ super(proxy_strategy: proxy_strategy, scheduler: ActiveJobScheduler.new)
8
+ warn <<~EOW
9
+ RailsEventStore::ActiveJobDispatcher has been deprecated.
27
10
 
28
- def rolledback!(*)
29
- end
11
+ Use RailsEventStore::ComposedDispatcher and RailsEventStore::ActiveJobScheduler instead
12
+ EOW
13
+ end
30
14
 
31
- def before_committed!
32
- end
15
+ # @deprecated Use RailsEventStore::ActiveJobScheduler with RubyEventStore::ImmediateAsyncDispatcher or RailsEventStore::AfterCommitAsyncDispatcher instead
16
+ class ActiveJobScheduler
17
+ def initialize
18
+ warn <<~EOW
19
+ RailsEventStore::ActiveJobDispatcher::ActiveJobScheduler has been deprecated.
33
20
 
34
- def add_to_transaction
35
- AfterCommit.new.call(@klass, @event)
36
- end
21
+ Use RailsEventStore::ActiveJobScheduler with RubyEventStore::ImmediateAsyncDispatcher or RailsEventStore::AfterCommitAsyncDispatcher instead
22
+ EOW
37
23
  end
38
- end
39
-
40
- class Inline
41
- def call(klass, event)
42
- klass.perform_later(YAML.dump(event))
24
+ def call(klass, serialized_event)
25
+ klass.perform_later(serialized_event.to_h)
43
26
  end
44
- end
45
- end
46
27
 
47
- class ActiveJobDispatcher < RubyEventStore::PubSub::Dispatcher
48
- def initialize(proxy_strategy: AsyncProxyStrategy::Inline.new)
49
- @async_proxy_strategy = proxy_strategy
50
- end
51
-
52
- def call(subscriber, event)
53
- if async_handler?(subscriber)
54
- @async_proxy_strategy.call(subscriber, event)
55
- else
56
- super
28
+ def async_handler?(klass)
29
+ Class === klass && klass < ActiveJob::Base
57
30
  end
58
31
  end
59
-
60
- def verify(subscriber)
61
- super unless async_handler?(subscriber)
62
- end
63
-
64
- private
65
-
66
- def async_handler?(klass)
67
- Class === klass && klass < ActiveJob::Base
68
- end
69
-
70
32
  end
71
- end
33
+ end
@@ -0,0 +1,11 @@
1
+ module RailsEventStore
2
+ class ActiveJobScheduler
3
+ def call(klass, serialized_event)
4
+ klass.perform_later(serialized_event.to_h)
5
+ end
6
+
7
+ def verify(subscriber)
8
+ Class === subscriber && !!(subscriber < ActiveJob::Base)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,52 @@
1
+ module RailsEventStore
2
+ class AfterCommitAsyncDispatcher
3
+ def initialize(scheduler:)
4
+ @scheduler = scheduler
5
+ end
6
+
7
+ def call(subscriber, _, serialized_event)
8
+ run do
9
+ @scheduler.call(subscriber, serialized_event)
10
+ end
11
+ end
12
+
13
+ def run(&schedule_proc)
14
+ if ActiveRecord::Base.connection.transaction_open?
15
+ ActiveRecord::Base.
16
+ connection.
17
+ current_transaction.
18
+ add_record(AsyncRecord.new(self, schedule_proc))
19
+ else
20
+ yield
21
+ end
22
+ end
23
+
24
+ def verify(subscriber)
25
+ @scheduler.verify(subscriber)
26
+ end
27
+
28
+ private
29
+ class AsyncRecord
30
+ def initialize(dispatcher, schedule_proc)
31
+ @dispatcher = dispatcher
32
+ @schedule_proc = schedule_proc
33
+ end
34
+
35
+ def committed!
36
+ schedule_proc.call
37
+ end
38
+
39
+ def rolledback!(*)
40
+ end
41
+
42
+ def before_committed!
43
+ end
44
+
45
+ def add_to_transaction
46
+ dispatcher.run(&schedule_proc)
47
+ end
48
+
49
+ attr_reader :schedule_proc, :dispatcher
50
+ end
51
+ end
52
+ end
@@ -1,23 +1,32 @@
1
1
  require 'ruby_event_store'
2
+ require 'rails_event_store/async_proxy_strategy'
2
3
  require 'rails_event_store/active_job_dispatcher'
4
+ require 'rails_event_store/async_handler_helpers'
5
+ require 'rails_event_store/link_by_metadata'
6
+ require 'rails_event_store/after_commit_async_dispatcher'
7
+ require 'rails_event_store/active_job_scheduler'
3
8
  require 'rails_event_store/client'
4
9
  require 'rails_event_store/version'
5
10
  require 'rails_event_store/railtie'
6
- require 'rails_event_store/deprecations'
11
+ require 'rails_event_store/browser'
7
12
 
8
13
  module RailsEventStore
9
- Event = RubyEventStore::Event
10
- InMemoryRepository = RubyEventStore::InMemoryRepository
11
- EventBroker = RubyEventStore::PubSub::Broker
12
- Projection = RubyEventStore::Projection
13
- WrongExpectedEventVersion = RubyEventStore::WrongExpectedEventVersion
14
- InvalidExpectedVersion = RubyEventStore::InvalidExpectedVersion
15
- IncorrectStreamData = RubyEventStore::IncorrectStreamData
16
- EventNotFound = RubyEventStore::EventNotFound
17
- SubscriberNotExist = RubyEventStore::SubscriberNotExist
18
- InvalidHandler = RubyEventStore::InvalidHandler
19
- InvalidPageStart = RubyEventStore::InvalidPageStart
20
- InvalidPageSize = RubyEventStore::InvalidPageSize
21
- GLOBAL_STREAM = RubyEventStore::GLOBAL_STREAM
22
- PAGE_SIZE = RubyEventStore::PAGE_SIZE
23
- end
14
+ Event = RubyEventStore::Event
15
+ InMemoryRepository = RubyEventStore::InMemoryRepository
16
+ Subscriptions = RubyEventStore::PubSub::Subscriptions
17
+ Projection = RubyEventStore::Projection
18
+ WrongExpectedEventVersion = RubyEventStore::WrongExpectedEventVersion
19
+ InvalidExpectedVersion = RubyEventStore::InvalidExpectedVersion
20
+ IncorrectStreamData = RubyEventStore::IncorrectStreamData
21
+ EventNotFound = RubyEventStore::EventNotFound
22
+ SubscriberNotExist = RubyEventStore::SubscriberNotExist
23
+ InvalidHandler = RubyEventStore::InvalidHandler
24
+ InvalidPageStart = RubyEventStore::InvalidPageStart
25
+ InvalidPageSize = RubyEventStore::InvalidPageSize
26
+ CorrelatedCommands = RubyEventStore::CorrelatedCommands
27
+ GLOBAL_STREAM = RubyEventStore::GLOBAL_STREAM
28
+ PAGE_SIZE = RubyEventStore::PAGE_SIZE
29
+ AsyncProxyStrategy::Inline = RubyEventStore::AsyncProxyStrategy::Inline
30
+ AsyncDispatcher = RubyEventStore::AsyncDispatcher
31
+ ImmediateAsyncDispatcher = RubyEventStore::ImmediateAsyncDispatcher
32
+ end
@@ -0,0 +1,20 @@
1
+ module RailsEventStore
2
+
3
+ module AsyncHandler
4
+ def perform(payload)
5
+ super(Rails.configuration.event_store.deserialize(payload))
6
+ end
7
+ end
8
+
9
+ module CorrelatedHandler
10
+ def perform(event)
11
+ Rails.configuration.event_store.with_metadata(
12
+ correlation_id: event.metadata[:correlation_id] || event.event_id,
13
+ causation_id: event.event_id
14
+ ) do
15
+ super
16
+ end
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,48 @@
1
+ module RailsEventStore
2
+ module AsyncProxyStrategy
3
+ # @deprecated Use RailsEventStore::AfterCommitAsyncDispatcher instead
4
+ class AfterCommit
5
+ def initialize
6
+ warn <<~EOW
7
+ RailsEventStore::AsyncProxyStrategy::AfterCommit has been deprecated.
8
+
9
+ Use RailsEventStore::AfterCommitAsyncDispatcher instead
10
+ EOW
11
+ end
12
+
13
+ def call(schedule_proc)
14
+ if ActiveRecord::Base.connection.transaction_open?
15
+ ActiveRecord::Base.
16
+ connection.
17
+ current_transaction.
18
+ add_record(AsyncRecord.new(schedule_proc))
19
+ else
20
+ schedule_proc.call
21
+ end
22
+ end
23
+
24
+ private
25
+ class AsyncRecord
26
+ def initialize(schedule_proc)
27
+ @schedule_proc = schedule_proc
28
+ end
29
+
30
+ def committed!
31
+ schedule_proc.call
32
+ end
33
+
34
+ def rolledback!(*)
35
+ end
36
+
37
+ def before_committed!
38
+ end
39
+
40
+ def add_to_transaction
41
+ AfterCommit.new.call(schedule_proc)
42
+ end
43
+
44
+ attr_reader :schedule_proc
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,5 @@
1
+ require 'ruby_event_store/browser/app'
2
+
3
+ module RailsEventStore
4
+ Browser = RubyEventStore::Browser::App.for(event_store_locator: -> { Rails.configuration.event_store })
5
+ end
@@ -4,13 +4,16 @@ module RailsEventStore
4
4
 
5
5
  def initialize(repository: RailsEventStoreActiveRecord::EventRepository.new,
6
6
  mapper: RubyEventStore::Mappers::Default.new,
7
- event_broker: EventBroker.new(dispatcher: ActiveJobDispatcher.new),
8
- request_metadata: default_request_metadata,
9
- page_size: PAGE_SIZE)
10
- super(repository: repository,
7
+ subscriptions: RubyEventStore::PubSub::Subscriptions.new,
8
+ dispatcher: RubyEventStore::ComposedDispatcher.new(
9
+ RubyEventStore::ImmediateAsyncDispatcher.new(scheduler: ActiveJobScheduler.new),
10
+ RubyEventStore::PubSub::Dispatcher.new),
11
+ request_metadata: default_request_metadata)
12
+ super(repository: RubyEventStore::InstrumentedRepository.new(repository, ActiveSupport::Notifications),
11
13
  mapper: mapper,
12
- event_broker: event_broker,
13
- page_size: page_size)
14
+ subscriptions: subscriptions,
15
+ dispatcher: RubyEventStore::InstrumentedDispatcher.new(dispatcher, ActiveSupport::Notifications)
16
+ )
14
17
  @request_metadata = request_metadata
15
18
  end
16
19
 
@@ -0,0 +1,27 @@
1
+ module RailsEventStore
2
+
3
+ class LinkByMetadata < RubyEventStore::LinkByMetadata
4
+ def initialize(event_store: Rails.configuration.event_store, key:, prefix: nil)
5
+ super
6
+ end
7
+ end
8
+
9
+ class LinkByCorrelationId < RubyEventStore::LinkByCorrelationId
10
+ def initialize(event_store: Rails.configuration.event_store, prefix: nil)
11
+ super
12
+ end
13
+ end
14
+
15
+ class LinkByCausationId < RubyEventStore::LinkByCausationId
16
+ def initialize(event_store: Rails.configuration.event_store, prefix: nil)
17
+ super
18
+ end
19
+ end
20
+
21
+ class LinkByEventType < RubyEventStore::LinkByEventType
22
+ def initialize(event_store: Rails.configuration.event_store, prefix: nil)
23
+ super
24
+ end
25
+ end
26
+
27
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsEventStore
2
- VERSION = "0.30.0"
2
+ VERSION = "0.34.0"
3
3
  end
@@ -31,13 +31,15 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency 'rails', '~> 5.2'
32
32
  spec.add_development_dependency 'sqlite3'
33
33
  spec.add_development_dependency 'rack-test'
34
- spec.add_development_dependency 'mutant-rspec', '~> 0.8.14'
34
+ spec.add_development_dependency 'mutant-rspec', '= 0.8.17'
35
35
  spec.add_development_dependency 'google-protobuf', '~> 3.5.1.2'
36
+ spec.add_development_dependency 'pry'
36
37
 
37
- spec.add_dependency 'ruby_event_store', '= 0.30.0'
38
- spec.add_dependency 'rails_event_store_active_record', '= 0.30.0'
39
- spec.add_dependency 'aggregate_root', '= 0.30.0'
40
- spec.add_dependency 'bounded_context', '= 0.30.0'
38
+ spec.add_dependency 'ruby_event_store', '= 0.34.0'
39
+ spec.add_dependency 'ruby_event_store-browser', '= 0.34.0'
40
+ spec.add_dependency 'rails_event_store_active_record', '= 0.34.0'
41
+ spec.add_dependency 'aggregate_root', '= 0.34.0'
42
+ spec.add_dependency 'bounded_context', '= 0.34.0'
41
43
  spec.add_dependency 'activesupport', '>= 3.0'
42
44
  spec.add_dependency 'activemodel', '>= 3.0'
43
45
  spec.add_dependency 'activejob', '>= 3.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.30.0
4
+ version: 0.34.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arkency
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-31 00:00:00.000000000 Z
11
+ date: 2018-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,16 +98,16 @@ dependencies:
98
98
  name: mutant-rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 0.8.14
103
+ version: 0.8.17
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 0.8.14
110
+ version: 0.8.17
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: google-protobuf
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -122,62 +122,90 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 3.5.1.2
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: ruby_event_store
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - '='
130
144
  - !ruby/object:Gem::Version
131
- version: 0.30.0
145
+ version: 0.34.0
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '='
151
+ - !ruby/object:Gem::Version
152
+ version: 0.34.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: ruby_event_store-browser
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 0.34.0
132
160
  type: :runtime
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - '='
137
165
  - !ruby/object:Gem::Version
138
- version: 0.30.0
166
+ version: 0.34.0
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: rails_event_store_active_record
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
171
  - - '='
144
172
  - !ruby/object:Gem::Version
145
- version: 0.30.0
173
+ version: 0.34.0
146
174
  type: :runtime
147
175
  prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
178
  - - '='
151
179
  - !ruby/object:Gem::Version
152
- version: 0.30.0
180
+ version: 0.34.0
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: aggregate_root
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - '='
158
186
  - !ruby/object:Gem::Version
159
- version: 0.30.0
187
+ version: 0.34.0
160
188
  type: :runtime
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
192
  - - '='
165
193
  - !ruby/object:Gem::Version
166
- version: 0.30.0
194
+ version: 0.34.0
167
195
  - !ruby/object:Gem::Dependency
168
196
  name: bounded_context
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
199
  - - '='
172
200
  - !ruby/object:Gem::Version
173
- version: 0.30.0
201
+ version: 0.34.0
174
202
  type: :runtime
175
203
  prerelease: false
176
204
  version_requirements: !ruby/object:Gem::Requirement
177
205
  requirements:
178
206
  - - '='
179
207
  - !ruby/object:Gem::Version
180
- version: 0.30.0
208
+ version: 0.34.0
181
209
  - !ruby/object:Gem::Dependency
182
210
  name: activesupport
183
211
  requirement: !ruby/object:Gem::Requirement
@@ -247,14 +275,18 @@ files:
247
275
  - README.md
248
276
  - lib/rails_event_store.rb
249
277
  - lib/rails_event_store/active_job_dispatcher.rb
278
+ - lib/rails_event_store/active_job_scheduler.rb
279
+ - lib/rails_event_store/after_commit_async_dispatcher.rb
250
280
  - lib/rails_event_store/all.rb
281
+ - lib/rails_event_store/async_handler_helpers.rb
282
+ - lib/rails_event_store/async_proxy_strategy.rb
283
+ - lib/rails_event_store/browser.rb
251
284
  - lib/rails_event_store/client.rb
252
- - lib/rails_event_store/deprecations.rb
285
+ - lib/rails_event_store/link_by_metadata.rb
253
286
  - lib/rails_event_store/middleware.rb
254
287
  - lib/rails_event_store/railtie.rb
255
288
  - lib/rails_event_store/version.rb
256
289
  - rails_event_store.gemspec
257
- - tmp/.keep
258
290
  homepage: https://railseventstore.org
259
291
  licenses:
260
292
  - MIT
@@ -1,7 +0,0 @@
1
- module RailsEventStore
2
- def self.const_missing(const_name)
3
- super unless const_name == :MethodNotDefined
4
- warn "`RailsEventStore::MethodNotDefined` has been deprecated. Use `RailsEventStore::InvalidHandler` instead."
5
- InvalidHandler
6
- end
7
- end
data/tmp/.keep DELETED
File without changes