Module: AssetCloud::Callbacks::ClassMethods

Defined in:
lib/asset_cloud/callbacks.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#_callbacksObject



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