Changeset 4167
- Timestamp:
- 04/05/06 04:39:59 (2 years ago)
- Files:
-
- trunk/actionpack/CHANGELOG (modified) (1 diff)
- trunk/actionpack/lib/action_controller/filters.rb (modified) (3 diffs)
- trunk/actionpack/test/controller/filters_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/actionpack/CHANGELOG
r4161 r4167 1 1 *SVN* 2 3 * Honor skipping filters conditionally for only certain actions even when the parent class sets that filter to conditionally be executed only for the same actions. #4522 [Marcel Molina Jr.] 2 4 3 5 * Delegate xml_http_request in integration tests to the session instance. [Jamis Buck] trunk/actionpack/lib/action_controller/filters.rb
r3989 r4167 256 256 def skip_before_filter(*filters) 257 257 if conditions = extract_conditions!(filters) 258 remove_contradicting_conditions!(filters, conditions) 258 259 conditions[:only], conditions[:except] = conditions[:except], conditions[:only] 259 260 add_action_conditions(filters, conditions) … … 273 274 def skip_after_filter(*filters) 274 275 if conditions = extract_conditions!(filters) 276 remove_contradicting_conditions!(filters, conditions) 275 277 conditions[:only], conditions[:except] = conditions[:except], conditions[:only] 276 278 add_action_conditions(filters, conditions) … … 332 334 def condition_hash(filters, *actions) 333 335 filters.inject({}) {|hash, filter| hash.merge(filter => actions.flatten.map {|action| action.to_s})} 336 end 337 338 def remove_contradicting_conditions!(filters, conditions) 339 return unless conditions[:only] 340 filters.each do |filter| 341 next unless included_actions_for_filter = included_actions[filter] 342 [*conditions[:only]].each do |conditional_action| 343 conditional_action = conditional_action.to_s 344 included_actions_for_filter.delete(conditional_action) if included_actions_for_filter.include?(conditional_action) 345 end 346 end 334 347 end 335 348 end trunk/actionpack/test/controller/filters_test.rb
r3580 r4167 127 127 end 128 128 end 129 129 130 class ConditionalParentOfConditionalSkippingController < ConditionalFilterController 131 before_filter :conditional_in_parent, :only => [:show, :another_action] 132 after_filter :conditional_in_parent, :only => [:show, :another_action] 133 134 private 135 136 def conditional_in_parent 137 @ran_filter ||= [] 138 @ran_filter << 'conditional_in_parent' 139 end 140 end 141 142 class ChildOfConditionalParentController < ConditionalParentOfConditionalSkippingController 143 skip_before_filter :conditional_in_parent, :only => :another_action 144 skip_after_filter :conditional_in_parent, :only => :another_action 145 end 130 146 131 147 class ProcController < PrependingController … … 373 389 end 374 390 391 def test_conditional_skipping_of_filters_when_parent_filter_is_also_conditional 392 assert_equal %w( conditional_in_parent conditional_in_parent ), test_process(ChildOfConditionalParentController).template.assigns['ran_filter'] 393 assert_nil test_process(ChildOfConditionalParentController, 'another_action').template.assigns['ran_filter'] 394 end 395 375 396 private 376 397 def test_process(controller, action = "show")