Module: AssetCloud::Callbacks::ClassMethods
- Defined in:
- lib/asset_cloud/callbacks.rb
Instance Attribute Summary collapse
Instance Method Summary collapse
Instance Attribute Details
#_callbacks ⇒ Object
15 16 17 |
# File 'lib/asset_cloud/callbacks.rb', line 15 def _callbacks @_callbacks ||= {}.freeze end |
Instance Method Details
#callback_methods(*symbols) ⇒ Object
19 20 21 22 23 |
# File 'lib/asset_cloud/callbacks.rb', line 19 def callback_methods(*symbols) symbols.each do |method| define_callbacks(method) end end |
#define_callbacks(method) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/asset_cloud/callbacks.rb', line 25 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 unless block.nil? callbacks = (_callbacks[before] || []) + callbacks self._callbacks = _callbacks.merge(before => callbacks).freeze end define_singleton_method(after) do |*callbacks, &block| callbacks << block unless block.nil? callbacks = (_callbacks[after] || []) + callbacks self._callbacks = _callbacks.merge(after => callbacks).freeze end end |
#inherited(child) ⇒ Object
10 11 12 13 |
# File 'lib/asset_cloud/callbacks.rb', line 10 def inherited(child) super if defined? super child._callbacks = _callbacks.deep_dup.freeze end |