active_event_store 1.1.0 → 1.2.1

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: 40a03429293a097e9e128b80c543c1a8a6e605caf9c400d93b83753af4ff95d5
4
- data.tar.gz: c4576de3f33de50480e634e9fe8aa16ccb23a7acb23453e54f9ba23310dbc763
3
+ metadata.gz: 0027b3b48a56ed5ea80581772ceee55e3b90a14d32992007ac78c0bbe56cdf49
4
+ data.tar.gz: f32537dfb18cf745bc3f29ad4a0052624823a855f0b079740f270da98d35e9d8
5
5
  SHA512:
6
- metadata.gz: 3c80d23fe4f5f6be97c847f2b4cfd7e388793121b632e5edc7b24241f8fd36fc1078d1b15b2ca744e80d1ae75afae65ec1c925c87a35c9ec95da6c6dff671c2c
7
- data.tar.gz: 565fcba5bb1469be55feac9501d539ea6450f6682cb2a2773116e811cb1127c605ed9f393ea98055f8e30294758a1a3f30ce4b419eaec2e9727b8232364a4c01
6
+ metadata.gz: c9a553e32a62f53096d519ee4e3c48d4613e5c3c4465d8156d130bf21e6ef9e8d0d8b521db0e7e4379755402af148094d227bfa9fcfb96e4680dcd214d89dc79
7
+ data.tar.gz: 7a8ce1149f58ad0ca8ca908c54c3ad68c50862875ac5e146b4608d13152b2fe3059743c60d904ea32f8775687af2a7dfaea138186cd4eae7d145aaac7714cb42
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 1.2.1 (2024-04-26)
6
+
7
+ - Updates the railtie to define `Rails.configuration.event_store`. ([@Samsinite][])
8
+
9
+ ## 1.2.0 (2024-01-25)
10
+
11
+ - Use custom pipeline mapper and domain event transformer. ([@Samsinite][])
12
+
5
13
  ## 1.1.0 (2023-08-24)
6
14
 
7
15
  - Require Ruby 2.7+. ([@palkan][])
@@ -37,3 +45,4 @@ Now `ActiveSupport.on_load(:active_event_store) { ... }` works.
37
45
  [@palkan]: https://github.com/palkan
38
46
  [@chriscz]: https://github.com/chriscz
39
47
  [@caws]: https://github.com/caws
48
+ [@Samsinite]: https://github.com/Samsinite
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2020-2021 Vladimir Dementyev
1
+ Copyright (c) 2020-2024 Vladimir Dementyev
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -87,10 +87,10 @@ You can also register events manually:
87
87
 
88
88
  ```ruby
89
89
  # by passing an event class
90
- ActiveEventStore.mapper.register_event MyEventClass
90
+ ActiveEventStore.mapping.register_event MyEventClass
91
91
 
92
92
  # or more precisely (in that case `event.type` must be equal to "my_event")
93
- ActiveEventStore.mapper.register "my_event", MyEventClass
93
+ ActiveEventStore.mapping.register "my_event", MyEventClass
94
94
  ```
95
95
 
96
96
  ### Publish events
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActiveEventStore
4
+ class DomainEvent < RubyEventStore::Mappers::Transformation::DomainEvent
5
+ attr_reader :mapping
6
+ def initialize(mapping:)
7
+ @mapping = mapping
8
+ end
9
+
10
+ def dump(event)
11
+ # lazily add type to mapping
12
+ # NOTE: use class name instead of a class to handle code reload
13
+ # in development (to avoid accessing orphaned classes)
14
+ mapping.register(event.event_type, event.class.name) unless mapping.exist?(event.event_type)
15
+
16
+ metadata = event.metadata.dup.to_h
17
+ timestamp = metadata[:timestamp]
18
+ valid_at = metadata[:valid_at]
19
+ RubyEventStore::Record.new(
20
+ event_id: event.event_id,
21
+ metadata: metadata,
22
+ data: event.data,
23
+ event_type: event.event_type,
24
+ timestamp: timestamp,
25
+ valid_at: valid_at
26
+ )
27
+ end
28
+
29
+ def load(record)
30
+ event_class = mapping.fetch(record.event_type) {
31
+ raise "Don't know how to deserialize event: \"#{record.event_type}\". " \
32
+ "Add explicit mapping: ActiveEventStore.mapping.register \"#{record.event_type}\", \"<Class Name>\""
33
+ }
34
+
35
+ Object
36
+ .const_get(event_class)
37
+ .new(
38
+ **record.data.symbolize_keys,
39
+ event_id: record.event_id,
40
+ metadata: record.metadata.merge(timestamp: record.timestamp, valid_at: record.valid_at)
41
+ )
42
+ end
43
+ end
44
+ end
@@ -29,6 +29,7 @@ module ActiveEventStore
29
29
  mapper: ActiveEventStore::Mapper.new(mapping: ActiveEventStore.mapping),
