delegating ControllerResource find to model adapter, uses 'get' for DataMapper - closes #373
This commit is contained in:
parent
c031f82dd2
commit
613ab1c1ab
|
@ -107,11 +107,15 @@ module CanCan
|
||||||
resource_base.send(@options[:find_by], id_param)
|
resource_base.send(@options[:find_by], id_param)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
resource_base.find(id_param)
|
adapter.find(resource_base, id_param)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def adapter
|
||||||
|
ModelAdapters::AbstractAdapter.adapter_class(resource_class)
|
||||||
|
end
|
||||||
|
|
||||||
def authorization_action
|
def authorization_action
|
||||||
parent? ? :show : @params[:action].to_sym
|
parent? ? :show : @params[:action].to_sym
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,6 +15,11 @@ module CanCan
|
||||||
false # override in subclass
|
false # override in subclass
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Override if you need custom find behavior
|
||||||
|
def self.find(model_class, id)
|
||||||
|
model_class.find(id)
|
||||||
|
end
|
||||||
|
|
||||||
# Used to determine if this model adapter will override the matching behavior for a hash of conditions.
|
# Used to determine if this model adapter will override the matching behavior for a hash of conditions.
|
||||||
# If this returns true then matches_conditions_hash? will be called. See Rule#matches_conditions_hash
|
# If this returns true then matches_conditions_hash? will be called. See Rule#matches_conditions_hash
|
||||||
def self.override_conditions_hash_matching?(subject, conditions)
|
def self.override_conditions_hash_matching?(subject, conditions)
|
||||||
|
|
|
@ -5,6 +5,10 @@ module CanCan
|
||||||
model_class <= DataMapper::Resource
|
model_class <= DataMapper::Resource
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.find(model_class, id)
|
||||||
|
model_class.get(id)
|
||||||
|
end
|
||||||
|
|
||||||
def self.override_conditions_hash_matching?(subject, conditions)
|
def self.override_conditions_hash_matching?(subject, conditions)
|
||||||
conditions.any? { |k,v| !k.kind_of?(Symbol) }
|
conditions.any? { |k,v| !k.kind_of?(Symbol) }
|
||||||
end
|
end
|
||||||
|
|
|
@ -56,6 +56,11 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record"
|
||||||
CanCan::ModelAdapters::AbstractAdapter.adapter_class(Article).should == CanCan::ModelAdapters::ActiveRecordAdapter
|
CanCan::ModelAdapters::AbstractAdapter.adapter_class(Article).should == CanCan::ModelAdapters::ActiveRecordAdapter
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should find record" do
|
||||||
|
article = Article.create!
|
||||||
|
CanCan::ModelAdapters::ActiveRecordAdapter.find(Article, article.id).should == article
|
||||||
|
end
|
||||||
|
|
||||||
it "should not fetch any records when no abilities are defined" do
|
it "should not fetch any records when no abilities are defined" do
|
||||||
Article.create!
|
Article.create!
|
||||||
Article.accessible_by(@ability).should be_empty
|
Article.accessible_by(@ability).should be_empty
|
||||||
|
|
|
@ -36,6 +36,11 @@ if ENV["MODEL_ADAPTER"] == "data_mapper"
|
||||||
CanCan::ModelAdapters::AbstractAdapter.adapter_class(Article).should == CanCan::ModelAdapters::DataMapperAdapter
|
CanCan::ModelAdapters::AbstractAdapter.adapter_class(Article).should == CanCan::ModelAdapters::DataMapperAdapter
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should find record" do
|
||||||
|
article = Article.create
|
||||||
|
CanCan::ModelAdapters::DataMapperAdapter.find(Article, article.id).should == article
|
||||||
|
end
|
||||||
|
|
||||||
it "should not fetch any records when no abilities are defined" do
|
it "should not fetch any records when no abilities are defined" do
|
||||||
Article.create
|
Article.create
|
||||||
Article.accessible_by(@ability).should be_empty
|
Article.accessible_by(@ability).should be_empty
|
||||||
|
|
|
@ -36,6 +36,11 @@ if ENV["MODEL_ADAPTER"] == "mongoid"
|
||||||
CanCan::ModelAdapters::AbstractAdapter.adapter_class(MongoidProject).should == CanCan::ModelAdapters::MongoidAdapter
|
CanCan::ModelAdapters::AbstractAdapter.adapter_class(MongoidProject).should == CanCan::ModelAdapters::MongoidAdapter
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should find record" do
|
||||||
|
project = MongoidProject.create
|
||||||
|
CanCan::ModelAdapters::MongoidAdapter.find(MongoidProject, project.id).should == project
|
||||||
|
end
|
||||||
|
|
||||||
it "should compare properties on mongoid documents with the conditions hash" do
|
it "should compare properties on mongoid documents with the conditions hash" do
|
||||||
model = MongoidProject.new
|
model = MongoidProject.new
|
||||||
@ability.can :read, MongoidProject, :id => model.id
|
@ability.can :read, MongoidProject, :id => model.id
|
||||||
|
|
Loading…
Reference in New Issue
Block a user