class TokenOfFire::Subscriptions

Public Class Methods

new(subscriptions={}) click to toggle source
# File lib/token_of_fire/subscriptions.rb, line 6
def initialize(subscriptions={})
  @subscriptions = subscriptions

  @subscriptions_by_event_name = {}
end

Public Instance Methods

get_subscriptions(event_name=nil, scope=nil) click to toggle source
# File lib/token_of_fire/subscriptions.rb, line 40
def get_subscriptions(event_name=nil, scope=nil)
  # $stdout.puts "---\nSearching for: #{event_name}"
  # $stdout.puts "  scope: #{scope}"
  uuids = @subscriptions_by_event_name[event_name]
  return [] if not uuids
  @subscriptions.select { |k| uuids.include? k }.select { |k, v|
    # $stdout.puts "  check match: #{v[:scope]}"
    s1 = Set.new(scope)
    s2 = Set.new(v[:scope])
    value = s1.subset? s2
    # $stdout.puts "    #{value}"
    value
  }
end
subscribe(event_name, scope, handler, method_name) click to toggle source
# File lib/token_of_fire/subscriptions.rb, line 16
def subscribe(event_name, scope, handler, method_name)
  gen_uuid = SecureRandom.uuid
  @subscriptions[gen_uuid] ||= {}
  @subscriptions[gen_uuid] = {
    :event_name => event_name,
    :scope => scope,
    :handler => handler,
    :method_name => method_name
  }
  # $stdout.puts "subscription added: #{@subscriptions[gen_uuid]}"

  @subscriptions_by_event_name[event_name] ||= []
  @subscriptions_by_event_name[event_name] << gen_uuid

  gen_uuid
end
subscriptions() click to toggle source
# File lib/token_of_fire/subscriptions.rb, line 12
def subscriptions
  @subscriptions
end
unsubscribe(uuid) click to toggle source
# File lib/token_of_fire/subscriptions.rb, line 33
def unsubscribe(uuid)
  @subscriptions.reject! { |k| k == uuid }
  @subscriptions_by_event_name.each do |s_by_event_name|
    s_by_event_name.reject! { |v| v == uuid }
  end
end