module CallbackHelpers

Public Instance Methods

after(action_name, wrap_in_action: false, &action) click to toggle source
# File lib/potassium/helpers/callback-helpers.rb, line 2
def after(action_name, wrap_in_action: false, &action)
  ensure_callbacks_variables_for_action(action_name)

  if get(:executed_actions).include?(action_name)
    instance_exec(&wrap_action(action, wrap_in_action))
  else
    add_callback(action_name, :after, wrap_action(action, wrap_in_action))
  end
end
before(action_name, wrap_in_action: false, &action) click to toggle source
# File lib/potassium/helpers/callback-helpers.rb, line 12
def before(action_name, wrap_in_action: false, &action)
  ensure_callbacks_variables_for_action(action_name)
  add_callback(action_name, :before, wrap_action(action, wrap_in_action))
end
run_action(action_name, &action) click to toggle source
# File lib/potassium/helpers/callback-helpers.rb, line 17
def run_action(action_name, &action)
  ensure_callbacks_variables_for_action(action_name)
  callbacks = get(:callbacks)[action_name]

  callbacks[:before].each { |callback| instance_exec(&callback) }
  instance_exec(&action)
  get(:executed_actions) << action_name
  callbacks[:after].each { |callback| instance_exec(&callback) }
end

Private Instance Methods

add_callback(action_name, type, action) click to toggle source
# File lib/potassium/helpers/callback-helpers.rb, line 29
def add_callback(action_name, type, action)
  get(:callbacks)[action_name][type] << action
end
ensure_callbacks_variables_for_action(action_name) click to toggle source
# File lib/potassium/helpers/callback-helpers.rb, line 38
def ensure_callbacks_variables_for_action(action_name)
  ensure_variable(:callbacks, {})
  ensure_variable(:executed_actions, [])
  get(:callbacks)[action_name] ||= { before: [], after: [] }
end
wrap_action(action, wrap_in_action) click to toggle source
# File lib/potassium/helpers/callback-helpers.rb, line 33
def wrap_action(action, wrap_in_action)
  return action unless wrap_in_action
  -> { run_action(wrap_in_action, &action) }
end