# module AbstractController::Callbacks::ClassMethods

### Public Instance Methods

_insert_callbacks(callbacks, block) { |callback, options| ... } click to toggle source

Take callback names and an optional callback proc, normalize them, then call the block with each callback. This allows us to abstract the normalization across several methods that use it.

#### Parameters¶ ↑

- `callbacks` - An array of callbacks, with an optional options hash as the last parameter.

- `block` - A proc that should be added to the callbacks.

#### Block Parameters¶ ↑

- `name` - The callback to be added

- `options` - A hash of options to be used when adding the callback

    # File lib/abstract_controller/callbacks.rb, line 69
    def _insert_callbacks(callbacks, block)
      options = callbacks.last.is_a?(Hash) ? callbacks.pop : {}
      _normalize_callback_options(options)
      callbacks.push(block) if block
      callbacks.each do |callback|
        yield callback, options
      end
    end

_normalize_callback_options(options) click to toggle source

If :only or :except are used, convert the options into the primitive form (:per_key) used by ActiveSupport::Callbacks. The basic idea is that :only => :index gets converted to :if => proc {|c| c.action_name == “index” }, but that the proc is only evaluated once per action for the lifetime of a Rails process.

#### Options¶ ↑

- `only` - The callback should be run only for this action

- `except` - The callback should be run for all actions except this action

    # File lib/abstract_controller/callbacks.rb, line 33
    def _normalize_callback_options(options)
      if only = options[:only]
        only = Array(only).map {|o| "action_name == '#{o}'"}.join(" || ")
        options[:per_key] = {:if => only}
      end
      if except = options[:except]
        except = Array(except).map {|e| "action_name == '#{e}'"}.join(" || ")
        options[:per_key] = {:unless => except}
      end
    end

after_filter(names, block) click to toggle source

Append an after filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 113

append_after_filter(names, block) click to toggle source

Append an after filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 134

append_around_filter(names, block) click to toggle source

Append an around filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 162

append_before_filter(names, block) click to toggle source

Append a before filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 106

around_filter(names, block) click to toggle source

Append an around filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 141

before_filter(names, block) click to toggle source

Append a before filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 85

prepend_after_filter(names, block) click to toggle source

Prepend an after filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 120

prepend_around_filter(names, block) click to toggle source

Prepend an around filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 148

prepend_before_filter(names, block) click to toggle source

Prepend a before filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 92

skip_after_filter(names, block) click to toggle source

Skip an after filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 127

skip_around_filter(names, block) click to toggle source

Skip an around filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 155

skip_before_filter(names, block) click to toggle source

Skip a before filter. See #_insert_callbacks for parameter details.

    # File lib/abstract_controller/callbacks.rb, line 99

skip_filter(*names, &blk) click to toggle source

Skip before, after, and around filters matching any of the names

#### Parameters¶ ↑

- `names` - A list of valid names that could be used for callbacks. Note that skipping uses Ruby equality, so it's impossible to skip a callback defined using an anonymous proc using skip_filter

    # File lib/abstract_controller/callbacks.rb, line 51
    def skip_filter(*names, &blk)
      skip_before_filter(*names)
      skip_after_filter(*names)
      skip_around_filter(*names)
    end