class Announcer::Event

Attributes

name[R]
params[R]

Public Class Methods

load_from_serialized(name, instance, params) click to toggle source
# File lib/announcer/event.rb, line 19
def self.load_from_serialized(name, instance, params)
  new(name, params.merge(instance: instance))
end
new(name, params={}) click to toggle source
# File lib/announcer/event.rb, line 13
def initialize(name, params={})
  raise ArgumentError, 'missing event name' unless name.respond_to?(:to_sym)
  @name = name.to_sym
  _evaluate_params(params)
end

Public Instance Methods

[](key) click to toggle source
# File lib/announcer/event.rb, line 23
def [](key)
  params[key]
end
publish() click to toggle source
# File lib/announcer/event.rb, line 27
def publish
  plugins.perform(:publish, self) { |event|
    instance.publishers.each { |p| p.publish(event) }
  }
end
subscriptions() click to toggle source
# File lib/announcer/event.rb, line 33
def subscriptions
  instance.subscriptions_to(self)
end
to_s() click to toggle source
# File lib/announcer/event.rb, line 37
def to_s
  "Event(#{name}" <<
    (params && !params.empty? && ", #{params.inspect}" or '') <<
    ")"
end

Private Instance Methods

_evaluate_params(params) click to toggle source

Root evaluation method.

# File lib/announcer/event.rb, line 54
def _evaluate_params(params)
  unless params.is_a?(Hash)
    raise ArgumentError, 'event parameters must be a hash'
  end

  params = params.dup
  @instance = params.delete(:instance)
  @params = _sanitize_params(params)
end
_sanitize_array(key, array) click to toggle source

Sanitize an array.

# File lib/announcer/event.rb, line 73
def _sanitize_array(key, array)
  array.map { |value| _sanitize_value(key, value) }.freeze
end
_sanitize_params(params) click to toggle source

Sanitize the event params. Prevents passing values that could cause errors later in Announcer.

# File lib/announcer/event.rb, line 68
def _sanitize_params(params)
  Hash[params.map { |key, value| [key.to_sym, _sanitize_value(key, value)] }].freeze
end
_sanitize_value(key, value) click to toggle source

Sanitize an individual value.

# File lib/announcer/event.rb, line 78
def _sanitize_value(key, value)
  case value
  when String
    value.dup.freeze
  when Symbol, Integer, Float, NilClass, TrueClass, FalseClass
    value
  when Array
    _sanitize_array(key, value)
  when Hash
    _sanitize_params(value)
  else
    raise Errors::UnsafeValueError.new(key, value)
  end
end