From 2504982945828d24c9b799c408d71576508b4c15 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 31 Jan 2006 23:55:04 +0000 Subject: Added :only and :except controls to skip_before/after_filter just like for when you add filters [DHH] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3504 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/filters.rb | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'actionpack/lib') diff --git a/actionpack/lib/action_controller/filters.rb b/actionpack/lib/action_controller/filters.rb index 3f712629db..0149d52303 100644 --- a/actionpack/lib/action_controller/filters.rb +++ b/actionpack/lib/action_controller/filters.rb @@ -251,18 +251,34 @@ module ActionController #:nodoc: # Removes the specified filters from the +before+ filter chain. Note that this only works for skipping method-reference # filters, not procs. This is especially useful for managing the chain in inheritance hierarchies where only one out # of many sub-controllers need a different hierarchy. + # + # You can control the actions to skip the filter for with the :only and :except options, + # just like when you apply the filters. def skip_before_filter(*filters) - for filter in filters.flatten - write_inheritable_attribute("before_filters", read_inheritable_attribute("before_filters") - [ filter ]) + if conditions = extract_conditions!(filters) + conditions[:only], conditions[:except] = conditions[:except], conditions[:only] + add_action_conditions(filters, conditions) + else + for filter in filters.flatten + write_inheritable_attribute("before_filters", read_inheritable_attribute("before_filters") - [ filter ]) + end end end # Removes the specified filters from the +after+ filter chain. Note that this only works for skipping method-reference # filters, not procs. This is especially useful for managing the chain in inheritance hierarchies where only one out # of many sub-controllers need a different hierarchy. + # + # You can control the actions to skip the filter for with the :only and :except options, + # just like when you apply the filters. def skip_after_filter(*filters) - for filter in filters.flatten - write_inheritable_attribute("after_filters", read_inheritable_attribute("after_filters") - [ filter ]) + if conditions = extract_conditions!(filters) + conditions[:only], conditions[:except] = conditions[:except], conditions[:only] + add_action_conditions(filters, conditions) + else + for filter in filters.flatten + write_inheritable_attribute("after_filters", read_inheritable_attribute("after_filters") - [ filter ]) + end end end -- cgit v1.2.3