Sha256: 7486b099164b118591d7d31cbdd992b3f4c39777af16693af684948e46a9d4de

Contents?: true

Size: 1.32 KB

Versions: 25

Compression:

Stored size: 1.32 KB

Contents

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

  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

  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

  def add_callback(action_name, type, action)
    get(:callbacks)[action_name][type] << action
  end

  def wrap_action(action, wrap_in_action)
    return action unless wrap_in_action
    -> { run_action(wrap_in_action, &action) }
  end

  def ensure_callbacks_variables_for_action(action_name)
    ensure_variable(:callbacks, {})
    ensure_variable(:executed_actions, [])
    get(:callbacks)[action_name] ||= { before: [], after: [] }
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
potassium-7.2.0 lib/potassium/helpers/callback-helpers.rb
potassium-7.1.0 lib/potassium/helpers/callback-helpers.rb
potassium-7.0.0 lib/potassium/helpers/callback-helpers.rb
potassium-6.7.0 lib/potassium/helpers/callback-helpers.rb
potassium-6.6.0 lib/potassium/helpers/callback-helpers.rb
potassium-6.5.0 lib/potassium/helpers/callback-helpers.rb
potassium-6.4.0 lib/potassium/helpers/callback-helpers.rb
potassium-6.3.0 lib/potassium/helpers/callback-helpers.rb
potassium-6.2.0 lib/potassium/helpers/callback-helpers.rb
potassium-6.1.0 lib/potassium/helpers/callback-helpers.rb
potassium-6.0.0 lib/potassium/helpers/callback-helpers.rb
potassium-5.2.3 lib/potassium/helpers/callback-helpers.rb
potassium-5.2.2 lib/potassium/helpers/callback-helpers.rb
potassium-5.2.1 lib/potassium/helpers/callback-helpers.rb
potassium-5.2.0 lib/potassium/helpers/callback-helpers.rb
potassium-5.1.4 lib/potassium/helpers/callback-helpers.rb
potassium-5.1.3 lib/potassium/helpers/callback-helpers.rb
potassium-5.1.2 lib/potassium/helpers/callback-helpers.rb
potassium-5.1.1 lib/potassium/helpers/callback-helpers.rb
potassium-3.0.0 lib/potassium/helpers/callback-helpers.rb