lib/asset_cloud/callbacks.rb in asset_cloud-2.2.5 vs lib/asset_cloud/callbacks.rb in asset_cloud-2.2.6
- old
+ new
@@ -1,10 +1,21 @@
module AssetCloud
module Callbacks
extend ActiveSupport::Concern
module ClassMethods
+ attr_writer :_callbacks
+
+ def inherited(child)
+ super if defined? super
+ child._callbacks = _callbacks.deep_dup.freeze
+ end
+
+ def _callbacks
+ @_callbacks ||= {}.freeze
+ end
+
def callback_methods(*symbols)
symbols.each do |method|
define_callbacks(method)
end
end
@@ -21,16 +32,18 @@
result
end
define_singleton_method(before) do |*callbacks, &block|
callbacks << block if block_given?
- write_inheritable_array(before, callbacks)
+ callbacks = (_callbacks[before] || []) + callbacks
+ self._callbacks = _callbacks.merge(before => callbacks).freeze
end
define_singleton_method(after) do |*callbacks, &block|
callbacks << block if block_given?
- write_inheritable_array(after, callbacks)
+ callbacks = (_callbacks[after] || []) + callbacks
+ self._callbacks = _callbacks.merge(after => callbacks).freeze
end
end
private
@@ -47,11 +60,11 @@
def execute_callbacks(symbol, args)
callbacks_for(symbol).each do |callback|
result = case callback
when Symbol
- self.send(callback, *args)
+ send(callback, *args)
when Proc, Method
callback.call(self, *args)
else
if callback.respond_to?(method)
callback.send(method, self, *args)
@@ -63,9 +76,9 @@
end
true
end
def callbacks_for(symbol)
- self.class.send(symbol) || []
+ self.class._callbacks[symbol] || []
end
end
end