class Wisper::Broadcasters::LoggerBroadcaster

Public Class Methods

new(logger, broadcaster) click to toggle source
# File lib/wisper/broadcasters/logger_broadcaster.rb, line 6
def initialize(logger, broadcaster)
  @logger      = logger
  @broadcaster = broadcaster
end

Public Instance Methods

broadcast(listener, publisher, event, args) click to toggle source
# File lib/wisper/broadcasters/logger_broadcaster.rb, line 11
def broadcast(listener, publisher, event, args)
  @logger.info("[WISPER] #{name(publisher)} published #{event} to #{name(listener)} with #{args_info(args)}")
  @broadcaster.broadcast(listener, publisher, event, args)
end

Private Instance Methods

args_info(args) click to toggle source
# File lib/wisper/broadcasters/logger_broadcaster.rb, line 27
def args_info(args)
  return 'no arguments' if args.empty?
  args.map do |arg|
    arg_string = name(arg)
    arg_string += ": #{arg.inspect}" if [Numeric, Array, Hash, String].any? {|klass| arg.is_a?(klass) }
    arg_string
  end.join(', ')
end
name(object) click to toggle source
# File lib/wisper/broadcasters/logger_broadcaster.rb, line 18
def name(object)
  id_method  = %w(id uuid key object_id).find do |method_name|
    object.respond_to?(method_name) && object.method(method_name).arity <= 0
  end
  id         = object.send(id_method)
  class_name = object.class == Class ? object.name : object.class.name
  "#{class_name}##{id}"
end