module ObjectCallbacks
Constants
- VERSION
Public Instance Methods
after_call(action_name, options = {})
click to toggle source
# File lib/object_callbacks.rb, line 16 def after_call(action_name, options = {}) after_calls[action_name] = options end
before_call(action_name, options = {})
click to toggle source
# File lib/object_callbacks.rb, line 12 def before_call(action_name, options = {}) before_calls[action_name] = options end
method_added(action_name)
click to toggle source
# File lib/object_callbacks.rb, line 4 def method_added(action_name) if actions.include?(action_name) || before_calls.key?(action_name) || after_calls.key?(action_name) return end apply_callback_actions(action_name) end
Private Instance Methods
actions()
click to toggle source
# File lib/object_callbacks.rb, line 30 def actions @actions ||= [] end
after_calls()
click to toggle source
# File lib/object_callbacks.rb, line 26 def after_calls @after_calls ||= {} end
apply_callback_actions(action_name)
click to toggle source
# File lib/object_callbacks.rb, line 34 def apply_callback_actions(action_name) actions << action_name original_method = instance_method(action_name) define_method(action_name) do |*args, &block| val = self.class.send(:execute_before_calls, action_name, self) return false if val == false result = original_method.bind(self).call(*args, &block) self.class.send(:execute_after_calls, action_name, self) result end end
before_calls()
click to toggle source
# File lib/object_callbacks.rb, line 22 def before_calls @before_calls ||= {} end
callbacks_for_all(callbacks)
click to toggle source
# File lib/object_callbacks.rb, line 70 def callbacks_for_all(callbacks) callbacks.to_a.select{|key, value| value.empty?}.map(&:first) end
callbacks_for_method(action_name, callback_type)
click to toggle source
# File lib/object_callbacks.rb, line 62 def callbacks_for_method(action_name, callback_type) callbacks = send("#{callback_type}_calls") callbacks_for_all(callbacks) + only_callbacks(callbacks, action_name) + except_callbacks(callbacks, action_name) end
except_callbacks(callbacks, action_name)
click to toggle source
# File lib/object_callbacks.rb, line 80 def except_callbacks(callbacks, action_name) callbacks.to_a.select do |_key, value| !value[:except].nil? && !value[:except].include?(action_name) end.map(&:first) end
execute_after_calls(action_name, instance)
click to toggle source
# File lib/object_callbacks.rb, line 56 def execute_after_calls(action_name, instance) callbacks_for_method(action_name, :after).each do |after_call_method| instance.send(after_call_method) end end
execute_before_calls(action_name, instance)
click to toggle source
# File lib/object_callbacks.rb, line 49 def execute_before_calls(action_name, instance) callbacks_for_method(action_name, :before).each do |before_call_method| val = instance.send(before_call_method) return false if val == false end end
only_callbacks(callbacks, action_name)
click to toggle source
# File lib/object_callbacks.rb, line 74 def only_callbacks(callbacks, action_name) callbacks.to_a.select do |_key, value| !value[:only].nil? && value[:only].include?(action_name) end.map(&:first) end