class Logcast::Broadcaster

Public Instance Methods

method_missing(name, *args, &block) click to toggle source
Calls superclass method
# File lib/logcast/broadcaster.rb, line 36
def method_missing(name, *args, &block)
  responding = subscribers.select { |s| s.respond_to?(name) }
  if responding.any?
    responding.map { |s| s.send(name, *args, &block) }.last
  else
    super
  end
end
respond_to_missing?(name, include_all) click to toggle source
Calls superclass method
# File lib/logcast/broadcaster.rb, line 45
def respond_to_missing?(name, include_all)
  subscribers.any? { |s| s.respond_to?(name) } || super
end
subscribe(subscriber) { || ... } click to toggle source
# File lib/logcast/broadcaster.rb, line 4
def subscribe(subscriber, &block)
  unless subscriber.respond_to?(:add)
    original_subscriber = subscriber
    subscriber = Logger.new(subscriber)
    subscriber.instance_variable_set(:@logcast_original_subscriber, original_subscriber)
  end

  # Apply existing level to the new subscriber.
  if subscribers.any?
    subscriber.level = subscribers.first.level
  end

  if block
    if already_subscribed?(subscriber)
      yield
    else
      begin
        subscribers << subscriber
        yield
      ensure
        subscribers.pop
      end
    end
  else
    subscribers << subscriber unless already_subscribed?(subscriber)
  end
end
subscribers() click to toggle source
# File lib/logcast/broadcaster.rb, line 32
def subscribers
  @subscribers ||= []
end
warn(*args, &block) click to toggle source

Kernel#warn is defined by Ruby

# File lib/logcast/broadcaster.rb, line 50
def warn(*args, &block)
  method_missing("warn", *args, &block)
end

Private Instance Methods

already_subscribed?(logger) click to toggle source
# File lib/logcast/broadcaster.rb, line 56
def already_subscribed?(logger)
  subscribers.map { |s| log_device(s) }.include?(log_device(logger))
end
log_device(logger) click to toggle source
# File lib/logcast/broadcaster.rb, line 60
def log_device(logger)
  logger.instance_variable_get(:@logcast_original_subscriber) || logger
end