Merge pull request #653 from andhapp/fix-pull-request-640
Init attributes in InheritedResources controller w/ specs
This commit is contained in:
		
						commit
						2b89dbbdfa
					
				@ -83,6 +83,10 @@ module CanCan
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def build_resource
 | 
					    def build_resource
 | 
				
			||||||
      resource = resource_base.new(resource_params || {})
 | 
					      resource = resource_base.new(resource_params || {})
 | 
				
			||||||
 | 
					      assign_attributes(resource)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def assign_attributes(resource)
 | 
				
			||||||
      resource.send("#{parent_name}=", parent_resource) if @options[:singleton] && parent_resource
 | 
					      resource.send("#{parent_name}=", parent_resource) if @options[:singleton] && parent_resource
 | 
				
			||||||
      initial_attributes.each do |attr_name, value|
 | 
					      initial_attributes.each do |attr_name, value|
 | 
				
			||||||
        resource.send("#{attr_name}=", value)
 | 
					        resource.send("#{attr_name}=", value)
 | 
				
			||||||
 | 
				
			|||||||
@ -6,7 +6,8 @@ module CanCan
 | 
				
			|||||||
        @controller.send :association_chain
 | 
					        @controller.send :association_chain
 | 
				
			||||||
        @controller.instance_variable_get("@#{instance_name}")
 | 
					        @controller.instance_variable_get("@#{instance_name}")
 | 
				
			||||||
      elsif new_actions.include? @params[:action].to_sym
 | 
					      elsif new_actions.include? @params[:action].to_sym
 | 
				
			||||||
        @controller.send :build_resource
 | 
					        resource = @controller.send :build_resource
 | 
				
			||||||
 | 
					        assign_attributes(resource)
 | 
				
			||||||
      else
 | 
					      else
 | 
				
			||||||
        @controller.send :resource
 | 
					        @controller.send :resource
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
				
			|||||||
@ -39,4 +39,22 @@ describe CanCan::InheritedResource do
 | 
				
			|||||||
    CanCan::InheritedResource.new(@controller).load_resource
 | 
					    CanCan::InheritedResource.new(@controller).load_resource
 | 
				
			||||||
    @controller.instance_variable_get(:@projects).should == :projects
 | 
					    @controller.instance_variable_get(:@projects).should == :projects
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "should build a new resource with attributes from current ability" do
 | 
				
			||||||
 | 
					    @params[:action] = "new"
 | 
				
			||||||
 | 
					    @ability.can(:create, Project, :name => "from conditions")
 | 
				
			||||||
 | 
					    stub(@controller).build_resource { Struct.new(:name).new }
 | 
				
			||||||
 | 
					    resource = CanCan::InheritedResource.new(@controller)
 | 
				
			||||||
 | 
					    resource.load_resource
 | 
				
			||||||
 | 
					    @controller.instance_variable_get(:@project).name.should == "from conditions"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "should override initial attributes with params" do
 | 
				
			||||||
 | 
					    @params.merge!(:action => "new", :project => {:name => "from params"})
 | 
				
			||||||
 | 
					    @ability.can(:create, Project, :name => "from conditions")
 | 
				
			||||||
 | 
					    stub(@controller).build_resource { Struct.new(:name).new }
 | 
				
			||||||
 | 
					    resource = CanCan::ControllerResource.new(@controller)
 | 
				
			||||||
 | 
					    resource.load_resource
 | 
				
			||||||
 | 
					    @controller.instance_variable_get(:@project).name.should == "from params"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user