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