active_event_store 1.1.0 → 1.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 +4 -4
- data/CHANGELOG.md +5 -0
- data/LICENSE.txt +1 -1
- data/README.md +2 -2
- data/lib/active_event_store/domain_event.rb +44 -0
- data/lib/active_event_store/mapper.rb +6 -48
- data/lib/active_event_store/test_helper/event_published_matcher.rb +1 -1
- data/lib/active_event_store/version.rb +1 -1
- data/lib/active_event_store.rb +1 -0
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8710d5820746603d15b1d77b3bc01bbf70eb1943339041cf5c90fb80b15fd9b3
         | 
| 4 | 
            +
              data.tar.gz: 8b7c765faf7eb4b781e64068b30a361e36110a775c81aea466fdc0a01a843624
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7f00bc57582a15aa87279ca77fe58fcce032a1e1fab32c2567faefddbfc11a6697944c438e7794f91d030494441ce9662c62911ea0bd26cd2ec69e2f81fcf6bd
         | 
| 7 | 
            +
              data.tar.gz: d793f2718e1e706ceea6d386e63527d55ade4a09c77a3ce9c2d6c25a1a6d2d32d162570dd239f58df3e1883106112f5ca152bd37845f9f3056eb7f42e9570370
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -2,6 +2,10 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            ## master
         | 
| 4 4 |  | 
| 5 | 
            +
            ## 1.2.0 (2024-01-25)
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            - Use custom pipeline mapper and domain event transformer. ([@Samsinite][])
         | 
| 8 | 
            +
             | 
| 5 9 | 
             
            ## 1.1.0 (2023-08-24)
         | 
| 6 10 |  | 
| 7 11 | 
             
            - Require Ruby 2.7+. ([@palkan][])
         | 
| @@ -37,3 +41,4 @@ Now `ActiveSupport.on_load(:active_event_store) { ... }` works. | |
| 37 41 | 
             
            [@palkan]: https://github.com/palkan
         | 
| 38 42 | 
             
            [@chriscz]: https://github.com/chriscz
         | 
| 39 43 | 
             
            [@caws]: https://github.com/caws
         | 
| 44 | 
            +
            [@Samsinite]: https://github.com/Samsinite
         | 
    
        data/LICENSE.txt
    CHANGED
    
    
    
        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. | 
| 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. | 
| 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
         | 
| @@ -1,54 +1,12 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            module ActiveEventStore
         | 
| 4 | 
            -
               | 
| 5 | 
            -
                 | 
| 6 | 
            -
                   | 
| 7 | 
            -
                    RubyEventStore:: | 
| 8 | 
            -
             | 
| 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 | 
            -
                       | 
| 145 | 
            +
                      attributes.nil? || attributes.all? { |k, v| v == event.public_send(k) }
         | 
| 146 146 | 
             
                    end
         | 
| 147 147 | 
             
                  end
         | 
| 148 148 | 
             
                end
         | 
    
        data/lib/active_event_store.rb
    CHANGED
    
    
    
        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. | 
| 4 | 
            +
              version: 1.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Vladimir Dementyev
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2024-01-25 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
         | 
| @@ -142,7 +143,7 @@ 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. | 
| 146 | 
            +
            rubygems_version: 3.4.20
         | 
| 146 147 | 
             
            signing_key:
         | 
| 147 148 | 
             
            specification_version: 4
         | 
| 148 149 | 
             
            summary: Rails Event Store in a more Rails way
         |