Permalink
Browse files

Fix NoMethodError

Raises NoMethodError when using ":singleton => true, :shallow => true" and parent_resource is nil
  • Loading branch information...
nandalopes authored and ryanb committed Nov 3, 2010
1 parent cf263c1 commit 9a7c4273737b415fa6f7a9c68c11c0754bf134ab
Showing with 21 additions and 2 deletions.
  1. +6 −2 lib/cancan/controller_resource.rb
  2. +15 −0 spec/cancan/controller_resource_spec.rb
@@ -61,7 +61,11 @@ def load_collection
end
def build_resource
- resource = resource_base.send(@options[:singleton] ? "build_#{name}" : "new")
+ if @options[:singleton] && resource_base.respond_to?("build_#{name}")
+ resource = resource_base.send("build_#{name}")
+ else
+ resource = resource_base.send("new")
+ end
initial_attributes.each do |name, value|
resource.send("#{name}=", value)
end
@@ -74,7 +78,7 @@ def initial_attributes
end
def find_resource
- if @options[:singleton]
+ if @options[:singleton] && resource_base.respond_to?(name)
resource_base.send(name)
else
@options[:find_by] ? resource_base.send("find_by_#{@options[:find_by]}!", id_param) : resource_base.find(id_param)
@@ -241,6 +241,21 @@
@controller.instance_variable_get(:@project).name.should == "foobar"
end
+ it "should find record through has_one association with :singleton and :shallow options" do
+ project = Project.create!
+ @params.merge!(:action => "show", :id => project.id)
+ resource = CanCan::ControllerResource.new(@controller, :through => :category, :singleton => true, :shallow => true)
+ resource.load_resource
+ @controller.instance_variable_get(:@project).should == project
+ end
+
+ it "should build record through has_one association with :singleton and :shallow options" do
+ @params.merge!(:action => "create", :project => {:name => "foobar"})
+ resource = CanCan::ControllerResource.new(@controller, :through => :category, :singleton => true, :shallow => true)
+ resource.load_resource
+ @controller.instance_variable_get(:@project).name.should == "foobar"
+ end
+
it "should only authorize :read action on parent resource" do
project = Project.create!
@params.merge!(:action => "new", :project_id => project.id)

0 comments on commit 9a7c427

Please sign in to comment.