Module: AssetCloud::Callbacks::ClassMethods

Defined in:
lib/asset_cloud/callbacks.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#_callbacksObject



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 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



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