Module: Aspectory::Callbacker::InstanceMethods
- Defined in:
- lib/aspectory/callbacker.rb
Instance Method Summary collapse
- #__PRISTINE__(method_id, *args, &block) ⇒ Object
- #callbacks_for(position, method_id, *results, &block) ⇒ Object
- #run_callbacks(position, method_id, *args, &block) ⇒ Object
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 |