aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_controller/filters.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_controller/filters.rb')
-rw-r--r--actionpack/lib/action_controller/filters.rb16
1 files changed, 10 insertions, 6 deletions
diff --git a/actionpack/lib/action_controller/filters.rb b/actionpack/lib/action_controller/filters.rb
index 9bfe3ee1da..2e15f67867 100644
--- a/actionpack/lib/action_controller/filters.rb
+++ b/actionpack/lib/action_controller/filters.rb
@@ -284,12 +284,12 @@ module ActionController #:nodoc:
# Returns all the before filters for this class and all its ancestors.
def before_filters #:nodoc:
- read_inheritable_attribute("before_filters")
+ read_inheritable_attribute("before_filters") || []
end
# Returns all the after filters for this class and all its ancestors.
def after_filters #:nodoc:
- read_inheritable_attribute("after_filters")
+ read_inheritable_attribute("after_filters") || []
end
# Returns a mapping between filters and the actions that may run them.
@@ -308,7 +308,8 @@ module ActionController #:nodoc:
end
def prepend_filter_to_chain(condition, filters)
- write_inheritable_attribute("#{condition}_filters", filters + read_inheritable_attribute("#{condition}_filters"))
+ old_filters = read_inheritable_attribute("#{condition}_filters") || []
+ write_inheritable_attribute("#{condition}_filters", filters + old_filters)
end
def ensure_filter_responds_to_before_and_after(filter)
@@ -344,9 +345,12 @@ module ActionController #:nodoc:
end
def perform_action_with_filters
- return if before_action == false || performed?
- perform_action_without_filters
- after_action
+ before_action_result = before_action
+ unless before_action_result == false || performed?
+ perform_action_without_filters
+ after_action
+ end
+ @before_filter_chain_aborted = (before_action_result == false)
end
# Calls all the defined before-filter filters, which are added by using "before_filter :method".