Module: AssetCloud::Callbacks::ClassMethods
- Defined in:
- lib/asset_cloud/callbacks.rb
Instance Attribute Summary collapse
Instance Method Summary collapse
Instance Attribute Details
#_callbacks ⇒ Object
13 14 15 |
# File 'lib/asset_cloud/callbacks.rb', line 13 def _callbacks @_callbacks ||= {}.freeze end |
Instance Method Details
#callback_methods(*symbols) ⇒ Object
17 18 19 20 21 |
# File 'lib/asset_cloud/callbacks.rb', line 17 def callback_methods(*symbols) symbols.each do |method| define_callbacks(method) end end |
#define_callbacks(method) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/asset_cloud/callbacks.rb', line 23 def define_callbacks(method) before = :"before_#{method}" after = :"after_#{method}" extension_module.send(:define_method, method) do |*args, &block| result = nil if execute_callbacks(before, args) result = super(*args, &block) execute_callbacks(after, args) if result end result end define_singleton_method(before) do |*callbacks, &block| callbacks << block if block_given? callbacks = (_callbacks[before] || []) + callbacks self._callbacks = _callbacks.merge(before => callbacks).freeze end define_singleton_method(after) do |*callbacks, &block| callbacks << block if block_given? callbacks = (_callbacks[after] || []) + callbacks self._callbacks = _callbacks.merge(after => callbacks).freeze end end |
#inherited(child) ⇒ Object
8 9 10 11 |
# File 'lib/asset_cloud/callbacks.rb', line 8 def inherited(child) super if defined? super child._callbacks = _callbacks.deep_dup.freeze end |