midnight-business_logic 0.0.3 → 0.0.4
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
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 0746f394c8c1334e4eaf674bdfc9abe158d0a32485735515a739e43ff868f3f5
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: eff166d26277b30bf653685654ad49777f61a19906a8951e865a8aa9972655b8
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 12fe01a09e3892b7d1de16a79c6a02b31758703150517b7672e706858328b41f361ed5f472a89c8a0b9457c6fcc7874ef7f95b34413ad2cc2aeafc0a69d039d0
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1ae7d14bde5fbadff1a429b78d1fb1575b3eb5168a91284a62e367fa6fd490b3208bc88884b8d8e1664f15d878b01701f091319a04d22dc32ed39054f28353c6
         
     | 
| 
         @@ -1,70 +1,40 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'active_support/core_ext/object/blank'
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
1 
     | 
    
         
             
            module Midnight
         
     | 
| 
       4 
2 
     | 
    
         
             
              module BusinessLogic
         
     | 
| 
       5 
3 
     | 
    
         
             
                class EventDispatcher
         
     | 
| 
       6 
     | 
    
         
            -
                   
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                        raise InvalidHandlerSupplied unless handler.respond_to?(:call)
         
     | 
| 
       13 
     | 
    
         
            -
                        # correct construction example:
         
     | 
| 
       14 
     | 
    
         
            -
                        # EventDispatcher.new(SomeEvent => [
         
     | 
| 
       15 
     | 
    
         
            -
                        #   method(:puts)
         
     | 
| 
       16 
     | 
    
         
            -
                        # ])
         
     | 
| 
      
 4 
     | 
    
         
            +
                  def initialize(*handlers)
         
     | 
| 
      
 5 
     | 
    
         
            +
                    handlers = handlers.map do |handler|
         
     | 
| 
      
 6 
     | 
    
         
            +
                      if handler.respond_to?(:arity)
         
     | 
| 
      
 7 
     | 
    
         
            +
                        handler
         
     | 
| 
      
 8 
     | 
    
         
            +
                      else
         
     | 
| 
      
 9 
     | 
    
         
            +
                        handler.method(:call)
         
     | 
| 
       17 
10 
     | 
    
         
             
                      end
         
     | 
| 
      
 11 
     | 
    
         
            +
                    rescue ::NameError
         
     | 
| 
      
 12 
     | 
    
         
            +
                      reject_handlers
         
     | 
| 
       18 
13 
     | 
    
         
             
                    end
         
     | 
| 
       19 
     | 
    
         
            -
                    @ 
     | 
| 
      
 14 
     | 
    
         
            +
                    @handlers = handlers
         
     | 
| 
      
 15 
     | 
    
         
            +
                    @arity_mismatched = /wrong\s+number\s+of\s+arguments/i
         
     | 
| 
       20 
16 
     | 
    
         
             
                    freeze
         
     | 
| 
       21 
17 
     | 
    
         
             
                  end
         
     | 
| 
       22 
18 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                  def  
     | 
| 
       24 
     | 
    
         
            -
                     
     | 
| 
       25 
     | 
    
         
            -
                     
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
                  def call(\
         
     | 
| 
      
 20 
     | 
    
         
            +
                    events,
         
     | 
| 
      
 21 
     | 
    
         
            +
                    # consumers are forbidden
         
     | 
| 
      
 22 
     | 
    
         
            +
                    # to pass metadata with _event_handlers as a key
         
     | 
| 
      
 23 
     | 
    
         
            +
                    _event_handlers: @handlers,
         
     | 
| 
      
 24 
     | 
    
         
            +
                    **metadata
         
     | 
| 
      
 25 
     | 
    
         
            +
                  )
         
     | 
| 
      
 26 
     | 
    
         
            +
                    _event_handlers.each do |handler|
         
     | 
| 
      
 27 
     | 
    
         
            +
                      handler.call(events, **metadata)
         
     | 
