Class: EvilEvents::Core::Events::Subscriber Private

Inherits:
Object
  • Object
show all
Defined in:
lib/evil_events/core/events/subscriber.rb,
lib/evil_events/core/events/subscriber/mixin.rb
more...

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Since:

  • 0.1.0

Constant Summary collapse

Mixin =

Since:

  • 0.1.0

EvilEvents::Shared::ClonableModuleBuilder.build do
  # @param event_types [Array<String, Class{EvilEvents::Core::Events::AbstractEvent}, Regexp>]
  # @option delegator [String, Symbol, NilClass]
  # @raise [EvilEvents::ArgumentError]
  # @return [void]
  #
  # @since 0.2.0
  def subscribe_to(*event_types, delegator: nil)
    raise EvilEvents::ArgumentError unless event_types.all? do |event_type|
      event_type.is_a?(Class)  ||
      event_type.is_a?(String) ||
      event_type.is_a?(Regexp) ||
      event_type.is_a?(Proc)
    end

    event_system = EvilEvents::Core::Bootstrap[:event_system]

    event_types.each do |event_type|
      case event_type
      when Class  then event_system.observe(event_type, self, delegator)
      when String then event_system.raw_observe(event_type, self, delegator)
      when Regexp then event_system.observe_list(event_type, self, delegator)
      when Proc   then event_system.conditional_observe(event_type, self, delegator)
      end
    end
  end

  # @param event_scopes [Array<String>]
  # @option delegator [String,Symbol,NilClass]
  # @raise [EvilEvents::ArgumentError]
  # @return [void]
  #
  # @api public
  # @since 0.4.0
  def subscribe_to_scope(*event_scopes, delegator: nil)
    raise EvilEvents::ArgumentError unless event_scopes.all? do |event_scope|
      event_scope.is_a?(String)
    end

    event_system = EvilEvents::Core::Bootstrap[:event_system]

    event_scopes.each do |event_scope|
      event_system.scoped_observe(event_scope, self, delegator)
    end
  end
end

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(subscriber, delegator_resolver = default_resolver) ⇒ Subscriber

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Subscriber.

Parameters:

Since:

  • 0.1.0

[View source]

16
17
18
19
# File 'lib/evil_events/core/events/subscriber.rb', line 16

def initialize(subscriber, delegator_resolver = default_resolver)
  @subscriber = subscriber
  @delegator_resolver = delegator_resolver
end

Instance Attribute Details

#delegator_resolverEvilEvents::Shared::DelegatorResolver (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

Since:

  • 0.1.0


10
11
12
# File 'lib/evil_events/core/events/subscriber.rb', line 10

def delegator_resolver
  @delegator_resolver
end

Instance Method Details

#default_resolverEvilEvents::Shared::DelegatorResolver (private)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

Since:

  • 0.1.0

[View source]

48
49
50
51
# File 'lib/evil_events/core/events/subscriber.rb', line 48

def default_resolver
  delegation = -> { EvilEvents::Core::Bootstrap[:config].settings.subscriber.default_delegator }
  EvilEvents::Shared::DelegatorResolver.new(delegation)
end

#delegatorString, Symbol

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (String, Symbol)

Since:

  • 0.1.0

[View source]

39
40
41
# File 'lib/evil_events/core/events/subscriber.rb', line 39

def delegator
  @delegator ||= delegator_resolver.delegator
end

#notify(event) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns void.

Parameters:

Returns:

  • void

Since:

  • 0.1.0

[View source]

25
26
27
# File 'lib/evil_events/core/events/subscriber.rb', line 25

def notify(event)
  source_object.public_send(delegator, event)
end

#source_objectObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns:

  • (Object)

Since:

  • 0.1.0

[View source]

32
33
34
# File 'lib/evil_events/core/events/subscriber.rb', line 32

def source_object
  @subscriber
end