evil_events 0.1.0rc1 → 0.1.0rc2
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/.travis.yml +2 -0
- data/CHANGELOG.md +2 -0
- data/README.md +4 -2
- data/evil_events.gemspec +9 -7
- data/lib/evil_events/boot_point.rb +4 -8
- data/lib/evil_events/config.rb +7 -0
- data/lib/evil_events/core/activity_logging.rb +2 -2
- data/lib/evil_events/core/broadcasting/adapters/memory_async.rb +13 -8
- data/lib/evil_events/core/broadcasting/adapters/memory_sync.rb +11 -9
- data/lib/evil_events/core/broadcasting/adapters.rb +2 -2
- data/lib/evil_events/core/broadcasting/dispatcher/{dispatchable.rb → mixin.rb} +1 -1
- data/lib/evil_events/core/broadcasting/dispatcher.rb +1 -1
- data/lib/evil_events/core/broadcasting/emitter.rb +10 -2
- data/lib/evil_events/core/broadcasting.rb +1 -1
- data/lib/evil_events/core/events/abstract_event.rb +4 -1
- data/lib/evil_events/core/events/event_class_factory.rb +8 -12
- data/lib/evil_events/core/events/event_extensions/adapter_customizable.rb +2 -2
- data/lib/evil_events/core/events/event_extensions/emittable.rb +12 -0
- data/lib/evil_events/core/events/event_extensions/manageable.rb +1 -1
- data/lib/evil_events/core/events/event_extensions/observable.rb +3 -3
- data/lib/evil_events/core/events/event_extensions/payloadable.rb +1 -1
- data/lib/evil_events/core/events/event_extensions/serializable.rb +2 -0
- data/lib/evil_events/core/events/manager_factory.rb +10 -0
- data/lib/evil_events/core/events/serializers/hash.rb +1 -1
- data/lib/evil_events/core/events/serializers/json.rb +1 -1
- data/lib/evil_events/core/events/subscriber/mixin.rb +2 -2
- data/lib/evil_events/core/events/subscriber.rb +11 -1
- data/lib/evil_events/core/events.rb +1 -0
- data/lib/evil_events/core.rb +1 -0
- data/lib/evil_events/shared/combined_context.rb +2 -0
- data/lib/evil_events/shared/logger.rb +1 -1
- data/lib/evil_events/shared.rb +6 -5
- data/lib/evil_events/system/broadcaster.rb +42 -0
- data/lib/evil_events/system/event_builder.rb +30 -0
- data/lib/evil_events/system/event_manager.rb +95 -0
- data/lib/evil_events/system/mock.rb +7 -3
- data/lib/evil_events/system/mocking.rb +33 -0
- data/lib/evil_events/system.rb +34 -125
- data/lib/evil_events/version.rb +1 -1
- data/lib/evil_events.rb +5 -5
- metadata +37 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7a6c5ea4454784cde26a98119cba57b5d593b38a
         | 
| 4 | 
            +
              data.tar.gz: f6966cb8fa6f63a8a81185ebb7ed27135325972b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5318459757e376efd82ab5a05bead86551b44b18948348523123777fe42a237f8d069e7fa79a19e4cb78a034c85b1be45d758e53a8dc7b261362f86cbfeb6c3f
         | 
| 7 | 
            +
              data.tar.gz: 384d7919a39d38a2998cc2663c14ec6ff453c6012668eae704321d4a1a1bfae413f44c585d263a295b091fa4d948c4cf0dc43b536ea74419ea8332d5674f8a73
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/CHANGELOG.md
    ADDED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,10 +1,12 @@ | |
| 1 1 | 
             
            # EvilEvents - powerful event system for ruby applications
         | 
| 2 2 |  | 
| 3 3 | 
             
            [](https://badge.fury.io/rb/evil_events)
         | 
| 4 | 
            +
            [](https://travis-ci.org/ergosploit/evil_events)
         | 
| 5 | 
            +
            [](https://coveralls.io/github/ergosploit/evil_events?branch=master)
         | 
| 4 6 |  | 
| 5 | 
            -
             | 
| 7 | 
            +
            NOTE: Work in progress!
         | 
| 6 8 |  | 
| 7 | 
            -
            ###  | 
| 9 | 
            +
            ### ROADMAP
         | 
| 8 10 | 
             
            - Full test coverage (0.1.0)
         | 
| 9 11 | 
             
            - Basic documentation (README) (0.1.0)
         | 
| 10 12 | 
             
            - FULL documentation (0.2.1)
         | 
    
        data/evil_events.gemspec
    CHANGED
    
    | @@ -32,11 +32,13 @@ Gem::Specification.new do |spec| | |
| 32 32 | 
             
              spec.add_dependency 'dry-container',    '0.6.0'
         | 
| 33 33 | 
             
              spec.add_dependency 'concurrent-ruby',  '1.0.5'
         | 
| 34 34 |  | 
| 35 | 
            -
              spec.add_development_dependency ' | 
| 36 | 
            -
              spec.add_development_dependency ' | 
| 37 | 
            -
              spec.add_development_dependency ' | 
| 38 | 
            -
              spec.add_development_dependency ' | 
| 39 | 
            -
              spec.add_development_dependency ' | 
| 40 | 
            -
              spec.add_development_dependency ' | 
| 41 | 
            -
              spec.add_development_dependency ' | 
| 35 | 
            +
              spec.add_development_dependency 'coveralls',      '0.7.2'
         | 
| 36 | 
            +
              spec.add_development_dependency 'pry',            '0.11.1'
         | 
| 37 | 
            +
              spec.add_development_dependency 'simplecov',      '0.15.1'
         | 
| 38 | 
            +
              spec.add_development_dependency 'simplecov-json', '0.2'
         | 
| 39 | 
            +
              spec.add_development_dependency 'rubocop',        '0.50.0'
         | 
| 40 | 
            +
              spec.add_development_dependency 'bundler',        '1.15.4'
         | 
| 41 | 
            +
              spec.add_development_dependency 'rake',           '12.1.0'
         | 
| 42 | 
            +
              spec.add_development_dependency 'rspec',          '3.6.0'
         | 
| 43 | 
            +
              spec.add_development_dependency 'rubocop-rspec',  '1.18.0'
         | 
| 42 44 | 
             
            end
         | 
| @@ -3,15 +3,11 @@ | |
| 3 3 | 
             
            module EvilEvents
         | 
| 4 4 | 
             
              # @api private
         | 
| 5 5 | 
             
              # @since 0.1.0
         | 
| 6 | 
            -
               | 
| 7 | 
            -
                # @api private
         | 
| 6 | 
            +
              class BootPoint
         | 
| 8 7 | 
             
                # @since 0.1.0
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                  # @since 0.1.0
         | 
| 11 | 
            -
                  extend Shared::DependencyContainer::Mixin
         | 
| 8 | 
            +
                extend Shared::DependencyContainer::Mixin
         | 
| 12 9 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
                end
         | 
| 10 | 
            +
                register(:event_system, memoize: true) { EvilEvents::System.new }
         | 
| 11 | 
            +
                register(:config) { EvilEvents::Config }
         | 
| 16 12 | 
             
              end
         | 
| 17 13 | 
             
            end
         | 
    
        data/lib/evil_events/config.rb
    CHANGED
    
    
| @@ -9,7 +9,7 @@ module EvilEvents::Core | |
| 9 9 | 
             
                # @return void
         | 
| 10 10 | 
             
                #
         | 
| 11 11 | 
             
                # @since 0.1.0
         | 
| 12 | 
            -
                def log_activity(activity  | 
| 12 | 
            +
                def log_activity(activity: nil, message: nil)
         | 
| 13 13 | 
             
                  progname = "[EvilEvents:#{activity}]"
         | 
| 14 14 | 
             
                  activity_logger.add(activity_logger.level, message, progname)
         | 
| 15 15 | 
             
                end
         | 
| @@ -18,7 +18,7 @@ module EvilEvents::Core | |
| 18 18 | 
             
                #
         | 
| 19 19 | 
             
                # @since 0.1.0
         | 
| 20 20 | 
             
                def activity_logger
         | 
| 21 | 
            -
                  EvilEvents::BootPoint | 
| 21 | 
            +
                  EvilEvents::BootPoint[:config].logger
         | 
| 22 22 | 
             
                end
         | 
| 23 23 | 
             
              end
         | 
| 24 24 | 
             
            end
         | 
| @@ -4,16 +4,21 @@ module EvilEvents::Core::Broadcasting | |
| 4 4 | 
             
              class Adapters
         | 
| 5 5 | 
             
                # @api public
         | 
| 6 6 | 
             
                # @since 0.1.0
         | 
| 7 | 
            -
                 | 
| 7 | 
            +
                module MemoryAsync
         | 
| 8 8 | 
             
                  # @since 0.1.0
         | 
| 9 | 
            -
                   | 
| 9 | 
            +
                  AsyncTask = ::Thread
         | 
| 10 10 |  | 
| 11 | 
            -
                   | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
                     | 
| 11 | 
            +
                  class << self
         | 
| 12 | 
            +
                    # @since 0.1.0
         | 
| 13 | 
            +
                    include Dispatcher::Mixin
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                    # @param event [EvilEvents::Core::Events::AbstractEvent]
         | 
| 16 | 
            +
                    # @return void
         | 
| 17 | 
            +
                    #
         | 
| 18 | 
            +
                    # @since 0.1.0
         | 
| 19 | 
            +
                    def call(event)
         | 
| 20 | 
            +
                      AsyncTask.new { dispatch(event) }
         | 
| 21 | 
            +
                    end
         | 
| 17 22 | 
             
                  end
         | 
| 18 23 | 
             
                end
         | 
| 19 24 | 
             
              end
         | 
| @@ -4,16 +4,18 @@ module EvilEvents::Core::Broadcasting | |
| 4 4 | 
             
              class Adapters
         | 
| 5 5 | 
             
                # @api public
         | 
| 6 6 | 
             
                # @since 0.1.0
         | 
| 7 | 
            -
                 | 
| 8 | 
            -
                   | 
| 9 | 
            -
             | 
| 7 | 
            +
                module MemorySync
         | 
| 8 | 
            +
                  class << self
         | 
| 9 | 
            +
                    # @since 0.1.0
         | 
| 10 | 
            +
                    include Dispatcher::Mixin
         | 
| 10 11 |  | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 12 | 
            +
                    # @param event [EvilEvents::Core::Events::AbstractEvent]
         | 
| 13 | 
            +
                    # @return void
         | 
| 14 | 
            +
                    #
         | 
| 15 | 
            +
                    # @since 0.1.0
         | 
| 16 | 
            +
                    def call(event)
         | 
| 17 | 
            +
                      dispatch(event)
         | 
| 18 | 
            +
                    end
         | 
| 17 19 | 
             
                  end
         | 
| 18 20 | 
             
                end
         | 
| 19 21 | 
             
              end
         | 
| @@ -5,7 +5,7 @@ module EvilEvents::Core::Broadcasting | |
| 5 5 | 
             
              class Adapters
         | 
| 6 6 | 
             
                extend EvilEvents::Shared::DependencyContainer::Mixin
         | 
| 7 7 |  | 
| 8 | 
            -
                register | 
| 9 | 
            -
                register | 
| 8 | 
            +
                register(:memory_sync)  { Adapters::MemorySync }
         | 
| 9 | 
            +
                register(:memory_async) { Adapters::MemoryAsync }
         | 
| 10 10 | 
             
              end
         | 
| 11 11 | 
             
            end
         | 
| @@ -10,7 +10,7 @@ module EvilEvents::Core::Broadcasting | |
| 10 10 | 
             
                  #
         | 
| 11 11 | 
             
                  # @since 0.1.0
         | 
| 12 12 | 
             
                  def dispatch(event) # Broadcast
         | 
| 13 | 
            -
                    EvilEvents::BootPoint | 
| 13 | 
            +
                    EvilEvents::BootPoint[:event_system].manager_of_event(event).notify(event)
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 | 
             
                end
         | 
| 16 16 | 
             
              end
         | 
| @@ -7,11 +7,18 @@ module EvilEvents::Core::Broadcasting | |
| 7 7 | 
             
                # @since 0.1.0
         | 
| 8 8 | 
             
                include EvilEvents::Core::ActivityLogging
         | 
| 9 9 |  | 
| 10 | 
            +
                # @since 0.1.0
         | 
| 11 | 
            +
                EmitterError = Class.new(StandardError)
         | 
| 12 | 
            +
                # @since 0.1.0
         | 
| 13 | 
            +
                IncorrectEventError = Class.new(EmitterError)
         | 
| 14 | 
            +
             | 
| 10 15 | 
             
                # @param event [EvilEvents::Core::Events::AbstractEvent]
         | 
| 16 | 
            +
                # @raise [IncorrectEventError]
         | 
| 11 17 | 
             
                # @return void
         | 
| 12 18 | 
             
                #
         | 
| 13 19 | 
             
                # @since 0.1.0
         | 
| 14 20 | 
             
                def emit(event)
         | 
| 21 | 
            +
                  raise IncorrectEventError unless event.is_a?(EvilEvents::Core::Events::AbstractEvent)
         | 
| 15 22 | 
             
                  log_emitter_activity(event)
         | 
| 16 23 | 
             
                  event.adapter.call(event)
         | 
| 17 24 | 
             
                end
         | 
| @@ -22,7 +29,7 @@ module EvilEvents::Core::Broadcasting | |
| 22 29 | 
             
                #
         | 
| 23 30 | 
             
                # @since 0.1.0
         | 
| 24 31 | 
             
                def raw_emit(event_type, **event_attributes)
         | 
| 25 | 
            -
                  event_object = EvilEvents::BootPoint | 
| 32 | 
            +
                  event_object = EvilEvents::BootPoint[:event_system].resolve_event_object(
         | 
| 26 33 | 
             
                    event_type,
         | 
| 27 34 | 
             
                    **event_attributes
         | 
| 28 35 | 
             
                  )
         | 
| @@ -39,7 +46,8 @@ module EvilEvents::Core::Broadcasting | |
| 39 46 | 
             
                def log_emitter_activity(event)
         | 
| 40 47 | 
             
                  activity = "EventEmitted(#{event.adapter_name})"
         | 
| 41 48 | 
             
                  message  = "Type: #{event.type} :: Payload: #{event.payload}"
         | 
| 42 | 
            -
             | 
| 49 | 
            +
             | 
| 50 | 
            +
                  log_activity(activity: activity, message: message)
         | 
| 43 51 | 
             
                end
         | 
| 44 52 | 
             
              end
         | 
| 45 53 | 
             
            end
         | 
| @@ -4,7 +4,7 @@ module EvilEvents::Core | |
| 4 4 | 
             
              # @since 0.1.0
         | 
| 5 5 | 
             
              module Broadcasting
         | 
| 6 6 | 
             
                require_relative 'broadcasting/dispatcher'
         | 
| 7 | 
            -
                require_relative 'broadcasting/dispatcher/ | 
| 7 | 
            +
                require_relative 'broadcasting/dispatcher/mixin'
         | 
| 8 8 | 
             
                require_relative 'broadcasting/adapters'
         | 
| 9 9 | 
             
                require_relative 'broadcasting/adapters/memory_sync'
         | 
| 10 10 | 
             
                require_relative 'broadcasting/adapters/memory_async'
         | 
| @@ -18,12 +18,15 @@ module EvilEvents::Core::Events | |
| 18 18 | 
             
                # @since 0.1.0
         | 
| 19 19 | 
             
                include EventExtensions::Serializable
         | 
| 20 20 | 
             
                # @since 0.1.0
         | 
| 21 | 
            +
                include EventExtensions::Emittable
         | 
| 22 | 
            +
                # @since 0.1.0
         | 
| 21 23 | 
             
                extend EvilEvents::Shared::CombinedContextMixin
         | 
| 22 24 |  | 
| 23 25 | 
             
                # @param payload_attributes [Hash]
         | 
| 24 26 | 
             
                #
         | 
| 25 27 | 
             
                # @since 0.1.0
         | 
| 26 28 | 
             
                def initialize(**payload_attributes)
         | 
| 29 | 
            +
                  @uuid    = SecureRandom.uuid # TODO: cover with a spec (uuid belongs to metadata)
         | 
| 27 30 | 
             
                  @payload = payload_class.new(**payload_attributes)
         | 
| 28 31 | 
             
                end
         | 
| 29 32 |  | 
| @@ -38,7 +41,7 @@ module EvilEvents::Core::Events | |
| 38 41 | 
             
                #
         | 
| 39 42 | 
             
                # @since 0.1.0
         | 
| 40 43 | 
             
                def emit
         | 
| 41 | 
            -
                  EvilEvents::BootPoint | 
| 44 | 
            +
                  EvilEvents::BootPoint[:event_system].emit(self)
         | 
| 42 45 | 
             
                end
         | 
| 43 46 | 
             
              end
         | 
| 44 47 | 
             
            end
         | 
| @@ -7,7 +7,7 @@ module EvilEvents::Core::Events | |
| 7 7 | 
             
                class << self
         | 
| 8 8 | 
             
                  # @param event_type [String]
         | 
| 9 9 | 
             
                  # @raise [EvilEvents::Core::Events::ManagerRegistry::AlreadyManagedEventClassError]
         | 
| 10 | 
            -
                  # @return [AbstractEvent]
         | 
| 10 | 
            +
                  # @return [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 11 11 | 
             
                  #
         | 
| 12 12 | 
             
                  # @since 0.1.0
         | 
| 13 13 | 
             
                  def create_abstract(event_type)
         | 
| @@ -16,15 +16,11 @@ module EvilEvents::Core::Events | |
| 16 16 |  | 
| 17 17 | 
             
                      class << klass
         | 
| 18 18 | 
             
                        def inherited(child_class)
         | 
| 19 | 
            -
                           | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
                           | 
| 23 | 
            -
             | 
| 24 | 
            -
                            raise
         | 
| 25 | 
            -
                          end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                          super
         | 
| 19 | 
            +
                          child_class.type(type)
         | 
| 20 | 
            +
                          child_class.manage!
         | 
| 21 | 
            +
                        rescue EvilEvents::Core::Events::ManagerRegistry::AlreadyManagedEventClassError
         | 
| 22 | 
            +
                          EvilEvents::BootPoint[:event_system].unregister_event_class(child_class)
         | 
| 23 | 
            +
                          raise
         | 
| 28 24 | 
             
                        end
         | 
| 29 25 | 
             
                      end
         | 
| 30 26 | 
             
                    end
         | 
| @@ -34,7 +30,7 @@ module EvilEvents::Core::Events | |
| 34 30 | 
             
                  # @param event_class_definitions [Proc]
         | 
| 35 31 | 
             
                  # @yield [AbstractEvent]
         | 
| 36 32 | 
             
                  # @raise [EvilEvents::Core::Events::ManagerRegistry::AlreadyManagedEventClassError]
         | 
| 37 | 
            -
                  # @return [AbstractEvent]
         | 
| 33 | 
            +
                  # @return [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 38 34 | 
             
                  #
         | 
| 39 35 | 
             
                  # @since 0.1.0
         | 
| 40 36 | 
             
                  def create(event_type, &event_class_definitions)
         | 
| @@ -44,7 +40,7 @@ module EvilEvents::Core::Events | |
| 44 40 | 
             
                        klass.manage!
         | 
| 45 41 | 
             
                        klass.evaluate(&event_class_definitions) if block_given?
         | 
| 46 42 | 
             
                      rescue EvilEvents::Core::Events::ManagerRegistry::AlreadyManagedEventClassError
         | 
| 47 | 
            -
                        EvilEvents::BootPoint | 
| 43 | 
            +
                        EvilEvents::BootPoint[:event_system].unregister_event_class(klass)
         | 
| 48 44 | 
             
                        raise
         | 
| 49 45 | 
             
                      end
         | 
| 50 46 | 
             
                    end
         | 
| @@ -35,14 +35,14 @@ module EvilEvents::Core::Events::EventExtensions | |
| 35 35 | 
             
                  # @since 0.1.0
         | 
| 36 36 | 
             
                  def adapter(identifier = nil)
         | 
| 37 37 | 
             
                    @adapter_identifier = identifier if identifier
         | 
| 38 | 
            -
                    EvilEvents::BootPoint | 
| 38 | 
            +
                    EvilEvents::BootPoint[:event_system].resolve_adapter(adapter_name)
         | 
| 39 39 | 
             
                  end
         | 
| 40 40 |  | 
| 41 41 | 
             
                  # @return [Symbol, String]
         | 
| 42 42 | 
             
                  #
         | 
| 43 43 | 
             
                  # @since 0.1.0
         | 
| 44 44 | 
             
                  def adapter_name
         | 
| 45 | 
            -
                    @adapter_identifier || EvilEvents::BootPoint | 
| 45 | 
            +
                    @adapter_identifier || EvilEvents::BootPoint[:config].adapter.default
         | 
| 46 46 | 
             
                  end
         | 
| 47 47 | 
             
                end
         | 
| 48 48 | 
             
              end
         | 
| @@ -27,7 +27,7 @@ module EvilEvents::Core::Events::EventExtensions | |
| 27 27 | 
             
                  #
         | 
| 28 28 | 
             
                  # @since 0.1.0
         | 
| 29 29 | 
             
                  def observe(raw_subscriber, delegator: nil)
         | 
| 30 | 
            -
                    EvilEvents::BootPoint | 
| 30 | 
            +
                    EvilEvents::BootPoint[:event_system].observe(self, raw_subscriber, delegator)
         | 
| 31 31 | 
             
                  end
         | 
| 32 32 |  | 
| 33 33 | 
             
                  # @param delegator [Symbol, String, NilClass]
         | 
| @@ -35,14 +35,14 @@ module EvilEvents::Core::Events::EventExtensions | |
| 35 35 | 
             
                  # @since 0.1.0
         | 
| 36 36 | 
             
                  def default_delegator(delegator = nil)
         | 
| 37 37 | 
             
                    @default_delegator = delegator if delegator
         | 
| 38 | 
            -
                    @default_delegator || EvilEvents::BootPoint | 
| 38 | 
            +
                    @default_delegator || EvilEvents::BootPoint[:config].subscriber.default_delegator
         | 
| 39 39 | 
             
                  end
         | 
| 40 40 |  | 
| 41 41 | 
             
                  # @return [Array]
         | 
| 42 42 | 
             
                  #
         | 
| 43 43 | 
             
                  # @since 0.1.0
         | 
| 44 44 | 
             
                  def observers
         | 
| 45 | 
            -
                    EvilEvents::BootPoint | 
| 45 | 
            +
                    EvilEvents::BootPoint[:event_system].observers(self)
         | 
| 46 46 | 
             
                  end
         | 
| 47 47 | 
             
                end
         | 
| 48 48 | 
             
              end
         | 
| @@ -10,6 +10,7 @@ module EvilEvents::Core::Events::EventExtensions | |
| 10 10 | 
             
                def serialize_to_hash
         | 
| 11 11 | 
             
                  EvilEvents::Core::Events::Serializers[:hash].serialize(self)
         | 
| 12 12 | 
             
                end
         | 
| 13 | 
            +
                alias_method :dump_to_hash, :serialize_to_hash
         | 
| 13 14 |  | 
| 14 15 | 
             
                # @return [String]
         | 
| 15 16 | 
             
                #
         | 
| @@ -17,5 +18,6 @@ module EvilEvents::Core::Events::EventExtensions | |
| 17 18 | 
             
                def serialize_to_json
         | 
| 18 19 | 
             
                  EvilEvents::Core::Events::Serializers[:json].serialize(self)
         | 
| 19 20 | 
             
                end
         | 
| 21 | 
            +
                alias_method :dump_to_json, :serialize_to_json
         | 
| 20 22 | 
             
              end
         | 
| 21 23 | 
             
            end
         | 
| @@ -4,12 +4,22 @@ module EvilEvents::Core::Events | |
| 4 4 | 
             
              # @api private
         | 
| 5 5 | 
             
              # @since 0.1.0
         | 
| 6 6 | 
             
              module ManagerFactory
         | 
| 7 | 
            +
                # @since 0.1.0
         | 
| 8 | 
            +
                ManagerFactoryError = Class.new(StandardError)
         | 
| 9 | 
            +
                # @sicne 0.1.0
         | 
| 10 | 
            +
                IncorrectEventClassError = Class.new(ManagerFactoryError)
         | 
| 11 | 
            +
             | 
| 7 12 | 
             
                class << self
         | 
| 8 13 | 
             
                  # @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 14 | 
            +
                  # @raise [IncorrectEventClassError]
         | 
| 9 15 | 
             
                  # @return [EvilEvents::Core::Events::Manager]
         | 
| 10 16 | 
             
                  #
         | 
| 11 17 | 
             
                  # @since 0.1.0
         | 
| 12 18 | 
             
                  def create(event_class)
         | 
| 19 | 
            +
                    unless event_class.is_a?(Class) && event_class < EvilEvents::Core::Events::AbstractEvent
         | 
| 20 | 
            +
                      raise IncorrectEventClassError
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
             | 
| 13 23 | 
             
                    Manager.new(event_class)
         | 
| 14 24 | 
             
                  end
         | 
| 15 25 | 
             
                end
         | 
| @@ -29,7 +29,7 @@ class EvilEvents::Core::Events::Serializers | |
| 29 29 | 
             
                  raise DeserializationError unless event_type && event_payload
         | 
| 30 30 | 
             
                  raise DeserializationError unless event_payload.is_a?(::Hash)
         | 
| 31 31 |  | 
| 32 | 
            -
                  EvilEvents::BootPoint | 
| 32 | 
            +
                  EvilEvents::BootPoint[:event_system].resolve_event_object(
         | 
| 33 33 | 
             
                    event_type, symbolized_event_payload(event_payload)
         | 
| 34 34 | 
             
                  )
         | 
| 35 35 | 
             
                end
         | 
| @@ -34,7 +34,7 @@ class EvilEvents::Core::Events::Serializers | |
| 34 34 | 
             
                    raise DeserializationError
         | 
| 35 35 | 
             
                  end
         | 
| 36 36 |  | 
| 37 | 
            -
                  EvilEvents::BootPoint | 
| 37 | 
            +
                  EvilEvents::BootPoint[:event_system].resolve_event_object(event_type, event_payload)
         | 
| 38 38 | 
             
                end
         | 
| 39 39 | 
             
              end
         | 
| 40 40 |  | 
| @@ -17,9 +17,9 @@ class EvilEvents::Core::Events::Subscriber | |
| 17 17 | 
             
                def subscribe_to(event_type, delegator: nil)
         | 
| 18 18 | 
             
                  case event_type
         | 
| 19 19 | 
             
                  when Class
         | 
| 20 | 
            -
                    EvilEvents::BootPoint | 
| 20 | 
            +
                    EvilEvents::BootPoint[:event_system].observe(event_type, self, delegator)
         | 
| 21 21 | 
             
                  when String
         | 
| 22 | 
            -
                    EvilEvents::BootPoint | 
| 22 | 
            +
                    EvilEvents::BootPoint[:event_system].raw_observe(event_type, self, delegator)
         | 
| 23 23 | 
             
                  else
         | 
| 24 24 | 
             
                    raise IncompatibleEventAttrTypeError
         | 
| 25 25 | 
             
                  end
         | 
| @@ -13,7 +13,7 @@ module EvilEvents::Core::Events | |
| 13 13 | 
             
                # @param delegator_resolver [EvilEvents::Shared::DelegatorResolver]
         | 
| 14 14 | 
             
                #
         | 
| 15 15 | 
             
                # @since 0.1.0
         | 
| 16 | 
            -
                def initialize(subscriber, delegator_resolver)
         | 
| 16 | 
            +
                def initialize(subscriber, delegator_resolver = default_resolver)
         | 
| 17 17 | 
             
                  @subscriber = subscriber
         | 
| 18 18 | 
             
                  @delegator_resolver = delegator_resolver
         | 
| 19 19 | 
             
                end
         | 
| @@ -39,5 +39,15 @@ module EvilEvents::Core::Events | |
| 39 39 | 
             
                def delegator
         | 
| 40 40 | 
             
                  @delegator ||= delegator_resolver.delegator
         | 
| 41 41 | 
             
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                private
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                # @return [EvilEvents::Shared::DelegatorResolver]
         | 
| 46 | 
            +
                #
         | 
| 47 | 
            +
                # @since 0.1.0
         | 
| 48 | 
            +
                def default_resolver
         | 
| 49 | 
            +
                  delegation = -> { EvilEvents::BootPoint[:config].subscriber.default_delegator }
         | 
| 50 | 
            +
                  EvilEvents::Shared::DelegatorResolver.new(delegation)
         | 
| 51 | 
            +
                end
         | 
| 42 52 | 
             
              end
         | 
| 43 53 | 
             
            end
         | 
| @@ -13,6 +13,7 @@ module EvilEvents::Core | |
| 13 13 | 
             
                require_relative 'events/event_extensions/adapter_customizable'
         | 
| 14 14 | 
             
                require_relative 'events/event_extensions/observable'
         | 
| 15 15 | 
             
                require_relative 'events/event_extensions/serializable'
         | 
| 16 | 
            +
                require_relative 'events/event_extensions/emittable'
         | 
| 16 17 | 
             
                require_relative 'events/abstract_event'
         | 
| 17 18 | 
             
                require_relative 'events/manager'
         | 
| 18 19 | 
             
                require_relative 'events/manager/subscriber_list'
         | 
    
        data/lib/evil_events/core.rb
    CHANGED
    
    
| @@ -81,6 +81,8 @@ module EvilEvents | |
| 81 81 | 
             
                      __outer_context__.public_send(method_name, *arguments, &block)
         | 
| 82 82 | 
             
                    when __required_context__.respond_to?(method_name)
         | 
| 83 83 | 
             
                      __required_context__.public_send(method_name, *arguments, &block)
         | 
| 84 | 
            +
                    when ::Kernel.respond_to?(method_name)
         | 
| 85 | 
            +
                      ::Kernel.public_send(method_name, *arguments, &block)
         | 
| 84 86 | 
             
                    else
         | 
| 85 87 | 
             
                      super
         | 
| 86 88 | 
             
                    end
         | 
    
        data/lib/evil_events/shared.rb
    CHANGED
    
    | @@ -1,16 +1,17 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            module EvilEvents
         | 
| 4 | 
            +
              # @api public
         | 
| 4 5 | 
             
              # @since 0.1.0
         | 
| 5 6 | 
             
              module Shared
         | 
| 6 | 
            -
                require_relative 'shared/ | 
| 7 | 
            +
                require_relative 'shared/types'
         | 
| 7 8 | 
             
                require_relative 'shared/logger'
         | 
| 8 | 
            -
                require_relative 'shared/configurable'
         | 
| 9 | 
            -
                require_relative 'shared/dependency_container'
         | 
| 10 9 | 
             
                require_relative 'shared/structure'
         | 
| 11 | 
            -
                require_relative 'shared/ | 
| 10 | 
            +
                require_relative 'shared/configurable'
         | 
| 12 11 | 
             
                require_relative 'shared/combined_context'
         | 
| 13 | 
            -
                require_relative 'shared/combined_context_mixin'
         | 
| 14 12 | 
             
                require_relative 'shared/delegator_resolver'
         | 
| 13 | 
            +
                require_relative 'shared/dependency_container'
         | 
| 14 | 
            +
                require_relative 'shared/mockable_class_builder'
         | 
| 15 | 
            +
                require_relative 'shared/combined_context_mixin'
         | 
| 15 16 | 
             
              end
         | 
| 16 17 | 
             
            end
         | 
| @@ -0,0 +1,42 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class EvilEvents::System
         | 
| 4 | 
            +
              # @api private
         | 
| 5 | 
            +
              # @since 0.1.0
         | 
| 6 | 
            +
              class Broadcaster
         | 
| 7 | 
            +
                # @return [EvilEvents::Core::Broadcasting::Emitter]
         | 
| 8 | 
            +
                #
         | 
| 9 | 
            +
                # @since 0.1.0
         | 
| 10 | 
            +
                attr_reader :event_emitter
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                # @since 0.1.0
         | 
| 13 | 
            +
                def initialize
         | 
| 14 | 
            +
                  @event_emitter = EvilEvents::Core::Broadcasting::Emitter.new
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                # @param event [EvilEvents::Core::Events::AbstractEvent]
         | 
| 18 | 
            +
                # @return void
         | 
| 19 | 
            +
                #
         | 
| 20 | 
            +
                # @since 0.1.0
         | 
| 21 | 
            +
                def emit(event)
         | 
| 22 | 
            +
                  event_emitter.emit(event)
         | 
| 23 | 
            +
                end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                # @param event_type [String]
         | 
| 26 | 
            +
                # @param event_attributes [Hash]
         | 
| 27 | 
            +
                # @return void
         | 
| 28 | 
            +
                #
         | 
| 29 | 
            +
                # @since 0.1.0
         | 
| 30 | 
            +
                def raw_emit(event_type, **event_attributes)
         | 
| 31 | 
            +
                  event_emitter.raw_emit(event_type, **event_attributes)
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                # @param adapter_name [Symbol, String]
         | 
| 35 | 
            +
                # @return [EvilEvents::Core::Broadcasting::Dispatcher::Dispatchable]
         | 
| 36 | 
            +
                #
         | 
| 37 | 
            +
                # @since 0.1.0
         | 
| 38 | 
            +
                def resolve_adapter(adapter_name)
         | 
| 39 | 
            +
                  EvilEvents::Core::Broadcasting::Adapters.resolve(adapter_name)
         | 
| 40 | 
            +
                end
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class EvilEvents::System
         | 
| 4 | 
            +
              # @api private
         | 
| 5 | 
            +
              # @since 0.1.0
         | 
| 6 | 
            +
              module EventBuilder
         | 
| 7 | 
            +
                class << self
         | 
| 8 | 
            +
                  # @param event_type [String]
         | 
| 9 | 
            +
                  # @param event_class_definitions [Proc]
         | 
| 10 | 
            +
                  # @return [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 11 | 
            +
                  #
         | 
| 12 | 
            +
                  # @since 0.1.0
         | 
| 13 | 
            +
                  def define_event_class(event_type, &event_class_definitions)
         | 
| 14 | 
            +
                    EvilEvents::Core::Events::EventClassFactory.create(
         | 
| 15 | 
            +
                      event_type, &event_class_definitions
         | 
| 16 | 
            +
                    )
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  # @param event_type [String]
         | 
| 20 | 
            +
                  # @return [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 21 | 
            +
                  #
         | 
| 22 | 
            +
                  # @since 0.1.0
         | 
| 23 | 
            +
                  def define_abstract_event_class(event_type)
         | 
| 24 | 
            +
                    EvilEvents::Core::Events::EventClassFactory.create_abstract(
         | 
| 25 | 
            +
                      event_type
         | 
| 26 | 
            +
                    )
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,95 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class EvilEvents::System
         | 
| 4 | 
            +
              # @api private
         | 
| 5 | 
            +
              # @since 0.1.0
         | 
| 6 | 
            +
              class EventManager
         | 
| 7 | 
            +
                # @return [EvilEvents::Core::Events::ManagerRegistry]
         | 
| 8 | 
            +
                #
         | 
| 9 | 
            +
                # @since 0.1.0
         | 
| 10 | 
            +
                attr_reader :manager_registry
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def initialize
         | 
| 13 | 
            +
                  @manager_registry = EvilEvents::Core::Events::ManagerRegistry.new
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                # @param event_class [Class{Evilevents::Core::Events::AbstractEvent}]
         | 
| 17 | 
            +
                # @param raw_subscriber [Object]
         | 
| 18 | 
            +
                # @param delegator [String, Symbol, NilClass]
         | 
| 19 | 
            +
                # @return void
         | 
| 20 | 
            +
                #
         | 
| 21 | 
            +
                # @since 0.1.0
         | 
| 22 | 
            +
                def observe(event_class, raw_subscriber, delegator)
         | 
| 23 | 
            +
                  manager_registry.manager_of_event(event_class)
         | 
| 24 | 
            +
                                  .observe(raw_subscriber, delegator)
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                # @param event_type [String, Symbol]
         | 
| 28 | 
            +
                # @param raw_subscriber [Object]
         | 
| 29 | 
            +
                # @param delegator [String, Symbol, NilClass]
         | 
| 30 | 
            +
                # @return void
         | 
| 31 | 
            +
                #
         | 
| 32 | 
            +
                # @since 0.1.0
         | 
| 33 | 
            +
                def raw_observe(event_type, raw_subscriber, delegator)
         | 
| 34 | 
            +
                  manager_registry.manager_of_event_type(event_type)
         | 
| 35 | 
            +
                                  .observe(raw_subscriber, delegator)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                # @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 39 | 
            +
                # @return [Array<EvilEvents::Core::Events::Subscriber>]
         | 
| 40 | 
            +
                #
         | 
| 41 | 
            +
                # @since 0.1.0
         | 
| 42 | 
            +
                def observers(event_class)
         | 
| 43 | 
            +
                  manager_registry.manager_of_event(event_class).subscribers
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                # @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 47 | 
            +
                # @return void
         | 
| 48 | 
            +
                #
         | 
| 49 | 
            +
                # @since 0.1.0
         | 
| 50 | 
            +
                def register_event_class(event_class)
         | 
| 51 | 
            +
                  manager_registry.register_with(event_class)
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                # @param event_class [Class{EvilEvents::Core::events::AbstractEvent}]
         | 
| 55 | 
            +
                # @return void
         | 
| 56 | 
            +
                #
         | 
| 57 | 
            +
                # @since 0.1.0
         | 
| 58 | 
            +
                def unregister_event_class(event_class)
         | 
| 59 | 
            +
                  manager_registry.unregister_with(event_class)
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                # @param event [EvilEvents::Core::Events::AbstractEvent]
         | 
| 63 | 
            +
                # @return [EvilEvents::Core::Events::Manager]
         | 
| 64 | 
            +
                #
         | 
| 65 | 
            +
                # @since 0.1.0
         | 
| 66 | 
            +
                def manager_of_event(event)
         | 
| 67 | 
            +
                  manager_registry.manager_of_event(event.class)
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                # @param event_type [String]
         | 
| 71 | 
            +
                # @return [EvilEvents::Core::Events::Manager]
         | 
| 72 | 
            +
                #
         | 
| 73 | 
            +
                # @since 0.1.0
         | 
| 74 | 
            +
                def manager_of_event_type(event_type)
         | 
| 75 | 
            +
                  manager_registry.manager_of_event_type(event_type)
         | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                # @param event_type [String]
         | 
| 79 | 
            +
                # @param event_attributes [Hash]
         | 
| 80 | 
            +
                # @return [EvilEvents::Core::Events::AbstractEvent]
         | 
| 81 | 
            +
                #
         | 
| 82 | 
            +
                # @since 0.1.0
         | 
| 83 | 
            +
                def resolve_event_object(event_type, **event_attributes)
         | 
| 84 | 
            +
                  manager_of_event_type(event_type).event_class.new(**event_attributes)
         | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                # @param event_class [EvilEvents::Core::Events::AbstractEvent]
         | 
| 88 | 
            +
                # @return [Boolean]
         | 
| 89 | 
            +
                #
         | 
| 90 | 
            +
                # @since 0.1.0
         | 
| 91 | 
            +
                def managed_event?(event_class)
         | 
| 92 | 
            +
                  manager_registry.managed_event?(event_class)
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
            end
         | 
| @@ -9,11 +9,11 @@ class EvilEvents::System | |
| 9 9 | 
             
              class Mock
         | 
| 10 10 | 
             
                # @see EvilEvents::System
         | 
| 11 11 | 
             
                # @since 0.1.0
         | 
| 12 | 
            -
                attr_reader : | 
| 12 | 
            +
                attr_reader :broadcaster
         | 
| 13 13 |  | 
| 14 14 | 
             
                # @see EvilEvents::System
         | 
| 15 15 | 
             
                # @since 0.1.0
         | 
| 16 | 
            -
                attr_reader : | 
| 16 | 
            +
                attr_reader :event_manager
         | 
| 17 17 |  | 
| 18 18 | 
             
                # @see EvilEvents::System
         | 
| 19 19 | 
             
                # @since 0.1.0
         | 
| @@ -49,7 +49,7 @@ class EvilEvents::System | |
| 49 49 |  | 
| 50 50 | 
             
                # @see EvilEvents::System
         | 
| 51 51 | 
             
                # @since 0.1.0
         | 
| 52 | 
            -
                def  | 
| 52 | 
            +
                def manager_of_event(event); end
         | 
| 53 53 |  | 
| 54 54 | 
             
                # @see EvilEvents::System
         | 
| 55 55 | 
             
                # @since 0.1.0
         | 
| @@ -66,5 +66,9 @@ class EvilEvents::System | |
| 66 66 | 
             
                # @see EvilEvents::System
         | 
| 67 67 | 
             
                # @since 0.1.0
         | 
| 68 68 | 
             
                def define_abstract_event_class(event_type); end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                # @see EvilEvents::System
         | 
| 71 | 
            +
                # @since 0.1.0
         | 
| 72 | 
            +
                def managed_event?(event_class); end
         | 
| 69 73 | 
             
              end
         | 
| 70 74 | 
             
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class EvilEvents::System
         | 
| 4 | 
            +
              # @api private
         | 
| 5 | 
            +
              # @since 0.1.0
         | 
| 6 | 
            +
              module Mocking
         | 
| 7 | 
            +
                class << self
         | 
| 8 | 
            +
                  # @param base_class [EvilEvents::System]
         | 
| 9 | 
            +
                  #
         | 
| 10 | 
            +
                  # @since 0.1.0
         | 
| 11 | 
            +
                  def included(base_class)
         | 
| 12 | 
            +
                    base_class.extend(ClassMethods)
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                # @since 0.1.0
         | 
| 17 | 
            +
                module ClassMethods
         | 
| 18 | 
            +
                  # @return [EvilEvents::System::Mock]
         | 
| 19 | 
            +
                  #
         | 
| 20 | 
            +
                  # @since 0.1.0
         | 
| 21 | 
            +
                  def build_mock
         | 
| 22 | 
            +
                    Mock.new
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  # @return [EvilEvents::System]
         | 
| 26 | 
            +
                  #
         | 
| 27 | 
            +
                  # @since 0.1.0
         | 
| 28 | 
            +
                  def build_stub
         | 
| 29 | 
            +
                    new
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
    
        data/lib/evil_events/system.rb
    CHANGED
    
    | @@ -3,147 +3,56 @@ | |
| 3 3 | 
             
            # @api private
         | 
| 4 4 | 
             
            # @since 0.1.0
         | 
| 5 5 | 
             
            class EvilEvents::System
         | 
| 6 | 
            -
               | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
                  Mock.new
         | 
| 12 | 
            -
                end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                # @return [EvilEvents::System]
         | 
| 15 | 
            -
                #
         | 
| 16 | 
            -
                # @since 0.1.0
         | 
| 17 | 
            -
                def build_stub
         | 
| 18 | 
            -
                  new
         | 
| 19 | 
            -
                end
         | 
| 20 | 
            -
              end
         | 
| 6 | 
            +
              require_relative 'system/mock'
         | 
| 7 | 
            +
              require_relative 'system/mocking'
         | 
| 8 | 
            +
              require_relative 'system/broadcaster'
         | 
| 9 | 
            +
              require_relative 'system/event_builder'
         | 
| 10 | 
            +
              require_relative 'system/event_manager'
         | 
| 21 11 |  | 
| 22 12 | 
             
              # @since 0.1.0
         | 
| 23 | 
            -
               | 
| 24 | 
            -
             | 
| 13 | 
            +
              extend Forwardable
         | 
| 25 14 | 
             
              # @since 0.1.0
         | 
| 26 | 
            -
               | 
| 15 | 
            +
              include Mocking
         | 
| 27 16 |  | 
| 17 | 
            +
              # @see EvilEvents::System::Broadcaster
         | 
| 28 18 | 
             
              # @since 0.1.0
         | 
| 29 | 
            -
               | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 19 | 
            +
              def_delegators :broadcaster,
         | 
| 20 | 
            +
                             :emit,
         | 
| 21 | 
            +
                             :raw_emit,
         | 
| 22 | 
            +
                             :resolve_adapter
         | 
| 33 23 |  | 
| 34 | 
            -
              # @ | 
| 35 | 
            -
              # @param raw_subscriber [Object]
         | 
| 36 | 
            -
              # @param delegator [String, Symbol, NilClass]
         | 
| 37 | 
            -
              # @return void
         | 
| 38 | 
            -
              #
         | 
| 24 | 
            +
              # @see EvilEvents::System::EventManager
         | 
| 39 25 | 
             
              # @since 0.1.0
         | 
| 40 | 
            -
               | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 26 | 
            +
              def_delegators :event_manager,
         | 
| 27 | 
            +
                             :observe,
         | 
| 28 | 
            +
                             :raw_observe,
         | 
| 29 | 
            +
                             :observers,
         | 
| 30 | 
            +
                             :register_event_class,
         | 
| 31 | 
            +
                             :unregister_event_class,
         | 
| 32 | 
            +
                             :manager_of_event,
         | 
| 33 | 
            +
                             :manager_of_event_type,
         | 
| 34 | 
            +
                             :resolve_event_object,
         | 
| 35 | 
            +
                             :managed_event?
         | 
| 44 36 |  | 
| 45 | 
            -
              # @ | 
| 46 | 
            -
              # @param raw_subscriber [Object]
         | 
| 47 | 
            -
              # @param delegator [String, Symbol, NilClass]
         | 
| 48 | 
            -
              # @return void
         | 
| 49 | 
            -
              #
         | 
| 37 | 
            +
              # @see EvilEvents::System::EventBuilder
         | 
| 50 38 | 
             
              # @since 0.1.0
         | 
| 51 | 
            -
               | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
              end
         | 
| 39 | 
            +
              def_delegators 'EvilEvents::System::EventBuilder',
         | 
| 40 | 
            +
                             :define_event_class,
         | 
| 41 | 
            +
                             :define_abstract_event_class
         | 
| 55 42 |  | 
| 56 | 
            -
              # @ | 
| 57 | 
            -
              # @return [Array<EvilEvents::Core::Events::Subscriber>]
         | 
| 43 | 
            +
              # @return [EvilEvents::System::Broadcaster]
         | 
| 58 44 | 
             
              #
         | 
| 59 45 | 
             
              # @since 0.1.0
         | 
| 60 | 
            -
               | 
| 61 | 
            -
                manager_registry.manager_of_event(event_class).subscribers
         | 
| 62 | 
            -
              end
         | 
| 46 | 
            +
              attr_reader :broadcaster
         | 
| 63 47 |  | 
| 64 | 
            -
              # @ | 
| 65 | 
            -
              # @return void
         | 
| 48 | 
            +
              # @return [EvilEvents::System::EventManager]
         | 
| 66 49 | 
             
              #
         | 
| 67 50 | 
             
              # @since 0.1.0
         | 
| 68 | 
            -
               | 
| 69 | 
            -
                event_emitter.emit(event)
         | 
| 70 | 
            -
              end
         | 
| 51 | 
            +
              attr_reader :event_manager
         | 
| 71 52 |  | 
| 72 | 
            -
              # @param event_type [String]
         | 
| 73 | 
            -
              # @param event_attributes [Hash]
         | 
| 74 | 
            -
              # @return void
         | 
| 75 | 
            -
              #
         | 
| 76 53 | 
             
              # @since 0.1.0
         | 
| 77 | 
            -
              def  | 
| 78 | 
            -
                 | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
              # @param adapter_name [Symbol, String]
         | 
| 82 | 
            -
              # @return [EvilEvents::Core::Broadcasting::Dispatcher::Dispatchable]
         | 
| 83 | 
            -
              #
         | 
| 84 | 
            -
              # @since 0.1.0
         | 
| 85 | 
            -
              def resolve_adapter(adapter_name)
         | 
| 86 | 
            -
                EvilEvents::Core::Broadcasting::Adapters.resolve(adapter_name)
         | 
| 87 | 
            -
              end
         | 
| 88 | 
            -
             | 
| 89 | 
            -
              # @param event_class [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 90 | 
            -
              # @return void
         | 
| 91 | 
            -
              #
         | 
| 92 | 
            -
              # @since 0.1.0
         | 
| 93 | 
            -
              def register_event_class(event_class)
         | 
| 94 | 
            -
                manager_registry.register_with(event_class)
         | 
| 95 | 
            -
              end
         | 
| 96 | 
            -
             | 
| 97 | 
            -
              # @param event_class [Class{EvilEvents::Core::events::AbstractEvent}]
         | 
| 98 | 
            -
              # @return void
         | 
| 99 | 
            -
              #
         | 
| 100 | 
            -
              # @since 0.1.0
         | 
| 101 | 
            -
              def unregister_event_class(event_class)
         | 
| 102 | 
            -
                manager_registry.unregister_with(event_class)
         | 
| 103 | 
            -
              end
         | 
| 104 | 
            -
             | 
| 105 | 
            -
              # @param event [EvilEvents::Core::Events::AbstractEvent]
         | 
| 106 | 
            -
              # @return [EvilEvents::Core::Events::Manager]
         | 
| 107 | 
            -
              #
         | 
| 108 | 
            -
              # @since 0.1.0
         | 
| 109 | 
            -
              def manager_of_event(event)
         | 
| 110 | 
            -
                manager_registry.manager_of_event(event.class)
         | 
| 111 | 
            -
              end
         | 
| 112 | 
            -
             | 
| 113 | 
            -
              # @param event_type [String]
         | 
| 114 | 
            -
              # @return [EvilEvents::Core::Events::Manager]
         | 
| 115 | 
            -
              #
         | 
| 116 | 
            -
              # @since 0.1.0
         | 
| 117 | 
            -
              def manager_of_event_type(event_type)
         | 
| 118 | 
            -
                manager_registry.manager_of_event_type(event_type)
         | 
| 119 | 
            -
              end
         | 
| 120 | 
            -
             | 
| 121 | 
            -
              # @param event_type [String]
         | 
| 122 | 
            -
              # @param event_attributes [Hash]
         | 
| 123 | 
            -
              # @return [EvilEvents::Core::Events::AbstractEvent]
         | 
| 124 | 
            -
              #
         | 
| 125 | 
            -
              # @since 0.1.0
         | 
| 126 | 
            -
              def resolve_event_object(event_type, **event_attributes)
         | 
| 127 | 
            -
                manager_of_event_type(event_type).event_class.new(**event_attributes)
         | 
| 128 | 
            -
              end
         | 
| 129 | 
            -
             | 
| 130 | 
            -
              # @param event_class_definitions [Proc]
         | 
| 131 | 
            -
              # @return [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 132 | 
            -
              #
         | 
| 133 | 
            -
              # @since 0.1.0
         | 
| 134 | 
            -
              def define_event_class(event_type, &event_class_definitions)
         | 
| 135 | 
            -
                EvilEvents::Core::Events::EventClassFactory.create(
         | 
| 136 | 
            -
                  event_type, &event_class_definitions
         | 
| 137 | 
            -
                )
         | 
| 138 | 
            -
              end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
              # @param event_type [String]
         | 
| 141 | 
            -
              # @return [Class{EvilEvents::Core::Events::AbstractEvent}]
         | 
| 142 | 
            -
              #
         | 
| 143 | 
            -
              # @since 0.1.0
         | 
| 144 | 
            -
              def define_abstract_event_class(event_type)
         | 
| 145 | 
            -
                EvilEvents::Core::Events::EventClassFactory.create_abstract(
         | 
| 146 | 
            -
                  event_type
         | 
| 147 | 
            -
                )
         | 
| 54 | 
            +
              def initialize
         | 
| 55 | 
            +
                @broadcaster   = Broadcaster.new
         | 
| 56 | 
            +
                @event_manager = EventManager.new
         | 
| 148 57 | 
             
              end
         | 
| 149 58 | 
             
            end
         | 
    
        data/lib/evil_events/version.rb
    CHANGED
    
    
    
        data/lib/evil_events.rb
    CHANGED
    
    | @@ -4,7 +4,8 @@ require 'dry-configurable' | |
| 4 4 | 
             
            require 'dry-container'
         | 
| 5 5 | 
             
            require 'dry-struct'
         | 
| 6 6 | 
             
            require 'dry-types'
         | 
| 7 | 
            -
            require 'concurrent'
         | 
| 7 | 
            +
            require 'concurrent/array'
         | 
| 8 | 
            +
            require 'concurrent/map'
         | 
| 8 9 | 
             
            require 'logger'
         | 
| 9 10 | 
             
            require 'json'
         | 
| 10 11 |  | 
| @@ -14,7 +15,6 @@ module EvilEvents | |
| 14 15 | 
             
              require_relative 'evil_events/shared'
         | 
| 15 16 | 
             
              require_relative 'evil_events/core'
         | 
| 16 17 | 
             
              require_relative 'evil_events/system'
         | 
| 17 | 
            -
              require_relative 'evil_events/system/mock'
         | 
| 18 18 | 
             
              require_relative 'evil_events/config'
         | 
| 19 19 | 
             
              require_relative 'evil_events/boot_point'
         | 
| 20 20 | 
             
              require_relative 'evil_events/version'
         | 
| @@ -27,7 +27,7 @@ module EvilEvents | |
| 27 27 | 
             
                # @api public
         | 
| 28 28 | 
             
                # @since 0.1.0
         | 
| 29 29 | 
             
                def [](event_type)
         | 
| 30 | 
            -
                  EvilEvents::BootPoint | 
| 30 | 
            +
                  EvilEvents::BootPoint[:event_system].define_abstract_event_class(
         | 
| 31 31 | 
             
                    event_type
         | 
| 32 32 | 
             
                  )
         | 
| 33 33 | 
             
                end
         | 
| @@ -36,7 +36,7 @@ module EvilEvents | |
| 36 36 | 
             
                # @api public
         | 
| 37 37 | 
             
                # @since 0.1.0
         | 
| 38 38 | 
             
                def define_event(event_type, &event_class_definitions)
         | 
| 39 | 
            -
                  EvilEvents::BootPoint | 
| 39 | 
            +
                  EvilEvents::BootPoint[:event_system].define_event_class(
         | 
| 40 40 | 
             
                    event_type, &event_class_definitions
         | 
| 41 41 | 
             
                  )
         | 
| 42 42 | 
             
                end
         | 
| @@ -45,7 +45,7 @@ module EvilEvents | |
| 45 45 | 
             
                # @api public
         | 
| 46 46 | 
             
                # @since 0.1.0
         | 
| 47 47 | 
             
                def emit(event_type, **event_attributes)
         | 
| 48 | 
            -
                  EvilEvents::BootPoint | 
| 48 | 
            +
                  EvilEvents::BootPoint[:event_system].raw_emit(
         | 
| 49 49 | 
             
                    event_type, **event_attributes
         | 
| 50 50 | 
             
                  )
         | 
| 51 51 | 
             
                end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: evil_events
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.0rc2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Rustam Ibragimov
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2017-10- | 
| 11 | 
            +
            date: 2017-10-08 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: dry-types
         | 
| @@ -80,6 +80,20 @@ dependencies: | |
| 80 80 | 
             
                - - '='
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 82 | 
             
                    version: 1.0.5
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: coveralls
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - '='
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: 0.7.2
         | 
| 90 | 
            +
              type: :development
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - '='
         | 
| 95 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            +
                    version: 0.7.2
         | 
| 83 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 98 | 
             
              name: pry
         | 
| 85 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -108,6 +122,20 @@ dependencies: | |
| 108 122 | 
             
                - - '='
         | 
| 109 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 124 | 
             
                    version: 0.15.1
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 126 | 
            +
              name: simplecov-json
         | 
| 127 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 | 
            +
                requirements:
         | 
| 129 | 
            +
                - - '='
         | 
| 130 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 131 | 
            +
                    version: '0.2'
         | 
| 132 | 
            +
              type: :development
         | 
| 133 | 
            +
              prerelease: false
         | 
| 134 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 | 
            +
                requirements:
         | 
| 136 | 
            +
                - - '='
         | 
| 137 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 138 | 
            +
                    version: '0.2'
         | 
| 111 139 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 140 | 
             
              name: rubocop
         | 
| 113 141 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -190,6 +218,7 @@ files: | |
| 190 218 | 
             
            - ".rubocop.yml"
         | 
| 191 219 | 
             
            - ".travis.yml"
         | 
| 192 220 | 
             
            - ".yardopts"
         | 
| 221 | 
            +
            - CHANGELOG.md
         | 
| 193 222 | 
             
            - CODE_OF_CONDUCT.md
         | 
| 194 223 | 
             
            - Gemfile
         | 
| 195 224 | 
             
            - LICENSE.txt
         | 
| @@ -208,12 +237,13 @@ files: | |
| 208 237 | 
             
            - lib/evil_events/core/broadcasting/adapters/memory_async.rb
         | 
| 209 238 | 
             
            - lib/evil_events/core/broadcasting/adapters/memory_sync.rb
         | 
| 210 239 | 
             
            - lib/evil_events/core/broadcasting/dispatcher.rb
         | 
| 211 | 
            -
            - lib/evil_events/core/broadcasting/dispatcher/ | 
| 240 | 
            +
            - lib/evil_events/core/broadcasting/dispatcher/mixin.rb
         | 
| 212 241 | 
             
            - lib/evil_events/core/broadcasting/emitter.rb
         | 
| 213 242 | 
             
            - lib/evil_events/core/events.rb
         | 
| 214 243 | 
             
            - lib/evil_events/core/events/abstract_event.rb
         | 
| 215 244 | 
             
            - lib/evil_events/core/events/event_class_factory.rb
         | 
| 216 245 | 
             
            - lib/evil_events/core/events/event_extensions/adapter_customizable.rb
         | 
| 246 | 
            +
            - lib/evil_events/core/events/event_extensions/emittable.rb
         | 
| 217 247 | 
             
            - lib/evil_events/core/events/event_extensions/manageable.rb
         | 
| 218 248 | 
             
            - lib/evil_events/core/events/event_extensions/observable.rb
         | 
| 219 249 | 
             
            - lib/evil_events/core/events/event_extensions/payloadable.rb
         | 
| @@ -240,7 +270,11 @@ files: | |
| 240 270 | 
             
            - lib/evil_events/shared/structure.rb
         | 
| 241 271 | 
             
            - lib/evil_events/shared/types.rb
         | 
| 242 272 | 
             
            - lib/evil_events/system.rb
         | 
| 273 | 
            +
            - lib/evil_events/system/broadcaster.rb
         | 
| 274 | 
            +
            - lib/evil_events/system/event_builder.rb
         | 
| 275 | 
            +
            - lib/evil_events/system/event_manager.rb
         | 
| 243 276 | 
             
            - lib/evil_events/system/mock.rb
         | 
| 277 | 
            +
            - lib/evil_events/system/mocking.rb
         | 
| 244 278 | 
             
            - lib/evil_events/version.rb
         | 
| 245 279 | 
             
            homepage: https://github.com/ergosploit/evil_events
         | 
| 246 280 | 
             
            licenses:
         |