properly pass along resource name without slice error - closes #112
This commit is contained in:
		
							parent
							
								
									cd74267364
								
							
						
					
					
						commit
						333ddf1970
					
				@ -2,9 +2,11 @@ module CanCan
 | 
				
			|||||||
  # Handle the load and authorization controller logic so we don't clutter up all controllers with non-interface methods.
 | 
					  # Handle the load and authorization controller logic so we don't clutter up all controllers with non-interface methods.
 | 
				
			||||||
  # This class is used internally, so you do not need to call methods directly on it.
 | 
					  # This class is used internally, so you do not need to call methods directly on it.
 | 
				
			||||||
  class ControllerResource # :nodoc:
 | 
					  class ControllerResource # :nodoc:
 | 
				
			||||||
    def self.add_before_filter(controller_class, method, options = {})
 | 
					    def self.add_before_filter(controller_class, method, *args)
 | 
				
			||||||
 | 
					      options = args.extract_options!
 | 
				
			||||||
 | 
					      resource_name = args.first
 | 
				
			||||||
      controller_class.before_filter(options.slice(:only, :except)) do |controller|
 | 
					      controller_class.before_filter(options.slice(:only, :except)) do |controller|
 | 
				
			||||||
        ControllerResource.new(controller, options.except(:only, :except)).send(method)
 | 
					        ControllerResource.new(controller, resource_name, options.except(:only, :except)).send(method)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -53,19 +53,25 @@ describe CanCan::ControllerAdditions do
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "load_and_authorize_resource should setup a before filter which passes call to ControllerResource" do
 | 
					  it "load_and_authorize_resource should setup a before filter which passes call to ControllerResource" do
 | 
				
			||||||
    stub(CanCan::ControllerResource).new(@controller, :foo => :bar).mock!.load_and_authorize_resource
 | 
					    stub(CanCan::ControllerResource).new(@controller, nil, :foo => :bar).mock!.load_and_authorize_resource
 | 
				
			||||||
    mock(@controller_class).before_filter({}) { |options, block| block.call(@controller) }
 | 
					    mock(@controller_class).before_filter({}) { |options, block| block.call(@controller) }
 | 
				
			||||||
    @controller_class.load_and_authorize_resource :foo => :bar
 | 
					    @controller_class.load_and_authorize_resource :foo => :bar
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "load_and_authorize_resource should properly pass first argument as the resource name" do
 | 
				
			||||||
 | 
					    stub(CanCan::ControllerResource).new(@controller, :project, :foo => :bar).mock!.load_and_authorize_resource
 | 
				
			||||||
 | 
					    mock(@controller_class).before_filter({}) { |options, block| block.call(@controller) }
 | 
				
			||||||
 | 
					    @controller_class.load_and_authorize_resource :project, :foo => :bar
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "authorize_resource should setup a before filter which passes call to ControllerResource" do
 | 
					  it "authorize_resource should setup a before filter which passes call to ControllerResource" do
 | 
				
			||||||
    stub(CanCan::ControllerResource).new(@controller, :foo => :bar).mock!.authorize_resource
 | 
					    stub(CanCan::ControllerResource).new(@controller, nil, :foo => :bar).mock!.authorize_resource
 | 
				
			||||||
    mock(@controller_class).before_filter(:except => :show) { |options, block| block.call(@controller) }
 | 
					    mock(@controller_class).before_filter(:except => :show) { |options, block| block.call(@controller) }
 | 
				
			||||||
    @controller_class.authorize_resource :foo => :bar, :except => :show
 | 
					    @controller_class.authorize_resource :foo => :bar, :except => :show
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  it "load_resource should setup a before filter which passes call to ControllerResource" do
 | 
					  it "load_resource should setup a before filter which passes call to ControllerResource" do
 | 
				
			||||||
    stub(CanCan::ControllerResource).new(@controller, :foo => :bar).mock!.load_resource
 | 
					    stub(CanCan::ControllerResource).new(@controller, nil, :foo => :bar).mock!.load_resource
 | 
				
			||||||
    mock(@controller_class).before_filter(:only => [:show, :index]) { |options, block| block.call(@controller) }
 | 
					    mock(@controller_class).before_filter(:only => [:show, :index]) { |options, block| block.call(@controller) }
 | 
				
			||||||
    @controller_class.load_resource :foo => :bar, :only => [:show, :index]
 | 
					    @controller_class.load_resource :foo => :bar, :only => [:show, :index]
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user