30
30
  **ActiveEventStore.config.store_options
31
31
  )
32
+ Rails.configuration.event_store = ActiveEventStore.event_store
32
33
 
33
34
  ActiveSupport.run_load_hooks(:active_event_store, ActiveEventStore)
34
35
  end
@@ -1,54 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveEventStore
4
- using(Module.new {
5
- refine Hash do
6
- def symbolize_keys
7
- RubyEventStore::TransformKeys.symbolize(self)
8
- end
4
+ class Mapper < RubyEventStore::Mappers::PipelineMapper
5
+ def initialize(mapping:)
6
+ super(RubyEventStore::Mappers::Pipeline.new(
7
+ RubyEventStore::Mappers::Transformation::SymbolizeMetadataKeys.new,
8
+ to_domain_event: ActiveEventStore::DomainEvent.new(mapping: mapping)
9
+ ))
9
10
  end
10
- })
11
-
12
- # Custom mapper for RES events.
13
- #
14
- # See https://github.com/RailsEventStore/rails_event_store/blob/v0.35.0/ruby_event_store/lib/ruby_event_store/mappers/default.rb
15
- class Mapper
16
- def initialize(mapping:, serializer: ActiveEventStore.config.serializer)
17
- @serializer = serializer
18
- @mapping = mapping
19
- end
20
-
21
- def event_to_record(domain_event)
22
- # lazily add type to mapping
23
- # NOTE: use class name instead of a class to handle code reload
24
- # in development (to avoid accessing orphaned classes)
25
- mapping.register(domain_event.event_type, domain_event.class.name) unless mapping.exist?(domain_event.event_type)
26
-
27
- RubyEventStore::Record.new(
28
- event_id: domain_event.event_id,
29
- metadata: serializer.dump(domain_event.metadata.to_h),
30
- data: serializer.dump(domain_event.data),
31
- event_type: domain_event.event_type,
32
- timestamp: domain_event.timestamp,
33
- valid_at: domain_event.valid_at
34
- )
35
- end
36
-
37
- def record_to_event(record)
38
- event_class = mapping.fetch(record.event_type) {
39
- raise "Don't know how to deserialize event: \"#{record.event_type}\". " \
40
- "Add explicit mapping: ActiveEventStore.mapping.register \"#{record.event_type}\", \"<Class Name>\""
41
- }
42
-
43
- Object.const_get(event_class).new(
44
- **serializer.load(record.data).symbolize_keys,
45
- metadata: serializer.load(record.metadata).symbolize_keys,
46
- event_id: record.event_id
47
- )
48
- end
49
-
50
- private
51
-
52
- attr_reader :serializer, :mapping
53
11
  end
54
12
  end
@@ -142,7 +142,7 @@ module ActiveEventStore
142
142
  end
143
143
 
144
144
  def event_data_matches?(attributes, event)
145
- (attributes.nil? || attributes.all? { |k, v| v == event.public_send(k) })
145
+ attributes.nil? || attributes.all? { |k, v| v == event.public_send(k) }
146
146
  end
147
147
  end
148
148
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveEventStore # :nodoc:
4
- VERSION = "1.1.0"
4
+ VERSION = "1.2.1"
5
5
  end
@@ -5,6 +5,7 @@ require "rails_event_store"
5
5
  require "active_event_store/version"
6
6
 
7
7
  require "active_event_store/config"
8
+ require "active_event_store/domain_event"
8
9
  require "active_event_store/event"
9
10
  require "active_event_store/mapping"
10
11
  require "active_event_store/mapper"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_event_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Dementyev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-25 00:00:00.000000000 Z
11
+ date: 2024-04-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails_event_store
@@ -107,6 +107,7 @@ files:
107
107
  - README.md
108
108
  - lib/active_event_store.rb
109
109
  - lib/active_event_store/config.rb
110
+ - lib/active_event_store/domain_event.rb
110
111
  - lib/active_event_store/engine.rb
111
112
  - lib/active_event_store/event.rb
112
113
  - lib/active_event_store/mapper.rb
@@ -127,7 +128,7 @@ metadata:
127
128
  documentation_uri: http://github.com/palkan/active_event_store
128
129
  homepage_uri: http://github.com/palkan/active_event_store
129
130
  source_code_uri: http://github.com/palkan/active_event_store
130
- post_install_message:
131
+ post_install_message:
131
132
  rdoc_options: []
132
133
  require_paths:
133
134
  - lib
@@ -142,8 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
143
  - !ruby/object:Gem::Version
143
144
  version: '0'
144
145
  requirements: []
145
- rubygems_version: 3.4.8
146
- signing_key:
146
+ rubygems_version: 3.4.19
147
+ signing_key:
147
148
  specification_version: 4
148
149
  summary: Rails Event Store in a more Rails way
149
150
  test_files: []