aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/notifications/fanout.rb
diff options
context:
space:
mode:
authorwycats <wycats@gmail.com>2010-04-26 23:32:30 -0700
committerwycats <wycats@gmail.com>2010-04-26 23:32:30 -0700
commit91963e9e33eb5a28297323f1346aeb8b643e9d65 (patch)
tree0452dbaf63110fb5a19c958da50d4677dee11333 /activesupport/lib/active_support/notifications/fanout.rb
parentd5d717161d853d8d7240da59b41a879bdac6e982 (diff)
parentc1d73270717f30498f8f4d55d6695509107c2834 (diff)
downloadrails-91963e9e33eb5a28297323f1346aeb8b643e9d65.tar.gz
rails-91963e9e33eb5a28297323f1346aeb8b643e9d65.tar.bz2
rails-91963e9e33eb5a28297323f1346aeb8b643e9d65.zip
Merge branch 'master' of github.com:rails/rails
Diffstat (limited to 'activesupport/lib/active_support/notifications/fanout.rb')
-rw-r--r--activesupport/lib/active_support/notifications/fanout.rb20
1 files changed, 15 insertions, 5 deletions
diff --git a/activesupport/lib/active_support/notifications/fanout.rb b/activesupport/lib/active_support/notifications/fanout.rb
index a3ddc7705a..300ec842a9 100644
--- a/activesupport/lib/active_support/notifications/fanout.rb
+++ b/activesupport/lib/active_support/notifications/fanout.rb
@@ -19,8 +19,8 @@ module ActiveSupport
end
def unsubscribe(subscriber)
- @subscribers.delete(subscriber)
@listeners_for.clear
+ @subscribers.reject! {|s| s.matches?(subscriber)}
end
def publish(name, *args)
@@ -60,7 +60,7 @@ module ActiveSupport
end
def publish(*args)
- return unless matches?(args.first)
+ return unless subscribed_to?(args.first)
push(*args)
true
end
@@ -69,10 +69,20 @@ module ActiveSupport
true
end
- private
- def matches?(name)
- !@pattern || @pattern =~ name.to_s
+ def subscribed_to?(name)
+ !@pattern || @pattern =~ name.to_s
+ end
+
+ def matches?(subscriber_or_name)
+ case subscriber_or_name
+ when String
+ @pattern && @pattern =~ subscriber_or_name
+ when self
+ true
end
+ end
+
+ private
def push(*args)
@block.call(*args)