diff --git a/CHANGELOG.rdoc b/CHANGELOG.rdoc index a3260a7..ed13169 100644 --- a/CHANGELOG.rdoc +++ b/CHANGELOG.rdoc @@ -1,6 +1,6 @@ * Adding :find_by option to load_resource - see issue #19 -* Adding :singular option to load_resource - see issue #93 +* Adding :singleton option to load_resource - see issue #93 * Supporting multiple resources in :through option for polymorphic associations - see issue #73 diff --git a/lib/cancan/controller_additions.rb b/lib/cancan/controller_additions.rb index 3ce9d44..79a5e6e 100644 --- a/lib/cancan/controller_additions.rb +++ b/lib/cancan/controller_additions.rb @@ -67,8 +67,8 @@ module CanCan # [:+through+] # Load this resource through another one. This should match the name of the parent instance variable. # - # [:+singular+] - # Pass +true+ if this is a singular resource through a +has_one+ association. + # [:+singleton+] + # Pass +true+ if this is a singleton resource through a +has_one+ association. # # [:+parent+] # True or false depending on if the resource is considered a parent resource. This defaults to +true+ if a resource diff --git a/lib/cancan/controller_resource.rb b/lib/cancan/controller_resource.rb index 3d4dcc6..587e9c6 100644 --- a/lib/cancan/controller_resource.rb +++ b/lib/cancan/controller_resource.rb @@ -42,18 +42,18 @@ module CanCan def load_resource_instance if !parent? && new_actions.include?(@params[:action].to_sym) build_resource - elsif id_param || @options[:singular] + elsif id_param || @options[:singleton] find_resource end end def build_resource - method_name = @options[:singular] ? "build_#{name}" : "new" + method_name = @options[:singleton] ? "build_#{name}" : "new" resource_base.send(*[method_name, @params[name]].compact) end def find_resource - if @options[:singular] + if @options[:singleton] resource_base.send(name) else @options[:find_by] ? resource_base.send("find_by_#{@options[:find_by]}!", id_param) : resource_base.find(id_param) @@ -90,10 +90,10 @@ module CanCan # The object that methods (such as "find", "new" or "build") are called on. # If the :through option is passed it will go through an association on that instance. - # If the :singular option is passed it won't use the association because it needs to be handled later. + # If the :singleton option is passed it won't use the association because it needs to be handled later. def resource_base if through_resource - @options[:singular] ? through_resource : through_resource.send(name.to_s.pluralize) + @options[:singleton] ? through_resource : through_resource.send(name.to_s.pluralize) else resource_class end diff --git a/spec/cancan/controller_resource_spec.rb b/spec/cancan/controller_resource_spec.rb index 70b8279..8b8e693 100644 --- a/spec/cancan/controller_resource_spec.rb +++ b/spec/cancan/controller_resource_spec.rb @@ -166,22 +166,22 @@ describe CanCan::ControllerResource do @controller.instance_variable_get(:@ability).should == :some_ability end - it "should find record through has_one association with :singular option" do + it "should find record through has_one association with :singleton option" do @params.merge!(:action => "show") person = Object.new @controller.instance_variable_set(:@person, person) stub(person).ability { :some_ability } - resource = CanCan::ControllerResource.new(@controller, :through => :person, :singular => true) + resource = CanCan::ControllerResource.new(@controller, :through => :person, :singleton => true) resource.load_resource @controller.instance_variable_get(:@ability).should == :some_ability end - it "should build record through has_one association with :singular option" do + it "should build record through has_one association with :singleton option" do @params.merge!(:action => "create", :ability => :ability_attributes) person = Object.new @controller.instance_variable_set(:@person, person) stub(person).build_ability(:ability_attributes) { :new_ability } - resource = CanCan::ControllerResource.new(@controller, :through => :person, :singular => true) + resource = CanCan::ControllerResource.new(@controller, :through => :person, :singleton => true) resource.load_resource @controller.instance_variable_get(:@ability).should == :new_ability end