Get all the callback tests to work on new base

上级 dcba6e11
...@@ -26,6 +26,12 @@ def _normalize_callback_options(options) ...@@ -26,6 +26,12 @@ def _normalize_callback_options(options)
end end
end end
def skip_filter(*names, &blk)
skip_before_filter(*names, &blk)
skip_after_filter(*names, &blk)
skip_around_filter(*names, &blk)
end
[:before, :after, :around].each do |filter| [:before, :after, :around].each do |filter|
class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
def #{filter}_filter(*names, &blk) def #{filter}_filter(*names, &blk)
......
...@@ -231,24 +231,29 @@ def find_user ...@@ -231,24 +231,29 @@ def find_user
end end
class ConditionalParentOfConditionalSkippingController < ConditionalFilterController class ConditionalParentOfConditionalSkippingController < ConditionalFilterController
before_filter :conditional_in_parent, :only => [:show, :another_action] before_filter :conditional_in_parent_before, :only => [:show, :another_action]
after_filter :conditional_in_parent, :only => [:show, :another_action] after_filter :conditional_in_parent_after, :only => [:show, :another_action]
private private
def conditional_in_parent def conditional_in_parent_before
@ran_filter ||= [] @ran_filter ||= []
@ran_filter << 'conditional_in_parent' @ran_filter << 'conditional_in_parent_before'
end
def conditional_in_parent_after
@ran_filter ||= []
@ran_filter << 'conditional_in_parent_after'
end end
end end
class ChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController class ChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController
skip_before_filter :conditional_in_parent, :only => :another_action skip_before_filter :conditional_in_parent_before, :only => :another_action
skip_after_filter :conditional_in_parent, :only => :another_action skip_after_filter :conditional_in_parent_after, :only => :another_action
end end
class AnotherChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController class AnotherChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController
skip_before_filter :conditional_in_parent, :only => :show skip_before_filter :conditional_in_parent_before, :only => :show
end end
class ProcController < PrependingController class ProcController < PrependingController
...@@ -593,11 +598,22 @@ def test_having_properties_in_around_filter ...@@ -593,11 +598,22 @@ def test_having_properties_in_around_filter
assert_equal "before and after", assigns["execution_log"] assert_equal "before and after", assigns["execution_log"]
end end
def test_prepending_and_appending_around_filter for_tag(:old_base) do
controller = test_process(MixedFilterController) def test_prepending_and_appending_around_filter
assert_equal " before aroundfilter before procfilter before appended aroundfilter " + controller = test_process(MixedFilterController)
" after appended aroundfilter after aroundfilter after procfilter ", assert_equal " before aroundfilter before procfilter before appended aroundfilter " +
MixedFilterController.execution_log " after appended aroundfilter after aroundfilter after procfilter ",
MixedFilterController.execution_log
end
end
for_tag(:new_base) do
def test_prepending_and_appending_around_filter
controller = test_process(MixedFilterController)
assert_equal " before aroundfilter before procfilter before appended aroundfilter " +
" after appended aroundfilter after procfilter after aroundfilter ",
MixedFilterController.execution_log
end
end end
def test_rendering_breaks_filtering_chain def test_rendering_breaks_filtering_chain
...@@ -658,18 +674,18 @@ def test_conditional_skipping_of_filters ...@@ -658,18 +674,18 @@ def test_conditional_skipping_of_filters
def test_conditional_skipping_of_filters_when_parent_filter_is_also_conditional def test_conditional_skipping_of_filters_when_parent_filter_is_also_conditional
test_process(ChildOfConditionalParentController) test_process(ChildOfConditionalParentController)
assert_equal %w( conditional_in_parent conditional_in_parent ), assigns['ran_filter'] assert_equal %w( conditional_in_parent_before conditional_in_parent_after ), assigns['ran_filter']
test_process(ChildOfConditionalParentController, 'another_action') test_process(ChildOfConditionalParentController, 'another_action')
assert_nil assigns['ran_filter'] assert_nil assigns['ran_filter']
end end
def test_condition_skipping_of_filters_when_siblings_also_have_conditions def test_condition_skipping_of_filters_when_siblings_also_have_conditions
test_process(ChildOfConditionalParentController) test_process(ChildOfConditionalParentController)
assert_equal %w( conditional_in_parent conditional_in_parent ), assigns['ran_filter'], "1" assert_equal %w( conditional_in_parent_before conditional_in_parent_after ), assigns['ran_filter']
test_process(AnotherChildOfConditionalParentController) test_process(AnotherChildOfConditionalParentController)
assert_equal nil, assigns['ran_filter'] assert_equal %w( conditional_in_parent_after ), assigns['ran_filter']
test_process(ChildOfConditionalParentController) test_process(ChildOfConditionalParentController)
assert_equal %w( conditional_in_parent conditional_in_parent ), assigns['ran_filter'] assert_equal %w( conditional_in_parent_before conditional_in_parent_after ), assigns['ran_filter']
end end
def test_changing_the_requirements def test_changing_the_requirements
...@@ -823,7 +839,9 @@ def around_again ...@@ -823,7 +839,9 @@ def around_again
end end
class ControllerWithTwoLessFilters < ControllerWithAllTypesOfFilters class ControllerWithTwoLessFilters < ControllerWithAllTypesOfFilters
$vbf = true
skip_filter :around_again skip_filter :around_again
$vbf = false
skip_filter :after skip_filter :after
end end
...@@ -886,9 +904,18 @@ def test_nested_filters ...@@ -886,9 +904,18 @@ def test_nested_filters
end end
end end
def test_filter_order_with_all_filter_types for_tag(:old_base) do
test_process(ControllerWithAllTypesOfFilters,'no_raise') def test_filter_order_with_all_filter_types
assert_equal 'before around (before yield) around_again (before yield) around_again (after yield) around (after yield) after', assigns['ran_filter'].join(' ') test_process(ControllerWithAllTypesOfFilters,'no_raise')
assert_equal 'before around (before yield) around_again (before yield) around_again (after yield) around (after yield) after', assigns['ran_filter'].join(' ')
end
end
for_tag(:new_base) do
def test_filter_order_with_all_filter_types
test_process(ControllerWithAllTypesOfFilters,'no_raise')
assert_equal 'before around (before yield) around_again (before yield) around_again (after yield) after around (after yield)', assigns['ran_filter'].join(' ')
end
end end
def test_filter_order_with_skip_filter_method def test_filter_order_with_skip_filter_method
...@@ -901,7 +928,6 @@ def test_first_filter_in_multiple_before_filter_chain_halts ...@@ -901,7 +928,6 @@ def test_first_filter_in_multiple_before_filter_chain_halts
response = test_process(controller, 'fail_1') response = test_process(controller, 'fail_1')
assert_equal ' ', response.body assert_equal ' ', response.body
assert_equal 1, controller.instance_variable_get(:@try) assert_equal 1, controller.instance_variable_get(:@try)
assert controller.instance_variable_get(:@before_filter_chain_aborted)
end end
def test_second_filter_in_multiple_before_filter_chain_halts def test_second_filter_in_multiple_before_filter_chain_halts
...@@ -909,7 +935,6 @@ def test_second_filter_in_multiple_before_filter_chain_halts ...@@ -909,7 +935,6 @@ def test_second_filter_in_multiple_before_filter_chain_halts
response = test_process(controller, 'fail_2') response = test_process(controller, 'fail_2')
assert_equal ' ', response.body assert_equal ' ', response.body
assert_equal 2, controller.instance_variable_get(:@try) assert_equal 2, controller.instance_variable_get(:@try)
assert controller.instance_variable_get(:@before_filter_chain_aborted)
end end
def test_last_filter_in_multiple_before_filter_chain_halts def test_last_filter_in_multiple_before_filter_chain_halts
...@@ -917,7 +942,6 @@ def test_last_filter_in_multiple_before_filter_chain_halts ...@@ -917,7 +942,6 @@ def test_last_filter_in_multiple_before_filter_chain_halts
response = test_process(controller, 'fail_3') response = test_process(controller, 'fail_3')
assert_equal ' ', response.body assert_equal ' ', response.body
assert_equal 3, controller.instance_variable_get(:@try) assert_equal 3, controller.instance_variable_get(:@try)
assert controller.instance_variable_get(:@before_filter_chain_aborted)
end end
protected protected
......
...@@ -286,7 +286,14 @@ def _compile_filter(filter) ...@@ -286,7 +286,14 @@ def _compile_filter(filter)
filter filter
when Proc when Proc
@klass.send(:define_method, method_name, &filter) @klass.send(:define_method, method_name, &filter)
method_name << (filter.arity == 1 ? "(self)" : "") method_name << case filter.arity
when 1
"(self)"
when 2
" self, Proc.new "
else
""
end
when Method when Method
@klass.send(:define_method, "#{method_name}_method") { filter } @klass.send(:define_method, "#{method_name}_method") { filter }
@klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 @klass.class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
...@@ -378,7 +385,7 @@ module ClassMethods ...@@ -378,7 +385,7 @@ module ClassMethods
# The _run_save_callbacks method can optionally take a key, which # The _run_save_callbacks method can optionally take a key, which
# will be used to compile an optimized callback method for each # will be used to compile an optimized callback method for each
# key. See #define_callbacks for more information. # key. See #define_callbacks for more information.
def _define_runner(symbol, str, options) def _define_runner(symbol, str, options)
str = <<-RUBY_EVAL str = <<-RUBY_EVAL
def _run_#{symbol}_callbacks(key = nil) def _run_#{symbol}_callbacks(key = nil)
if key if key
...@@ -492,7 +499,7 @@ def self.skip_#{symbol}_callback(*filters, &blk) ...@@ -492,7 +499,7 @@ def self.skip_#{symbol}_callback(*filters, &blk)
filter = self._#{symbol}_callbacks.find {|c| c.matches?(type, :#{symbol}, filter) } filter = self._#{symbol}_callbacks.find {|c| c.matches?(type, :#{symbol}, filter) }
per_key = options[:per_key] || {} per_key = options[:per_key] || {}
if filter if filter && options.any?
filter.recompile!(options, per_key) filter.recompile!(options, per_key)
else else
self._#{symbol}_callbacks.delete(filter) self._#{symbol}_callbacks.delete(filter)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册