aboutsummaryrefslogtreecommitdiffstats
path: root/lib/action_cable/channel/callbacks.rb
diff options
context:
space:
mode:
authorMike A. Owens <mike@filespanker.com>2015-08-24 13:35:59 -0400
committerMike A. Owens <mike@filespanker.com>2015-08-24 13:46:41 -0400
commitcf426a7ee680e8cd30a4b5afccf7e140537836f4 (patch)
tree0782fdca55758ae6e700b32ebbf6b935a9f3e655 /lib/action_cable/channel/callbacks.rb
parent6143352f8ffba303f0c7644be7573f6725554cb3 (diff)
downloadrails-cf426a7ee680e8cd30a4b5afccf7e140537836f4.tar.gz
rails-cf426a7ee680e8cd30a4b5afccf7e140537836f4.tar.bz2
rails-cf426a7ee680e8cd30a4b5afccf7e140537836f4.zip
Use ActiveSupport::Callbacks for Channel subscription callbacks.
* Rely on AS::Callbacks for callback handling. * Add before_subscribe, after_subscribe, before_unsubscribe and after_unsubscribe convenience methods * alias on_subscribe and on_unsubscribe to after_subscribe and after_unsubscribe, respectively. * Remove `subscribed` and `unsubscribed` from the callback chain: these methods are now executed as the subject of the callbacks. * Update portions of ActionCable to use the more specific callback names.
Diffstat (limited to 'lib/action_cable/channel/callbacks.rb')
-rw-r--r--lib/action_cable/channel/callbacks.rb38
1 files changed, 23 insertions, 15 deletions
diff --git a/lib/action_cable/channel/callbacks.rb b/lib/action_cable/channel/callbacks.rb
index dcdd27b9a7..f050fc95c0 100644
--- a/lib/action_cable/channel/callbacks.rb
+++ b/lib/action_cable/channel/callbacks.rb
@@ -1,28 +1,36 @@
+require 'active_support/callbacks'
+
module ActionCable
module Channel
module Callbacks
- extend ActiveSupport::Concern
+ extend ActiveSupport::Concern
+ include ActiveSupport::Callbacks
included do
- class_attribute :on_subscribe_callbacks, :on_unsubscribe_callbacks, instance_reader: false
-
- self.on_subscribe_callbacks = []
- self.on_unsubscribe_callbacks = []
+ define_callbacks :subscribe
+ define_callbacks :unsubscribe
end
- module ClassMethods
- # Name methods that should be called when the channel is subscribed to.
- # (These methods should be private, so they're not callable by the user).
- def on_subscribe(*methods)
- self.on_subscribe_callbacks += methods
+ class_methods do
+ def before_subscribe(*methods, &block)
+ set_callback(:subscribe, :before, *methods, &block)
+ end
+
+ def after_subscribe(*methods, &block)
+ set_callback(:subscribe, :after, *methods, &block)
+ end
+ alias_method :on_subscribe, :after_subscribe
+
+
+ def before_unsubscribe(*methods, &block)
+ set_callback(:unsubscribe, :before, *methods, &block)
end
- # Name methods that should be called when the channel is unsubscribed from.
- # (These methods should be private, so they're not callable by the user).
- def on_unsubscribe(*methods)
- self.on_unsubscribe_callbacks += methods
+ def after_unsubscribe(*methods, &block)
+ set_callback(:unsubscribe, :after, *methods, &block)
end
+ alias_method :on_unsubscribe, :after_unsubscribe
end
end
end
-end \ No newline at end of file
+end