Module: Aspectory::Callbacker::InstanceMethods

Defined in:
lib/aspectory/callbacker.rb

Instance Method Summary collapse

Instance Method Details

#__PRISTINE__(method_id, *args, &block) ⇒ Object



103
104
105
106
107
108
109
# File 'lib/aspectory/callbacker.rb', line 103

def __PRISTINE__(method_id, *args, &block)
  if method = self.class.pristine_cache[method_id]
    method.bind(self).call(*args, &block)
  else
    raise NoMethodError, "No method named #{method_id.inspect}"
  end
end

#callbacks_for(position, method_id, *results, &block) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/aspectory/callbacker.rb', line 77

def callbacks_for(position, method_id, *results, &block)
  callbacks = self.class.callback_cache[position][method_id.to_sym]
  
  if callbacks.empty?
    block ? instance_eval(&block) : true
  else
    callbacks.map { |callback|
      if callback.is_a?(Proc)
        results.unshift(block) if block
        instance_exec(*results, &callback)
      else
        method(callback).arity_match?(results) ?
          send(callback, *results, &block) :
          send(callback, &block)
      end
    }.all?
  end
end

#run_callbacks(position, method_id, *args, &block) ⇒ Object



96
97
98
99
100
101
# File 'lib/aspectory/callbacker.rb', line 96

def run_callbacks(position, method_id, *args, &block)
  callbacks_for(position, method_id, *args, &block).tap do |result|
    # Halt method propagation if before callbacks return false
    throw(method_id, false) if position.eql?(:before) and result.eql?(false)
  end
end