class Basquiat::Adapters::RabbitMq::Events

Attributes

keys[R]

Public Class Methods

new() click to toggle source
# File lib/basquiat/adapters/rabbitmq/events.rb, line 9
def initialize
  @keys     = []
  @exact    = {}
  @patterns = {}
end

Public Instance Methods

[](key) click to toggle source
# File lib/basquiat/adapters/rabbitmq/events.rb, line 24
def [](key)
  @exact.fetch(key) { simple_pattern_match(key) }
rescue KeyError
  raise KeyError, "No event handler found for #{key}"
end
[]=(key, value) click to toggle source
# File lib/basquiat/adapters/rabbitmq/events.rb, line 15
def []=(key, value)
  if key =~ /\*|#/
    set_pattern_key(key, value)
  else
    @exact[key] = value
  end
  @keys.push key
end

Private Instance Methods

set_pattern_key(key, value) click to toggle source
# File lib/basquiat/adapters/rabbitmq/events.rb, line 32
def set_pattern_key(key, value)
  key            = key.gsub('.', '\.')
  key            = if key =~ /\*/
                     /^#{key.gsub('*', '[^.]+')}$/
                   else
                     /^#{key.gsub(/#/, '.*')}$/
                   end
  @patterns[key] = value
end
simple_pattern_match(key) click to toggle source
# File lib/basquiat/adapters/rabbitmq/events.rb, line 42
def simple_pattern_match(key)
  match = @patterns.keys.detect(nil) { |pattern| key =~ pattern }
  @patterns.fetch match
end