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