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