From c7847f14fde3263fc06e0bad8448949848163d0d Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Wed, 21 Mar 2012 15:04:22 -0700 Subject: evented listeners can subscribe to any message --- .../lib/active_support/notifications/fanout.rb | 36 ++++++++++++++++------ 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'activesupport/lib/active_support/notifications/fanout.rb') diff --git a/activesupport/lib/active_support/notifications/fanout.rb b/activesupport/lib/active_support/notifications/fanout.rb index 40d7501e1b..17c99089c1 100644 --- a/activesupport/lib/active_support/notifications/fanout.rb +++ b/activesupport/lib/active_support/notifications/fanout.rb @@ -47,17 +47,19 @@ module ActiveSupport module Subscribers # :nodoc: def self.new(pattern, listener) if listener.respond_to?(:call) - if pattern - TimedSubscriber.new pattern, listener - else - AllMessages.new pattern, listener - end + subscriber = Timed.new pattern, listener else - Subscriber.new pattern, listener + subscriber = Evented.new pattern, listener + end + + unless pattern + AllMessages.new(subscriber) + else + subscriber end end - class Subscriber #:nodoc: + class Evented #:nodoc: def initialize(pattern, delegate) @pattern = pattern @delegate = delegate @@ -81,7 +83,7 @@ module ActiveSupport end end - class TimedSubscriber < Subscriber + class Timed < Evented def initialize(pattern, delegate) @timestack = Hash.new { |h,id| h[id] = Hash.new { |ids,name| ids[name] = [] } @@ -103,7 +105,23 @@ module ActiveSupport end end - class AllMessages < TimedSubscriber # :nodoc: + class AllMessages # :nodoc: + def initialize(delegate) + @delegate = delegate + end + + def start(name, id, payload) + @delegate.start name, id, payload + end + + def finish(name, id, payload) + @delegate.finish name, id, payload + end + + def publish(name, *args) + @delegate.publish name, *args + end + def subscribed_to?(name) true end -- cgit v1.2.3