Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 9080

Show
Ignore:
Timestamp:
03/23/08 01:48:17 (6 months ago)
Author:
rick
Message:

Fix regression from filter refactoring where re-adding a skipped filter resulted in it being called twice. [rick]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/actionpack/CHANGELOG

    r9065 r9080  
    11*SVN* 
     2 
     3* Fix regression from filter refactoring where re-adding a skipped filter resulted in it being called twice.  [rick] 
    24 
    35* Refactor filters to use Active Support callbacks.  #11235 [Josh Peek] 
  • trunk/actionpack/lib/action_controller/filters.rb

    r9055 r9080  
    265265      def skip_filter_in_chain(*filters, &test) 
    266266        filters, conditions = extract_options(filters) 
     267        filters.each do |filter| 
     268          if callback = find_callback(filter) then delete(callback) end 
     269        end if conditions.empty? 
    267270        update_filter_in_chain(filters, :skip => conditions, &test) 
    268271      end 
  • trunk/actionpack/test/controller/filters_test.rb

    r9055 r9080  
    159159  end 
    160160 
     161  class SkippingAndLimitedController < TestController 
     162    skip_before_filter :ensure_login 
     163    before_filter :ensure_login, :only => :index 
     164 
     165    def index 
     166      render :text => 'ok' 
     167    end 
     168     
     169    def public 
     170    end 
     171  end 
     172   
     173  class SkippingAndReorderingController < TestController 
     174    skip_before_filter :ensure_login 
     175    before_filter :find_record 
     176    before_filter :ensure_login 
     177 
     178    private 
     179      def find_record 
     180        @ran_filter ||= [] 
     181        @ran_filter << "find_record" 
     182      end 
     183  end 
     184 
    161185  class ConditionalSkippingController < TestController 
    162186    skip_before_filter :ensure_login, :only => [ :login ] 
     
    565589    response = test_process(PrependingBeforeAndAfterController) 
    566590    assert_equal %w( before_all between_before_all_and_after_all after_all ), response.template.assigns["ran_filter"] 
     591  end 
     592   
     593  def test_skipping_and_limiting_controller 
     594    assert_equal %w( ensure_login ), test_process(SkippingAndLimitedController, "index").template.assigns["ran_filter"] 
     595    assert_nil test_process(SkippingAndLimitedController, "public").template.assigns["ran_filter"] 
     596  end 
     597 
     598  def test_skipping_and_reordering_controller 
     599    assert_equal %w( find_record ensure_login ), test_process(SkippingAndReorderingController, "index").template.assigns["ran_filter"] 
    567600  end 
    568601