class EvilEvents::Core::Events::ManagerRegistry
@api private @since 0.1.0
Attributes
@return [Concurrent::Map]
@since 0.1.0
Public Class Methods
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 19 def initialize @managers = Concurrent::Map.new end
Public Instance Methods
@param manager [EvilEvents::Core::Events::Manager] @return [Boolean]
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 133 def include?(manager) managed_event?(manager.event_class) && manager_of_event(manager.event_class) == manager end
@param event_class [Class{EvilEvents::Core::Events::AbstractEvent}] @return [Boolean]
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 141 def managed_event?(event_class) managers.key?(event_class) end
@return [Hash]
@since 0.2.0
# File lib/evil_events/core/events/manager_registry.rb, line 148 def managed_events_map managed_events.each_with_object({}) do |event, accumulator| accumulator[event.type] = event end end
@param event_class [Class{EvilEvents::Core::Events::AbstractEvent}] @raise [EvilEvents::NonManagedEventClassError] @return [EvilEvents::Core::Events::Manager]
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 28 def manager_of_event(event_class) # NOTE: raise exceptions to simplify runtime problems managers[event_class] || (raise EvilEvents::NonManagedEventClassError) end
@param event_type [String] @return [EvilEvents::Core::Events::Manager] @see manager_of_event
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 38 def manager_of_event_type(event_type) event_class = managed_events.find do |managed_event| managed_event.type == event_type end manager_of_event(event_class) end
@param event_condition [Proc] @return [Array<EvilEvents::Core::Event::Manager>]
@since 0.2.0
# File lib/evil_events/core/events/manager_registry.rb, line 78 def managers_of_event_condition(event_condition) event_classes = managed_events.select do |managed_event| !!event_condition.call(managed_event.type) end event_classes.map { |event_class| manager_of_event(event_class) } end
@param event_pattern [Regexp] @return [Array<EvilEvents::Core::Events::Manager>]
@since 0.2.0
# File lib/evil_events/core/events/manager_registry.rb, line 66 def managers_of_event_pattern(event_pattern) event_classes = managed_events.select do |managed_event| managed_event.type.match(event_pattern) end event_classes.map { |event_class| manager_of_event(event_class) } end
@param scoped_event_type [String] @raise [EvilEvents::NonManagedEventClassError] @return [Array<EvilEvents::Core::Events::Manager>]
@api private @since 0.4.0
# File lib/evil_events/core/events/manager_registry.rb, line 52 def managers_of_scoped_event_type(scoped_event_type) scope_matcher = ScopedEventTypeMatcher.new(scoped_event_type) event_classes = managed_events.select do |managed_event| scope_matcher.match?(managed_event.type) end event_classes.map { |event_class| manager_of_event(event_class) } end
@param manager [EvilEvents::Core::Events::Manager] @raise [EvilEvents::IncorrectManagerObjectError] @raise [EvilEvents::AlreadyManagedEventClassError] @return void
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 92 def register(manager) unless manager.is_a?(EvilEvents::Core::Events::Manager) raise EvilEvents::IncorrectManagerObjectError end if potential_manager_duplicate?(manager) || !managed_event_type?(manager.event_type) managers[manager.event_class] = manager else raise EvilEvents::AlreadyManagedEventClassError end end
@param event_class [Class{EvilEvents::Core::Events::AbstractEvent}] @return void @see register
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 109 def register_with(event_class) register(ManagerFactory.create(event_class)) end
@param manager [EvilEvents::Core::Events::Manager] @return void
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 117 def unregister(manager) managers.delete_pair(manager.event_class, manager) end
@param event_class [Class{EvilEvents::Core::Events::AbstractEvent}] @return void
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 125 def unregister_with(event_class) managers.delete(event_class) end
Private Instance Methods
@param event_type [String] @return [Boolean]
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 174 def managed_event_type?(event_type) managed_event_types.include?(event_type) end
@return [Array<String>]
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 166 def managed_event_types managed_events.map(&:type) end
@return [Array<EvilEvents::Core::Events::AbstractEvent>]
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 159 def managed_events managers.keys end
@param manager [EvilEvents::Core::Events::Manager] @return [Boolean]
@since 0.1.0
# File lib/evil_events/core/events/manager_registry.rb, line 182 def potential_manager_duplicate?(manager) return false unless managed_event?(manager.event_class) manager_of_event(manager.event_class).event_type == manager.event_type end