Skip to content

Commit

Permalink
Added support for engines and namespaced models.
Browse files Browse the repository at this point in the history
  • Loading branch information
Steven Anderson committed Jul 20, 2011
1 parent 600a3e1 commit 6c497b8
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
8 changes: 7 additions & 1 deletion lib/cancan/controller_resource.rb
Expand Up @@ -134,7 +134,7 @@ def member_action?
def resource_class
case @options[:class]
when false then name.to_sym
when nil then name.to_s.camelize.constantize
when nil then namespaced_name.to_s.camelize.constantize
when String then @options[:class].constantize
else @options[:class]
end
Expand Down Expand Up @@ -203,6 +203,12 @@ def name
@name || name_from_controller
end

def namespaced_name
@params[:controller].sub("Controller", "").singularize.constantize
rescue NameError
name
end

def name_from_controller
@params[:controller].sub("Controller", "").underscore.split('/').last.singularize
end
Expand Down
12 changes: 12 additions & 0 deletions spec/cancan/controller_resource_spec.rb
Expand Up @@ -35,6 +35,18 @@
@controller.instance_variable_get(:@project).should == project
end

it "should attempt to load a resource with the same namespace as the controller when using :: for namespace" do
module MyEngine
class Project < ::Project; end
end

project = MyEngine::Project.create!
@params.merge!(:controller => "MyEngine::ProjectsController", :action => "show", :id => project.id)
resource = CanCan::ControllerResource.new(@controller)
resource.load_resource
@controller.instance_variable_get(:@project).should == project
end

it "should properly load resource for namespaced controller when using '::' for namespace" do
project = Project.create!
@params.merge!(:controller => "Admin::ProjectsController", :action => "show", :id => project.id)
Expand Down

0 comments on commit 6c497b8

Please sign in to comment.