class BasicSubscriber::Subscriber

Constants

NAME_SEPARATOR

Attributes

current_scope[W]
event_name[R]
payload[R]

Public Class Methods

known_events() click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 34
def known_events
  subscriptions.keys
end
new(event_name, **payload) click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 59
def initialize(event_name, **payload)
  @event_name = event_name
  @payload = payload
end
on(*event_names, &block) click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 16
def on(*event_names, &block)
  event_names.each { |name| subscriptions[scoped_name(name)].push block }
end
scope(scope_name) { || ... } click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 20
def scope(scope_name)
  scope_name = scope_name.to_sym
  if block_given?
    previous_scope = current_scope.dup
    subscope scope_name
    yield
    self.current_scope = previous_scope
  else
    parent_scope = current_scope[1..-1]
    self.current_scope = parent_scope if parent_scope&.any?
    subscope scope_name
  end
end
trigger(event_name, **payload) click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 8
def trigger(event_name, **payload)
  event_name = event_name.to_sym

  subscriber = new event_name, payload
  subscriptions[event_name].each { |block| subscriber.instance_exec(&block) }
  nil
end

Private Class Methods

current_scope() click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 48
def current_scope
  @current_scope ||= []
end
scoped_name(name) click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 44
def scoped_name(name)
  ([name] + current_scope).join(NAME_SEPARATOR).to_sym
end
subscope(name) click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 54
def subscope(name)
  @current_scope.unshift name
end
subscriptions() click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 40
def subscriptions
  @subscriptions ||= Hash.new { |h, k| h[k] = [] }
end

Public Instance Methods

scope_name() click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 68
def scope_name
  return @scope_name if defined? @scope_name
  @scope_name = begin
    scope_name = split_event_name[2]
    scope_name == '' ? nil : scope_name.to_sym
  end
end
unscoped_event_name() click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 64
def unscoped_event_name
  @unscoped_event_name ||= split_event_name.first.to_sym
end

Private Instance Methods

split_event_name() click to toggle source
# File lib/basic_subscriber/subscriber.rb, line 78
def split_event_name
  @split_event_name ||= event_name.to_s.partition NAME_SEPARATOR
end