| 
      
 28 
     | 
    
         
            +
                    rescue ::ArgumentError => e
         
     | 
| 
      
 29 
     | 
    
         
            +
                      raise e unless @arity_mismatched =~ e.message
         
     | 
| 
      
 30 
     | 
    
         
            +
                      handler.call(events)
         
     | 
| 
       29 
31 
     | 
    
         
             
                    end
         
     | 
| 
       30 
32 
     | 
    
         
             
                  end
         
     | 
| 
       31 
33 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                   
     | 
| 
       33 
     | 
    
         
            -
                    events.each(&method(:once))
         
     | 
| 
       34 
     | 
    
         
            -
                  end
         
     | 
| 
       35 
     | 
    
         
            -
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
                  private
         
     | 
| 
       36 
35 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
             
     | 
| 
       39 
     | 
    
         
            -
                    @_dispatchers = dispatchers
         
     | 
| 
       40 
     | 
    
         
            -
                    freeze
         
     | 
| 
       41 
     | 
    
         
            -
                  end
         
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
                  def once(event, **metadata)
         
     | 
| 
       44 
     | 
    
         
            -
                    @_dispatchers.each do |dispatcher|
         
     | 
| 
       45 
     | 
    
         
            -
                      dispatcher.once(event, metadata)
         
     | 
| 
       46 
     | 
    
         
            -
                    end
         
     | 
| 
       47 
     | 
    
         
            -
                  end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  def batch(events, **metadata)
         
     | 
| 
       50 
     | 
    
         
            -
                    events.each do |event|
         
     | 
| 
       51 
     | 
    
         
            -
                      once(event, metadata)
         
     | 
| 
       52 
     | 
    
         
            -
                    end
         
     | 
| 
       53 
     | 
    
         
            -
                  end
         
     | 
| 
       54 
     | 
    
         
            -
                end
         
     | 
| 
       55 
     | 
    
         
            -
                private_constant :CompositeEventDispatcher
         
     | 
| 
       56 
     | 
    
         
            -
             
     | 
| 
       57 
     | 
    
         
            -
                class EventDispatcher
         
     | 
| 
       58 
     | 
    
         
            -
                  class InvalidDispatcherSupplied < ArgumentError;
         
     | 
| 
       59 
     | 
    
         
            -
                  end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
     | 
    
         
            -
                  class << self
         
     | 
| 
       62 
     | 
    
         
            -
                    def merge(*dispatchers)
         
     | 
| 
       63 
     | 
    
         
            -
                      raise InvalidDispatcherSupplied unless dispatchers.all? do |dispatcher|
         
     | 
| 
       64 
     | 
    
         
            -
                        dispatcher.respond_to?(:once)
         
     | 
| 
       65 
     | 
    
         
            -
                      end
         
     | 
| 
       66 
     | 
    
         
            -
                      CompositeEventDispatcher.new(*dispatchers)
         
     | 
| 
       67 
     | 
    
         
            -
                    end
         
     | 
| 
      
 36 
     | 
    
         
            +
                  def reject_handlers
         
     | 
| 
      
 37 
     | 
    
         
            +
                    raise ::ArgumentError, 'Invalid event handler'
         
     | 
| 
       68 
38 
     | 
    
         
             
                  end
         
     | 
| 
       69 
39 
     | 
    
         
             
                end
         
     | 
| 
       70 
40 
     | 
    
         
             
              end
         
     | 
| 
         @@ -0,0 +1,37 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'active_support/core_ext/object/blank'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Midnight
         
     | 
| 
      
 4 
     | 
    
         
            +
              module BusinessLogic
         
     | 
| 
      
 5 
     | 
    
         
            +
                class EventRouter < EventDispatcher
         
     | 
| 
      
 6 
     | 
    
         
            +
                  def initialize(handlers_map = {})
         
     | 
| 
      
 7 
     | 
    
         
            +
                    # construction example:
         
     | 
| 
      
 8 
     | 
    
         
            +
                    # EventRouter.new(SomeEvent => [
         
     | 
