don't pass action into can block with :manage option - closes #129
This commit is contained in:
		
							parent
							
								
									6105edc6a7
								
							
						
					
					
						commit
						b1fb179aaf
					
				@ -26,7 +26,7 @@ module CanCan
 | 
			
		||||
    # Matches the block or conditions hash
 | 
			
		||||
    def matches_conditions?(action, subject, extra_args)
 | 
			
		||||
      if @block && subject.class != Class
 | 
			
		||||
        call_block(action, subject, extra_args)
 | 
			
		||||
        @block.call(subject, *extra_args)
 | 
			
		||||
      elsif @conditions.kind_of?(Hash) && subject.class != Class
 | 
			
		||||
        matches_conditions_hash?(subject)
 | 
			
		||||
      else
 | 
			
		||||
@ -91,13 +91,5 @@ module CanCan
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def call_block(action, subject, extra_args)
 | 
			
		||||
      block_args = []
 | 
			
		||||
      block_args << action if @expanded_actions.include?(:manage)
 | 
			
		||||
      block_args << (subject.class == Class ? nil : subject)
 | 
			
		||||
      block_args += extra_args
 | 
			
		||||
      @block.call(*block_args)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
@ -56,9 +56,8 @@ describe CanCan::Ability do
 | 
			
		||||
    @block_called.should be_false
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  it "should pass action and object for global manage actions" do
 | 
			
		||||
    @ability.can :manage, Array do |action, object|
 | 
			
		||||
      action.should == :stuff
 | 
			
		||||
  it "should pass only object for global manage actions" do
 | 
			
		||||
    @ability.can :manage, Array do |object|
 | 
			
		||||
      object.should == [1, 2]
 | 
			
		||||
      @block_called = true
 | 
			
		||||
    end
 | 
			
		||||
@ -80,9 +79,8 @@ describe CanCan::Ability do
 | 
			
		||||
    @ability.can?(:increment, 123).should be_true
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  it "should return block result for action, object_class, and object for any action" do
 | 
			
		||||
    @ability.can :manage, :all do |action, object|
 | 
			
		||||
      action.should == :foo
 | 
			
		||||
  it "should return block result and only pass object for any action" do
 | 
			
		||||
    @ability.can :manage, :all do |object|
 | 
			
		||||
      object.should == 123
 | 
			
		||||
      @block_called = true
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user