Module: AbstractController::Callbacks::ClassMethods
- Defined in:
- lib/abstract_controller/callbacks.rb
Instance Method Summary collapse
-
#_insert_callbacks(callbacks, block = nil) ⇒ Object
Take callback names and an optional callback proc, normalize them, then call the block with each callback.
-
#_normalize_callback_option(options, from, to) ⇒ Object
:nodoc:.
-
#_normalize_callback_options(options) ⇒ Object
If ‘:only` or `:except` are used, convert the options into the `:if` and `:unless` options of ActiveSupport::Callbacks.
-
#callback ⇒ Object
:method: append_around_action.
Instance Method Details
#_insert_callbacks(callbacks, block = nil) ⇒ Object
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.
120 121 122 123 124 125 126 127 128 129 |
# File 'lib/abstract_controller/callbacks.rb', line 120 def _insert_callbacks(callbacks, block = nil) = callbacks. callbacks.push(block) if block [:filters] = callbacks () .delete(:filters) callbacks.each do |callback| yield callback, end end |
#_normalize_callback_option(options, from, to) ⇒ Object
:nodoc:
98 99 100 101 102 103 104 |
# File 'lib/abstract_controller/callbacks.rb', line 98 def _normalize_callback_option(, from, to) # :nodoc: if from_value = .delete(from) filters = [:filters] from_value = ActionFilter.new(filters, from, from_value) [to] = Array([to]).unshift(from_value) end end |
#_normalize_callback_options(options) ⇒ Object
If ‘:only` or `:except` are used, convert the options into the `:if` and `:unless` options of ActiveSupport::Callbacks.
The basic idea is that ‘:only => :index` gets converted to `:if => proc {|c| c.action_name == “index” }`.
Note that ‘:only` has priority over `:if` in case they are used together.
only: :index, if: -> { true } # the :if option will be ignored.
Note that ‘:if` has priority over `:except` in case they are used together.
except: :index, if: -> { true } # the :except option will be ignored.
#### Options
-
‘only` - The callback should be run only for this action.
-
‘except` - The callback should be run for all actions except this action.
93 94 95 96 |
# File 'lib/abstract_controller/callbacks.rb', line 93 def () _normalize_callback_option(, :only, :if) _normalize_callback_option(, :except, :unless) end |
#callback ⇒ Object
:method: append_around_action
:call-seq: append_around_action(names, block)
Append a callback around actions. See _insert_callbacks for parameter details. set up before_action, prepend_before_action, skip_before_action, etc. for each of before, after, and around.
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 |
# File 'lib/abstract_controller/callbacks.rb', line 230 [:before, :after, :around].each do |callback| define_method "#{callback}_action" do |*names, &blk| _insert_callbacks(names, blk) do |name, | set_callback(:process_action, callback, name, ) end end define_method "prepend_#{callback}_action" do |*names, &blk| _insert_callbacks(names, blk) do |name, | set_callback(:process_action, callback, name, .merge(prepend: true)) end end # Skip a before, after or around callback. See _insert_callbacks for details on # the allowed parameters. define_method "skip_#{callback}_action" do |*names| _insert_callbacks(names) do |name, | skip_callback(:process_action, callback, name, ) end end # *_action is the same as append_*_action alias_method :"append_#{callback}_action", :"#{callback}_action" end |