| 
      
 9 
     | 
    
         
            +
                    #   method(:puts)
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # ])
         
     | 
| 
      
 11 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 12 
     | 
    
         
            +
                      handlers_map.each do |_event_class, handlers|
         
     | 
| 
      
 13 
     | 
    
         
            +
                        Array(handlers).each do |handler|
         
     | 
| 
      
 14 
     | 
    
         
            +
                          reject_handlers unless handler.respond_to?(:call)
         
     | 
| 
      
 15 
     | 
    
         
            +
                        end
         
     | 
| 
      
 16 
     | 
    
         
            +
                      end
         
     | 
| 
      
 17 
     | 
    
         
            +
                    rescue ::NoMethodError => e
         
     | 
| 
      
 18 
     | 
    
         
            +
                      raise e unless e.name == :each
         
     | 
| 
      
 19 
     | 
    
         
            +
                      reject_handlers
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
                    @handlers_map = handlers_map
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @arity_mismatched = /wrong\s+number\s+of\s+arguments/i
         
     | 
| 
      
 23 
     | 
    
         
            +
                    freeze
         
     | 
| 
      
 24 
     | 
    
         
            +
                  end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  def call(event, **metadata)
         
     | 
| 
      
 27 
     | 
    
         
            +
                    handlers = @handlers_map[event.class]
         
     | 
| 
      
 28 
     | 
    
         
            +
                    return if handlers.blank?
         
     | 
| 
      
 29 
     | 
    
         
            +
                    super(
         
     | 
| 
      
 30 
     | 
    
         
            +
                      event,
         
     | 
| 
      
 31 
     | 
    
         
            +
                      _event_handlers: Array(handlers),
         
     | 
| 
      
 32 
     | 
    
         
            +
                      **metadata
         
     | 
| 
      
 33 
     | 
    
         
            +
                    )
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: midnight-business_logic
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.4
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sarun Rattanasiri
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2019-08- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2019-08-31 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activesupport
         
     | 
| 
         @@ -36,6 +36,8 @@ files: 
     | 
|
| 
       36 
36 
     | 
    
         
             
            - lib/midnight/business_logic/aggregate_root.rb
         
     | 
| 
       37 
37 
     | 
    
         
             
            - lib/midnight/business_logic/event.rb
         
     | 
| 
       38 
38 
     | 
    
         
             
            - lib/midnight/business_logic/event_dispatcher.rb
         
     | 
| 
      
 39 
     | 
    
         
            +
            - lib/midnight/business_logic/event_queue.rb
         
     | 
| 
      
 40 
     | 
    
         
            +
            - lib/midnight/business_logic/event_router.rb
         
     | 
| 
       39 
41 
     | 
    
         
             
            - lib/midnight/business_logic/version.rb
         
     | 
| 
       40 
42 
     | 
    
         
             
            - lib/midnight/commons/concurrent_write_error.rb
         
     | 
| 
       41 
43 
     | 
    
         
             
            - lib/midnight/commons/constants.rb
         
     | 
| 
         @@ -43,7 +45,7 @@ homepage: https://gitlab.com/slime-systems/midnight-enterprise-toolkit/tree/mast 
     | 
|
| 
       43 
45 
     | 
    
         
             
            licenses:
         
     | 
| 
       44 
46 
     | 
    
         
             
            - BSD-3-Clause
         
     | 
| 
       45 
47 
     | 
    
         
             
            metadata:
         
     | 
| 
       46 
     | 
    
         
            -
              source_code_uri: https://gitlab.com/slime-systems/midnight-enterprise-toolkit/tree/v0.0. 
     | 
| 
      
 48 
     | 
    
         
            +
              source_code_uri: https://gitlab.com/slime-systems/midnight-enterprise-toolkit/tree/v0.0.4/midnight-business_logic
         
     | 
| 
       47 
49 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       48 
50 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       49 
51 
     | 
    
         
             
            require_paths:
         
     |