port fix for namespaced params from 2.0 back to 1.6
This commit is contained in:
parent
1cdd7b3c18
commit
b347c7b78c
|
@ -82,10 +82,7 @@ module CanCan
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_resource
|
def build_resource
|
||||||
params = @options[:class] \
|
resource = resource_base.new(resource_params || {})
|
||||||
? @params[@options[:class].to_s.underscore.gsub('/', '_')] \
|
|
||||||
: @params[name] || {}
|
|
||||||
resource = resource_base.new(params)
|
|
||||||
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)
|
||||||
|
@ -95,7 +92,7 @@ module CanCan
|
||||||
|
|
||||||
def initial_attributes
|
def initial_attributes
|
||||||
current_ability.attributes_for(@params[:action].to_sym, resource_class).delete_if do |key, value|
|
current_ability.attributes_for(@params[:action].to_sym, resource_class).delete_if do |key, value|
|
||||||
@params[name] && @params[name].include?(key)
|
resource_params && resource_params.include?(key)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -210,6 +207,14 @@ module CanCan
|
||||||
@name || name_from_controller
|
@name || name_from_controller
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def resource_params
|
||||||
|
if @options[:class]
|
||||||
|
@params[@options[:class].to_s.underscore.gsub('/', '_')]
|
||||||
|
else
|
||||||
|
@params[namespaced_name.to_s.underscore.gsub("/", "_")]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def namespaced_name
|
def namespaced_name
|
||||||
@name || @params[:controller].sub("Controller", "").singularize.camelize.constantize
|
@name || @params[:controller].sub("Controller", "").singularize.camelize.constantize
|
||||||
rescue NameError
|
rescue NameError
|
||||||
|
|
|
@ -47,6 +47,18 @@ describe CanCan::ControllerResource do
|
||||||
@controller.instance_variable_get(:@project).should == project
|
@controller.instance_variable_get(:@project).should == project
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Rails includes namespace in params, see issue #349
|
||||||
|
it "should create through the namespaced params" do
|
||||||
|
module MyEngine
|
||||||
|
class Project < ::Project; end
|
||||||
|
end
|
||||||
|
|
||||||
|
@params.merge!(:controller => "MyEngine::ProjectsController", :action => "create", :my_engine_project => {:name => "foobar"})
|
||||||
|
resource = CanCan::ControllerResource.new(@controller)
|
||||||
|
resource.load_resource
|
||||||
|
@controller.instance_variable_get(:@project).name.should == "foobar"
|
||||||
|
end
|
||||||
|
|
||||||
it "should properly load resource for namespaced controller when using '::' for namespace" do
|
it "should properly load resource for namespaced controller when using '::' for namespace" do
|
||||||
project = Project.create!
|
project = Project.create!
|
||||||
@params.merge!(:controller => "Admin::ProjectsController", :action => "show", :id => project.id)
|
@params.merge!(:controller => "Admin::ProjectsController", :action => "show", :id => project.id)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user