rails_event_store 1.3.1 → 2.9.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 +4 -4
- data/README.md +5 -1
- data/lib/generators/rails_event_store/bounded_context_generator.rb +30 -0
- data/lib/generators/rails_event_store/rspec_generator.rb +33 -0
- data/lib/generators/rails_event_store/test_unit_generator.rb +25 -0
- data/lib/generators/templates/bc_spec.rb +4 -0
- data/lib/generators/templates/module.rb +2 -0
- data/lib/generators/templates/require_bc_spec.rb +4 -0
- data/lib/generators/templates/require_bc_test.rb +3 -0
- data/lib/generators/templates/spec_helper.rb +7 -0
- data/lib/generators/templates/test_helper.rb +1 -0
- data/lib/rails_event_store/active_job_scheduler.rb +11 -3
- data/lib/rails_event_store/after_commit_async_dispatcher.rb +5 -10
- data/lib/rails_event_store/all.rb +27 -26
- data/lib/rails_event_store/async_handler_helpers.rb +23 -8
- data/lib/rails_event_store/browser.rb +8 -3
- data/lib/rails_event_store/client.rb +25 -19
- data/lib/rails_event_store/json_client.rb +55 -0
- data/lib/rails_event_store/link_by_metadata.rb +0 -2
- data/lib/rails_event_store/middleware.rb +1 -3
- data/lib/rails_event_store/railtie.rb +3 -4
- data/lib/rails_event_store/version.rb +1 -1
- data/lib/rails_event_store.rb +2 -2
- metadata +39 -43
- data/CHANGELOG.md +0 -159
- data/Gemfile +0 -23
- data/Makefile +0 -14
- data/rails_event_store.gemspec +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f547a33f75be9a69d32ffc99ea19b680fb35744d5c20b478effcba828439ac2e
|
4
|
+
data.tar.gz: d6103a7a68b1ee7230f254445be460983b160c8d6e7383c300e658261a6702e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 772a73bc208254277062b9cde2d811c29414cea5a698b2abeb36dfe32892155cf634223f32707fbb344df24205c36d793f55e6e23091d0a693950db803cce2c3
|
7
|
+
data.tar.gz: a1b8e4dd54fba0594cdefec218561b7abcfd8ca16f58f78c3e746e2b70de59ebacf8da4e188c0c5ed9e845aaed6dd700d7acb5c3df4b2b7bd35b0eeac02555f0
|
data/README.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
1
|
# RailsEventStore
|
2
2
|
|
3
|
-
Rails wrapper for
|
3
|
+
Rails wrapper for RubyEventStore with batteries included.
|
4
|
+
|
5
|
+
Ships with asynchronous after-commit event dispatch on top of ActiveJob, ActiveSupport::Notifications instrumentation enabled, request metadata enrichment and opinionated directory structure generator for bounded contexts.
|
6
|
+
|
7
|
+
Find out more at [https://railseventstore.org](https://railseventstore.org/)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
|
5
|
+
module RailsEventStore
|
6
|
+
module Generators
|
7
|
+
class BoundedContextGenerator < Rails::Generators::NamedBase
|
8
|
+
source_root File.expand_path(File.join(File.dirname(__FILE__), "../templates"))
|
9
|
+
hook_for :test_framework
|
10
|
+
|
11
|
+
def create_bounded_context
|
12
|
+
create_file "#{bounded_context_name}/lib/#{bounded_context_name}/.keep"
|
13
|
+
|
14
|
+
template "module.rb", "#{bounded_context_name}/lib/#{bounded_context_name}.rb"
|
15
|
+
|
16
|
+
application { "config.paths.add '#{bounded_context_name}/lib', eager_load: true" }
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def bounded_context_namespace
|
22
|
+
name.camelize
|
23
|
+
end
|
24
|
+
|
25
|
+
def bounded_context_name
|
26
|
+
name.underscore
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
|
5
|
+
module RailsEventStore
|
6
|
+
module Generators
|
7
|
+
class RspecGenerator < Rails::Generators::NamedBase
|
8
|
+
source_root File.expand_path(File.join(File.dirname(__FILE__), "../templates"))
|
9
|
+
|
10
|
+
def spec_helper
|
11
|
+
template "spec_helper.rb", "#{bounded_context_name}/spec/spec_helper.rb"
|
12
|
+
end
|
13
|
+
|
14
|
+
def bc_spec
|
15
|
+
template "bc_spec.rb", "#{bounded_context_name}/spec/#{bounded_context_name}_spec.rb"
|
16
|
+
end
|
17
|
+
|
18
|
+
def require_bc_spec
|
19
|
+
template "require_bc_spec.rb", "spec/#{bounded_context_name}_spec.rb"
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def bounded_context_namespace
|
25
|
+
name.camelize
|
26
|
+
end
|
27
|
+
|
28
|
+
def bounded_context_name
|
29
|
+
name.underscore
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
|
5
|
+
module RailsEventStore
|
6
|
+
module Generators
|
7
|
+
class TestUnitGenerator < Rails::Generators::NamedBase
|
8
|
+
source_root File.expand_path(File.join(File.dirname(__FILE__), "../templates"))
|
9
|
+
|
10
|
+
def test_helper
|
11
|
+
template "test_helper.rb", "#{bounded_context_name}/test/test_helper.rb"
|
12
|
+
end
|
13
|
+
|
14
|
+
def require_bc_test
|
15
|
+
template "require_bc_test.rb", "test/#{bounded_context_name}_test.rb"
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def bounded_context_name
|
21
|
+
name.underscore
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
2
|
+
|
3
|
+
$LOAD_PATH.push File.expand_path("../../../spec", __FILE__)
|
4
|
+
require File.expand_path("../../../config/environment", __FILE__)
|
5
|
+
require File.expand_path("../../../spec/rails_helper", __FILE__)
|
6
|
+
|
7
|
+
require_relative "../lib/<%= bounded_context_name %>"
|
@@ -0,0 +1 @@
|
|
1
|
+
require_relative "../lib/<%= bounded_context_name %>"
|
@@ -1,15 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "active_job"
|
4
4
|
|
5
5
|
module RailsEventStore
|
6
6
|
class ActiveJobScheduler
|
7
|
-
def
|
8
|
-
|
7
|
+
def initialize(serializer:)
|
8
|
+
@serializer = serializer
|
9
|
+
end
|
10
|
+
|
11
|
+
def call(klass, record)
|
12
|
+
klass.perform_later(record.serialize(serializer).to_h.transform_keys(&:to_s))
|
9
13
|
end
|
10
14
|
|
11
15
|
def verify(subscriber)
|
12
16
|
Class === subscriber && !!(subscriber < ActiveJob::Base)
|
13
17
|
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :serializer
|
14
22
|
end
|
15
23
|
end
|
@@ -6,10 +6,8 @@ module RailsEventStore
|
|
6
6
|
@scheduler = scheduler
|
7
7
|
end
|
8
8
|
|
9
|
-
def call(subscriber, _,
|
10
|
-
run
|
11
|
-
@scheduler.call(subscriber, serialized_event)
|
12
|
-
end
|
9
|
+
def call(subscriber, _, record)
|
10
|
+
run { @scheduler.call(subscriber, record) }
|
13
11
|
end
|
14
12
|
|
15
13
|
def run(&schedule_proc)
|
@@ -40,18 +38,15 @@ module RailsEventStore
|
|
40
38
|
schedule_proc.call
|
41
39
|
end
|
42
40
|
|
43
|
-
def rolledback!(*)
|
44
|
-
end
|
41
|
+
def rolledback!(*); end
|
45
42
|
|
46
|
-
def before_committed
|
47
|
-
end
|
43
|
+
def before_committed!; end
|
48
44
|
|
49
45
|
def add_to_transaction
|
50
46
|
dispatcher.run(&schedule_proc)
|
51
47
|
end
|
52
48
|
|
53
|
-
def trigger_transactional_callbacks
|
54
|
-
end
|
49
|
+
def trigger_transactional_callbacks?; end
|
55
50
|
|
56
51
|
attr_reader :schedule_proc, :dispatcher
|
57
52
|
end
|
@@ -1,31 +1,32 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
3
|
+
require "ruby_event_store"
|
4
|
+
require_relative "async_handler_helpers"
|
5
|
+
require_relative "link_by_metadata"
|
6
|
+
require_relative "after_commit_async_dispatcher"
|
7
|
+
require_relative "active_job_scheduler"
|
8
|
+
require_relative "client"
|
9
|
+
require_relative "json_client"
|
10
|
+
require_relative "version"
|
11
|
+
require_relative "railtie"
|
12
|
+
require_relative "browser"
|
12
13
|
|
13
14
|
module RailsEventStore
|
14
|
-
Event
|
15
|
-
InMemoryRepository
|
16
|
-
Subscriptions
|
17
|
-
Projection
|
18
|
-
WrongExpectedEventVersion
|
19
|
-
InvalidExpectedVersion
|
20
|
-
IncorrectStreamData
|
21
|
-
EventNotFound
|
22
|
-
SubscriberNotExist
|
23
|
-
InvalidHandler
|
24
|
-
InvalidPageStart
|
25
|
-
InvalidPageStop
|
26
|
-
InvalidPageSize
|
27
|
-
CorrelatedCommands
|
28
|
-
GLOBAL_STREAM
|
29
|
-
PAGE_SIZE
|
30
|
-
ImmediateAsyncDispatcher
|
15
|
+
Event = RubyEventStore::Event
|
16
|
+
InMemoryRepository = RubyEventStore::InMemoryRepository
|
17
|
+
Subscriptions = RubyEventStore::Subscriptions
|
18
|
+
Projection = RubyEventStore::Projection
|
19
|
+
WrongExpectedEventVersion = RubyEventStore::WrongExpectedEventVersion
|
20
|
+
InvalidExpectedVersion = RubyEventStore::InvalidExpectedVersion
|
21
|
+
IncorrectStreamData = RubyEventStore::IncorrectStreamData
|
22
|
+
EventNotFound = RubyEventStore::EventNotFound
|
23
|
+
SubscriberNotExist = RubyEventStore::SubscriberNotExist
|
24
|
+
InvalidHandler = RubyEventStore::InvalidHandler
|
25
|
+
InvalidPageStart = RubyEventStore::InvalidPageStart
|
26
|
+
InvalidPageStop = RubyEventStore::InvalidPageStop
|
27
|
+
InvalidPageSize = RubyEventStore::InvalidPageSize
|
28
|
+
CorrelatedCommands = RubyEventStore::CorrelatedCommands
|
29
|
+
GLOBAL_STREAM = RubyEventStore::GLOBAL_STREAM
|
30
|
+
PAGE_SIZE = RubyEventStore::PAGE_SIZE
|
31
|
+
ImmediateAsyncDispatcher = RubyEventStore::ImmediateAsyncDispatcher
|
31
32
|
end
|
@@ -2,19 +2,34 @@
|
|
2
2
|
|
3
3
|
module RailsEventStore
|
4
4
|
module AsyncHandler
|
5
|
-
def
|
6
|
-
|
5
|
+
def self.with_defaults
|
6
|
+
with
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.with(
|
10
|
+
event_store: Rails.configuration.event_store,
|
11
|
+
event_store_locator: nil,
|
12
|
+
serializer: RubyEventStore::Serializers::YAML
|
13
|
+
)
|
14
|
+
Module.new do
|
15
|
+
define_method :perform do |payload|
|
16
|
+
event_store = event_store_locator.call if event_store_locator
|
17
|
+
super(event_store.deserialize(serializer: serializer, **payload.transform_keys(&:to_sym)))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.prepended(host_class)
|
23
|
+
host_class.prepend with_defaults
|
7
24
|
end
|
8
25
|
end
|
9
26
|
|
10
27
|
module CorrelatedHandler
|
11
28
|
def perform(event)
|
12
|
-
Rails
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
super
|
17
|
-
end
|
29
|
+
Rails
|
30
|
+
.configuration
|
31
|
+
.event_store
|
32
|
+
.with_metadata(correlation_id: event.metadata[:correlation_id], causation_id: event.event_id) { super }
|
18
33
|
end
|
19
34
|
end
|
20
35
|
end
|
@@ -1,7 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ruby_event_store/browser/app"
|
4
|
+
require "rails/engine"
|
4
5
|
|
5
6
|
module RailsEventStore
|
6
|
-
|
7
|
-
|
7
|
+
class Browser < Rails::Engine
|
8
|
+
endpoint RubyEventStore::Browser::App.for(event_store_locator: -> { Rails.configuration.event_store })
|
9
|
+
|
10
|
+
railtie_name "ruby_event_store_browser_app"
|
11
|
+
end
|
12
|
+
end
|
@@ -4,35 +4,41 @@ module RailsEventStore
|
|
4
4
|
class Client < RubyEventStore::Client
|
5
5
|
attr_reader :request_metadata
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
7
|
+
def initialize(
|
8
|
+
mapper: RubyEventStore::Mappers::Default.new,
|
9
|
+
repository: RubyEventStore::ActiveRecord::EventRepository.new(serializer: RubyEventStore::Serializers::YAML),
|
10
|
+
subscriptions: RubyEventStore::Subscriptions.new,
|
11
|
+
dispatcher: RubyEventStore::ComposedDispatcher.new(
|
12
|
+
RailsEventStore::AfterCommitAsyncDispatcher.new(
|
13
|
+
scheduler: ActiveJobScheduler.new(serializer: RubyEventStore::Serializers::YAML)
|
14
|
+
),
|
15
|
+
RubyEventStore::Dispatcher.new
|
16
|
+
),
|
17
|
+
clock: default_clock,
|
18
|
+
correlation_id_generator: default_correlation_id_generator,
|
19
|
+
request_metadata: default_request_metadata
|
20
|
+
)
|
21
|
+
super(
|
22
|
+
repository: RubyEventStore::InstrumentedRepository.new(repository, ActiveSupport::Notifications),
|
23
|
+
mapper: RubyEventStore::Mappers::InstrumentedMapper.new(mapper, ActiveSupport::Notifications),
|
24
|
+
subscriptions: RubyEventStore::InstrumentedSubscriptions.new(subscriptions, ActiveSupport::Notifications),
|
25
|
+
clock: clock,
|
26
|
+
correlation_id_generator: correlation_id_generator,
|
27
|
+
dispatcher: RubyEventStore::InstrumentedDispatcher.new(dispatcher, ActiveSupport::Notifications)
|
28
|
+
)
|
19
29
|
@request_metadata = request_metadata
|
20
30
|
end
|
21
31
|
|
22
32
|
def with_request_metadata(env, &block)
|
23
|
-
with_metadata(request_metadata.call(env))
|
24
|
-
block.call
|
25
|
-
end
|
33
|
+
with_metadata(request_metadata.call(env)) { block.call }
|
26
34
|
end
|
27
35
|
|
28
36
|
private
|
37
|
+
|
29
38
|
def default_request_metadata
|
30
39
|
->(env) do
|
31
40
|
request = ActionDispatch::Request.new(env)
|
32
|
-
{
|
33
|
-
remote_ip: request.remote_ip,
|
34
|
-
request_id: request.uuid
|
35
|
-
}
|
41
|
+
{ remote_ip: request.remote_ip, request_id: request.uuid }
|
36
42
|
end
|
37
43
|
end
|
38
44
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsEventStore
|
4
|
+
class JSONClient < Client
|
5
|
+
def initialize(
|
6
|
+
mapper: RubyEventStore::Mappers::Default.new,
|
7
|
+
repository: RubyEventStore::ActiveRecord::EventRepository.new(serializer: RubyEventStore::NULL),
|
8
|
+
subscriptions: RubyEventStore::Subscriptions.new,
|
9
|
+
dispatcher: RubyEventStore::ComposedDispatcher.new(
|
10
|
+
RailsEventStore::AfterCommitAsyncDispatcher.new(
|
11
|
+
scheduler: ActiveJobScheduler.new(serializer: RubyEventStore::Serializers::YAML)
|
12
|
+
),
|
13
|
+
RubyEventStore::Dispatcher.new
|
14
|
+
),
|
15
|
+
clock: default_clock,
|
16
|
+
correlation_id_generator: default_correlation_id_generator,
|
17
|
+
request_metadata: default_request_metadata
|
18
|
+
)
|
19
|
+
super(
|
20
|
+
mapper:
|
21
|
+
RubyEventStore::Mappers::InstrumentedMapper.new(
|
22
|
+
RubyEventStore::Mappers::PipelineMapper.new(
|
23
|
+
RubyEventStore::Mappers::Pipeline.new(
|
24
|
+
RubyEventStore::Mappers::Transformation::PreserveTypes
|
25
|
+
.new
|
26
|
+
.register(Symbol, serializer: ->(v) { v.to_s }, deserializer: ->(v) { v.to_sym })
|
27
|
+
.register(
|
28
|
+
Time,
|
29
|
+
serializer: ->(v) { v.iso8601(RubyEventStore::TIMESTAMP_PRECISION) },
|
30
|
+
deserializer: ->(v) { Time.iso8601(v) }
|
31
|
+
)
|
32
|
+
.register(
|
33
|
+
ActiveSupport::TimeWithZone,
|
34
|
+
serializer: ->(v) { v.iso8601(RubyEventStore::TIMESTAMP_PRECISION) },
|
35
|
+
deserializer: ->(v) { Time.iso8601(v).in_time_zone },
|
36
|
+
stored_type: ->(*) { "ActiveSupport::TimeWithZone" }
|
37
|
+
)
|
38
|
+
.register(Date, serializer: ->(v) { v.iso8601 }, deserializer: ->(v) { Date.iso8601(v) })
|
39
|
+
.register(DateTime, serializer: ->(v) { v.iso8601 }, deserializer: ->(v) { DateTime.iso8601(v) })
|
40
|
+
.register(BigDecimal, serializer: ->(v) { v.to_s }, deserializer: ->(v) { BigDecimal(v) }),
|
41
|
+
RubyEventStore::Mappers::Transformation::SymbolizeMetadataKeys.new
|
42
|
+
)
|
43
|
+
),
|
44
|
+
ActiveSupport::Notifications
|
45
|
+
),
|
46
|
+
repository: RubyEventStore::InstrumentedRepository.new(repository, ActiveSupport::Notifications),
|
47
|
+
subscriptions: RubyEventStore::InstrumentedSubscriptions.new(subscriptions, ActiveSupport::Notifications),
|
48
|
+
clock: clock,
|
49
|
+
correlation_id_generator: correlation_id_generator,
|
50
|
+
dispatcher: RubyEventStore::InstrumentedDispatcher.new(dispatcher, ActiveSupport::Notifications)
|
51
|
+
)
|
52
|
+
@request_metadata = request_metadata
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RailsEventStore
|
4
|
-
|
5
4
|
class LinkByMetadata < RubyEventStore::LinkByMetadata
|
6
5
|
def initialize(event_store: Rails.configuration.event_store, key:, prefix: nil)
|
7
6
|
super
|
@@ -25,5 +24,4 @@ module RailsEventStore
|
|
25
24
|
super
|
26
25
|
end
|
27
26
|
end
|
28
|
-
|
29
27
|
end
|
@@ -1,13 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
|
3
|
+
require "rails/railtie"
|
4
|
+
require_relative "middleware"
|
5
5
|
|
6
6
|
module RailsEventStore
|
7
7
|
class Railtie < ::Rails::Railtie
|
8
|
-
initializer
|
8
|
+
initializer "rails_event_store.middleware" do |rails|
|
9
9
|
rails.middleware.use(::RailsEventStore::Middleware)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
13
|
-
|
data/lib/rails_event_store.rb
CHANGED
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:
|
4
|
+
version: 2.9.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arkency
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby_event_store
|
@@ -16,112 +16,98 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.9.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.9.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: ruby_event_store-browser
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.9.1
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.9.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rails_event_store_active_record
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.9.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.9.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: aggregate_root
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 2.9.1
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - '='
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: bounded_context
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 1.3.1
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - '='
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 1.3.1
|
68
|
+
version: 2.9.1
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: activesupport
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
86
72
|
requirements:
|
87
73
|
- - ">="
|
88
74
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
75
|
+
version: '6.0'
|
90
76
|
type: :runtime
|
91
77
|
prerelease: false
|
92
78
|
version_requirements: !ruby/object:Gem::Requirement
|
93
79
|
requirements:
|
94
80
|
- - ">="
|
95
81
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
82
|
+
version: '6.0'
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: activemodel
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
100
86
|
requirements:
|
101
87
|
- - ">="
|
102
88
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
89
|
+
version: '6.0'
|
104
90
|
type: :runtime
|
105
91
|
prerelease: false
|
106
92
|
version_requirements: !ruby/object:Gem::Requirement
|
107
93
|
requirements:
|
108
94
|
- - ">="
|
109
95
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
96
|
+
version: '6.0'
|
111
97
|
- !ruby/object:Gem::Dependency
|
112
98
|
name: activejob
|
113
99
|
requirement: !ruby/object:Gem::Requirement
|
114
100
|
requirements:
|
115
101
|
- - ">="
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
103
|
+
version: '6.0'
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
107
|
requirements:
|
122
108
|
- - ">="
|
123
109
|
- !ruby/object:Gem::Version
|
124
|
-
version: '
|
110
|
+
version: '6.0'
|
125
111
|
- !ruby/object:Gem::Dependency
|
126
112
|
name: arkency-command_bus
|
127
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,17 +122,26 @@ dependencies:
|
|
136
122
|
- - ">="
|
137
123
|
- !ruby/object:Gem::Version
|
138
124
|
version: '0.4'
|
139
|
-
description:
|
140
|
-
|
141
|
-
|
125
|
+
description: |
|
126
|
+
Rails wrapper for RubyEventStore with batteries included. Ships with asynchronous after-commit event dispatch
|
127
|
+
on top of ActiveJob, ActiveSupport::Notifications instrumentation enabled, request metadata enrichment
|
128
|
+
and opinionated directory structure generator for bounded contexts.
|
129
|
+
email: dev@arkency.com
|
142
130
|
executables: []
|
143
131
|
extensions: []
|
144
|
-
extra_rdoc_files:
|
132
|
+
extra_rdoc_files:
|
133
|
+
- README.md
|
145
134
|
files:
|
146
|
-
- CHANGELOG.md
|
147
|
-
- Gemfile
|
148
|
-
- Makefile
|
149
135
|
- README.md
|
136
|
+
- lib/generators/rails_event_store/bounded_context_generator.rb
|
137
|
+
- lib/generators/rails_event_store/rspec_generator.rb
|
138
|
+
- lib/generators/rails_event_store/test_unit_generator.rb
|
139
|
+
- lib/generators/templates/bc_spec.rb
|
140
|
+
- lib/generators/templates/module.rb
|
141
|
+
- lib/generators/templates/require_bc_spec.rb
|
142
|
+
- lib/generators/templates/require_bc_test.rb
|
143
|
+
- lib/generators/templates/spec_helper.rb
|
144
|
+
- lib/generators/templates/test_helper.rb
|
150
145
|
- lib/rails_event_store.rb
|
151
146
|
- lib/rails_event_store/active_job_scheduler.rb
|
152
147
|
- lib/rails_event_store/after_commit_async_dispatcher.rb
|
@@ -154,19 +149,20 @@ files:
|
|
154
149
|
- lib/rails_event_store/async_handler_helpers.rb
|
155
150
|
- lib/rails_event_store/browser.rb
|
156
151
|
- lib/rails_event_store/client.rb
|
152
|
+
- lib/rails_event_store/json_client.rb
|
157
153
|
- lib/rails_event_store/link_by_metadata.rb
|
158
154
|
- lib/rails_event_store/middleware.rb
|
159
155
|
- lib/rails_event_store/railtie.rb
|
160
156
|
- lib/rails_event_store/version.rb
|
161
|
-
- rails_event_store.gemspec
|
162
157
|
homepage: https://railseventstore.org
|
163
158
|
licenses:
|
164
159
|
- MIT
|
165
160
|
metadata:
|
166
|
-
homepage_uri: https://railseventstore.org
|
161
|
+
homepage_uri: https://railseventstore.org
|
167
162
|
changelog_uri: https://github.com/RailsEventStore/rails_event_store/releases
|
168
163
|
source_code_uri: https://github.com/RailsEventStore/rails_event_store
|
169
164
|
bug_tracker_uri: https://github.com/RailsEventStore/rails_event_store/issues
|
165
|
+
rubygems_mfa_required: 'true'
|
170
166
|
post_install_message:
|
171
167
|
rdoc_options: []
|
172
168
|
require_paths:
|
@@ -175,15 +171,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
175
171
|
requirements:
|
176
172
|
- - ">="
|
177
173
|
- !ruby/object:Gem::Version
|
178
|
-
version: '
|
174
|
+
version: '2.7'
|
179
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
176
|
requirements:
|
181
177
|
- - ">="
|
182
178
|
- !ruby/object:Gem::Version
|
183
179
|
version: '0'
|
184
180
|
requirements: []
|
185
|
-
rubygems_version: 3.
|
181
|
+
rubygems_version: 3.3.7
|
186
182
|
signing_key:
|
187
183
|
specification_version: 4
|
188
|
-
summary:
|
184
|
+
summary: Rails wrapper for RubyEventStore with batteries included
|
189
185
|
test_files: []
|
data/CHANGELOG.md
DELETED
@@ -1,159 +0,0 @@
|
|
1
|
-
Further changes can be tracked at [releases page](https://github.com/RailsEventStore/rails_event_store/releases).
|
2
|
-
|
3
|
-
### 0.14.5 (24.08.2017)
|
4
|
-
|
5
|
-
* Change: ruby_event_store updated to 0.14.0
|
6
|
-
|
7
|
-
### 0.14.4 (18.08.2017)
|
8
|
-
|
9
|
-
* Change: rails_event_store_active_record updated to 0.6.11
|
10
|
-
* Fix: Explicit order when querying forward. Leaving it implcit to database engine choice gives different results on different engines.
|
11
|
-
* Fix: Explicitly require railtie to load middleware in Rails to enrich event metadata with request metadata (PR #65)
|
12
|
-
|
13
|
-
### 0.14.3 (24.11.2016)
|
14
|
-
|
15
|
-
* Fix: Fixes where is initialized event repository #62
|
16
|
-
|
17
|
-
### 0.14.2 (23.11.2016)
|
18
|
-
|
19
|
-
* Change: rails_event_store_active_record updated to 0.6.10
|
20
|
-
This time it will really allow to avoid ActiveRecord dependency when not using rails_event_store_active_record's
|
21
|
-
event repository.
|
22
|
-
|
23
|
-
### 0.14.1 (21.11.2016)
|
24
|
-
|
25
|
-
* Change: Allows to set the event repository used. #61
|
26
|
-
Allow to avoid ActiveRecord dependency when not using rails_event_store_active_record's
|
27
|
-
event repository. See documentation for mode details https://railseventstore.arkency.com/docs/repository.html
|
28
|
-
|
29
|
-
### 0.14.0 (28.10.2016)
|
30
|
-
|
31
|
-
* Change: aggregate_root updated to 0.4.0
|
32
|
-
This is a breaking change only if you use aggregate_root gem.
|
33
|
-
Nothing has changed in RailsEventStore however the aggregate_root gem
|
34
|
-
has been redesigned completely.
|
35
|
-
|
36
|
-
### 0.13.0 (21.10.2016)
|
37
|
-
|
38
|
-
* Change: ruby_event_store updated to 0.13.0
|
39
|
-
* Change: RailsEventStore::Client methods signarures aligned with RubyEventStore::Client
|
40
|
-
RailsEventStore::Client is just a specialization of RubyEventStore::Client
|
41
|
-
with sensible defaults. Nothing more. This will ensure both are compatible.
|
42
|
-
* Change: No more ClosedStruct in Event class, you need use hashes to access data & metadata.
|
43
|
-
This is a breaking change.
|
44
|
-
|
45
|
-
### 0.12.1 (11.08.2016)
|
46
|
-
|
47
|
-
* Fix: aggregate_root gem updated to 0.3.5 fixing invalid method name generated for events wrapped in namespace
|
48
|
-
|
49
|
-
### 0.12.0 (10.08.2016)
|
50
|
-
|
51
|
-
* Change: Updated Ruby Event Store method calls according to the newer version PR #53
|
52
|
-
|
53
|
-
### 0.11.0 (12.07.2016)
|
54
|
-
|
55
|
-
* Breaking change in domain event class (Part of PR #48)
|
56
|
-
* no more simple `TestEvent.new(some_attr: 'some value')`
|
57
|
-
use `TestEvent.new(data: { some_attr: 'some value' })` instead
|
58
|
-
* all data & metadata attributes accessible via `data` & `metadata` properties
|
59
|
-
of event class
|
60
|
-
* This will avoid name clashes when defining domain event data,
|
61
|
-
especially important for `event_id`
|
62
|
-
* Breaking change: deprecated `handle_event` method removed, use `call` instead
|
63
|
-
* some domain event handlers might need method rename
|
64
|
-
* Change: Mark aliased methods as deprecated (soon to be removed)
|
65
|
-
* Change: Update RubyEventStore to 0.11.0 PR #48
|
66
|
-
* RubyEventStore::Facade renamed to RubyEventStore::Client
|
67
|
-
* Fix: Improve mutation tests coverage PR #47
|
68
|
-
|
69
|
-
### 0.10.0 (30.06.2016)
|
70
|
-
|
71
|
-
* Change: Rails request details in event metadata PR #39
|
72
|
-
* Change: Add dynamic subscriptions (implemented by ruby_event_store 0.9.0) PR #43
|
73
|
-
* Fix: In-memory sqlite3 with schema load over prebaked filesystem blob in testing PR #41
|
74
|
-
|
75
|
-
### 0.9.0 (24.06.2016)
|
76
|
-
|
77
|
-
* Change: ruby_event_store updated to 0.9.0 (Call instead of handle_event)
|
78
|
-
* Change: aggregate_root updated to 0.3.1 (licensing info)
|
79
|
-
* Fix: Clarify Licensing terms #36 - MIT licence it is from now
|
80
|
-
|
81
|
-
### 0.8.0 (21.06.2016)
|
82
|
-
|
83
|
-
* Change: ruby_event_store updated to 0.8.0 (dynamic subscriptions)
|
84
|
-
* Change: aggregate_root updated to 0.3.0 (fix circular dependency)
|
85
|
-
* Change: remove SlackEventHandler
|
86
|
-
|
87
|
-
### 0.7.0 (01.06.2016)
|
88
|
-
|
89
|
-
* Change: ruby_event_store updated to 0.6.0 (adding basic projections support)
|
90
|
-
|
91
|
-
### 0.6.1 (25.05.2016)
|
92
|
-
|
93
|
-
* Fix: Allow to read events backward PR #32 (bugfix)
|
94
|
-
|
95
|
-
### 0.6.0 (11.04.2016)
|
96
|
-
|
97
|
-
* Change: EventRepository moved to separate gem [rails_event_store_active_record](https://github.com/RailsEventStore/rails_event_store_active_record)
|
98
|
-
* Change: rails_event_store_active_record updated to version 0.5.1 - allows to use custom event class
|
99
|
-
|
100
|
-
### 0.5.0 (21.03.2016)
|
101
|
-
|
102
|
-
* Align with changes in `ruby_event_store` 0.5.0:
|
103
|
-
* Change: Event class refactoring to make default values more explicit
|
104
|
-
* Change: Let event broker to be given as a dependency
|
105
|
-
* Change: No nils, use symbols instead - :any & :none replaced meaningless nil value
|
106
|
-
* Change: Remove Event#event_type - use class instead
|
107
|
-
* Fix: Typo fix (appent_to_stream corrected to append_to_stream)
|
108
|
-
* Change: Encapsulate internals fo RailsEventStore::Client
|
109
|
-
* Change: Hide `ruby_event_store` internals by adding classes in RailsEventStore module
|
110
|
-
|
111
|
-
### 0.4.1 (17.03.2016)
|
112
|
-
|
113
|
-
* Fix: aggregate_root gem aligned with changes in rails_event_store
|
114
|
-
|
115
|
-
### 0.4.0 (17.03.2016)
|
116
|
-
|
117
|
-
* Change: Use class names to subscribe events (ruby_event_store update to 0.4.0)
|
118
|
-
* Change: EventRepository now recreate events using orginal classes
|
119
|
-
|
120
|
-
### 0.3.1 (13.03.2016)
|
121
|
-
|
122
|
-
* Update to ruby_event_store 0.3.1 - fix changing timestamp on reads from repository
|
123
|
-
|
124
|
-
### 0.3.0 (03.03.2016)
|
125
|
-
|
126
|
-
* Update to ruby_event_store 0.3.0 - see ruby_event_store changelog for more details
|
127
|
-
* Implement reading forward & backward (aliasold methods to read forward)
|
128
|
-
* Implement paging when reading from all streams
|
129
|
-
|
130
|
-
### 0.2.2 (25.02.2016)
|
131
|
-
|
132
|
-
* Restore AggregateRoot in RES, but this time as a dependency on aggregate_root gem
|
133
|
-
|
134
|
-
### 0.2.1 (25.02.2016)
|
135
|
-
|
136
|
-
* Fix: Error when trying to #read_all_streams #20
|
137
|
-
|
138
|
-
### 0.2.0 (29.01.2016)
|
139
|
-
|
140
|
-
* Removed EventEntity class
|
141
|
-
* All read & returned events are not instances of RailsEventStore::Event class
|
142
|
-
* RailsEventStore::Event class allows for easier events creation and access to data attributes
|
143
|
-
* AggregateRoot module & repository extracted to new gem (aggregate_root)
|
144
|
-
|
145
|
-
### 0.1.2 (26.05.2015)
|
146
|
-
|
147
|
-
* Moved most core features to the separate gem `ruby_event_store`. We left only rails related implementation here.
|
148
|
-
* It's now assumed that `event_id` has a unique index in the database (the same is applied to the initial migration generator)
|
149
|
-
* Model is no longer validating uniqueness of `event_id` via ActiveRecord
|
150
|
-
* Event does not need any data now, it can be created just like `OrderCreated.new` (without any arguments)
|
151
|
-
* Migration generator is no more generating the `updated_at` field in the `event_store_events` table. We also advise to remove this column, since events shouldn't be *ever* modified.
|
152
|
-
* In the event's metadata there's a new field `published_at`
|
153
|
-
* Added the `subscribe_to_all_events` method to `RailsEventStore::Client`
|
154
|
-
* Subscribing to only one event via `client.subscribe(subscriber, 'OrderCreated')` no longer works. You should use `client.subscribe(subscriber, ['OrderCreated'])` instead.
|
155
|
-
* Default event's name is no longer `OrderCreated` for the `OrderCreated` event in the `Orders` namespace, now it's `Orders::OrderCreated`
|
156
|
-
|
157
|
-
### 0.1.1 (22.04.2015)
|
158
|
-
|
159
|
-
Initial release.
|
data/Gemfile
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
-
gemspec
|
4
|
-
|
5
|
-
eval_gemfile File.expand_path('../support/bundler/Gemfile.shared', __dir__)
|
6
|
-
|
7
|
-
gem 'ruby_event_store', path: '../ruby_event_store'
|
8
|
-
gem 'ruby_event_store-browser', path: '../ruby_event_store-browser'
|
9
|
-
gem 'rails_event_store_active_record', path: '../rails_event_store_active_record'
|
10
|
-
gem 'aggregate_root', path: '../aggregate_root'
|
11
|
-
gem 'bounded_context', path: '../bounded_context'
|
12
|
-
gem 'protobuf_nested_struct'
|
13
|
-
gem 'sidekiq'
|
14
|
-
gem 'rack-test'
|
15
|
-
gem 'google-protobuf', '~> 3.12.2', '>= 3.12.2'
|
16
|
-
gem 'pry'
|
17
|
-
gem 'rails', ENV['RAILS_VERSION']
|
18
|
-
|
19
|
-
if Gem::Version.new(ENV['RAILS_VERSION']) >= Gem::Version.new('6.0.0')
|
20
|
-
gem 'sqlite3', '1.4.2'
|
21
|
-
else
|
22
|
-
gem 'sqlite3', '1.3.13'
|
23
|
-
end
|
data/Makefile
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
GEM_VERSION = $(shell cat ../RES_VERSION)
|
2
|
-
GEM_NAME = rails_event_store
|
3
|
-
REQUIRE = $(GEM_NAME)
|
4
|
-
IGNORE = RailsEventStore::Client\#initialize \
|
5
|
-
RailsEventStore::AfterCommitAsyncDispatcher::AsyncRecord* \
|
6
|
-
RailsEventStore::AfterCommitAsyncDispatcher\#async_record
|
7
|
-
SUBJECT ?= RailsEventStore*
|
8
|
-
DATABASE_URL ?= sqlite3::memory:
|
9
|
-
|
10
|
-
include ../support/make/install.mk
|
11
|
-
include ../support/make/test.mk
|
12
|
-
include ../support/make/mutant.mk
|
13
|
-
include ../support/make/gem.mk
|
14
|
-
include ../support/make/help.mk
|
data/rails_event_store.gemspec
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'rails_event_store/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = 'rails_event_store'
|
8
|
-
spec.version = RailsEventStore::VERSION
|
9
|
-
spec.licenses = ['MIT']
|
10
|
-
spec.authors = ['Arkency']
|
11
|
-
spec.email = ['dev@arkency.com']
|
12
|
-
|
13
|
-
spec.summary = %q{Event Store in Ruby}
|
14
|
-
spec.description = %q{Implementation of Event Store in Ruby}
|
15
|
-
spec.homepage = 'https://railseventstore.org'
|
16
|
-
spec.metadata = {
|
17
|
-
"homepage_uri" => "https://railseventstore.org/",
|
18
|
-
"changelog_uri" => "https://github.com/RailsEventStore/rails_event_store/releases",
|
19
|
-
"source_code_uri" => "https://github.com/RailsEventStore/rails_event_store",
|
20
|
-
"bug_tracker_uri" => "https://github.com/RailsEventStore/rails_event_store/issues",
|
21
|
-
}
|
22
|
-
|
23
|
-
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
24
|
-
spec.bindir = 'exe'
|
25
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
|
-
spec.require_paths = ['lib']
|
27
|
-
|
28
|
-
spec.add_dependency 'ruby_event_store', '= 1.3.1'
|
29
|
-
spec.add_dependency 'ruby_event_store-browser', '= 1.3.1'
|
30
|
-
spec.add_dependency 'rails_event_store_active_record', '= 1.3.1'
|
31
|
-
spec.add_dependency 'aggregate_root', '= 1.3.1'
|
32
|
-
spec.add_dependency 'bounded_context', '= 1.3.1'
|
33
|
-
spec.add_dependency 'activesupport', '>= 3.0'
|
34
|
-
spec.add_dependency 'activemodel', '>= 3.0'
|
35
|
-
spec.add_dependency 'activejob', '>= 3.0'
|
36
|
-
spec.add_dependency 'arkency-command_bus', '>= 0.4'
|
37
|
-
end
|