aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_controller/filters.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/actionpack/lib/action_controller/filters.rb b/actionpack/lib/action_controller/filters.rb
index 2b260b80d7..1c957e7120 100644
--- a/actionpack/lib/action_controller/filters.rb
+++ b/actionpack/lib/action_controller/filters.rb
@@ -255,6 +255,7 @@ module ActionController #:nodoc:
# just like when you apply the filters.
def skip_before_filter(*filters)
if conditions = extract_conditions!(filters)
+ remove_contradicting_conditions!(filters, conditions)
conditions[:only], conditions[:except] = conditions[:except], conditions[:only]
add_action_conditions(filters, conditions)
else
@@ -272,6 +273,7 @@ module ActionController #:nodoc:
# just like when you apply the filters.
def skip_after_filter(*filters)
if conditions = extract_conditions!(filters)
+ remove_contradicting_conditions!(filters, conditions)
conditions[:only], conditions[:except] = conditions[:except], conditions[:only]
add_action_conditions(filters, conditions)
else
@@ -332,6 +334,17 @@ module ActionController #:nodoc:
def condition_hash(filters, *actions)
filters.inject({}) {|hash, filter| hash.merge(filter => actions.flatten.map {|action| action.to_s})}
end
+
+ def remove_contradicting_conditions!(filters, conditions)
+ return unless conditions[:only]
+ filters.each do |filter|
+ next unless included_actions_for_filter = included_actions[filter]
+ [*conditions[:only]].each do |conditional_action|
+ conditional_action = conditional_action.to_s
+ included_actions_for_filter.delete(conditional_action) if included_actions_for_filter.include?(conditional_action)
+ end
+ end
+ end
end
module InstanceMethods # :nodoc: