diff options
author | lifo <lifo@null.lan> | 2009-04-17 14:06:26 +0100 |
---|---|---|
committer | lifo <lifo@null.lan> | 2009-04-17 14:06:26 +0100 |
commit | 20401783cf26f903d7020cb7136b1e78e60e71ea (patch) | |
tree | 5bb029802ade6dda33e051adf74915dc0a8d1fe5 /actionpack/lib/action_controller/abstract/callbacks.rb | |
parent | f99e9f627b6e4ab7fe72bc759426312ec0c7a2cd (diff) | |
parent | abb899c54e8777428b7a607774370ba29a5573bd (diff) | |
download | rails-20401783cf26f903d7020cb7136b1e78e60e71ea.tar.gz rails-20401783cf26f903d7020cb7136b1e78e60e71ea.tar.bz2 rails-20401783cf26f903d7020cb7136b1e78e60e71ea.zip |
Merge commit 'mainstream/master'
Conflicts:
actionpack/lib/action_controller/base.rb
railties/guides/source/caching_with_rails.textile
Diffstat (limited to 'actionpack/lib/action_controller/abstract/callbacks.rb')
-rw-r--r-- | actionpack/lib/action_controller/abstract/callbacks.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/abstract/callbacks.rb b/actionpack/lib/action_controller/abstract/callbacks.rb new file mode 100644 index 0000000000..c8b509081c --- /dev/null +++ b/actionpack/lib/action_controller/abstract/callbacks.rb @@ -0,0 +1,40 @@ +module AbstractController + module Callbacks + setup do + include ActiveSupport::NewCallbacks + define_callbacks :process_action + end + + def process_action + _run_process_action_callbacks(action_name) do + super + end + end + + module ClassMethods + 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 + + [:before, :after, :around].each do |filter| + class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 + def #{filter}_filter(*names, &blk) + options = names.last.is_a?(Hash) ? names.pop : {} + _normalize_callback_options(options) + names.push(blk) if block_given? + names.each do |name| + process_action_callback(:#{filter}, name, options) + end + end + RUBY_EVAL + end + end + end +end
\ No newline at end of file |