mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
evented listeners can subscribe to any message
This commit is contained in:
parent
6989db9238
commit
c7847f14fd
1 changed files with 27 additions and 9 deletions
|
@ -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
|
||||
subscriber = Timed.new pattern, listener
|
||||
else
|
||||
AllMessages.new pattern, listener
|
||||
subscriber = Evented.new pattern, listener
|
||||
end
|
||||
|
||||
unless pattern
|
||||
AllMessages.new(subscriber)
|
||||
else
|
||||
Subscriber.new pattern, listener
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue