Don't repeatedly convert only/except options

This commit is contained in:
Jeremy Kemper
2008-07-08 23:38:18 -07:00
parent ce4a1bb853
commit 0ce7fe5308

View File

@@ -94,7 +94,7 @@ module ActionController #:nodoc:
map! do |filter|
if filters.include?(filter)
new_filter = filter.dup
new_filter.options.merge!(options)
new_filter.update_options!(options)
new_filter
else
filter
@@ -104,6 +104,11 @@ module ActionController #:nodoc:
end
class Filter < ActiveSupport::Callbacks::Callback #:nodoc:
def initialize(kind, method, options = {})
super
update_options! options
end
def before?
self.class == BeforeFilter
end
@@ -116,6 +121,18 @@ module ActionController #:nodoc:
self.class == AroundFilter
end
# Make sets of strings from :only/:except options
def update_options!(other)
if other
convert_only_and_except_options_to_sets_of_strings(other)
if other[:skip]
convert_only_and_except_options_to_sets_of_strings(other[:skip])
end
end
options.update(other)
end
private
def should_not_skip?(controller)
if options[:skip]
@@ -127,9 +144,9 @@ module ActionController #:nodoc:
def included_in_action?(controller, options)
if options[:only]
Array(options[:only]).map { |o| o.to_s }.include?(controller.action_name)
options[:only].include?(controller.action_name)
elsif options[:except]
!Array(options[:except]).map { |o| o.to_s }.include?(controller.action_name)
!options[:except].include?(controller.action_name)
else
true
end
@@ -138,6 +155,14 @@ module ActionController #:nodoc:
def should_run_callback?(controller)
should_not_skip?(controller) && included_in_action?(controller, options) && super
end
def convert_only_and_except_options_to_sets_of_strings(opts)
[:only, :except].each do |key|
if values = opts[key]
opts[key] = Array(values).map(&:to_s).to_set
end
end
end
end
class AroundFilter < Filter #:nodoc: