support has_many association or arrays in can conditions hash
This commit is contained in:
parent
e20081454f
commit
06296b0a40
|
@ -1,3 +1,5 @@
|
||||||
|
* Support has_many association or arrays in can conditions hash
|
||||||
|
|
||||||
* Adding joins clause to accessible_by when conditions are across associations
|
* Adding joins clause to accessible_by when conditions are across associations
|
||||||
|
|
||||||
1.1.1 (April 17, 2010)
|
1.1.1 (April 17, 2010)
|
||||||
|
|
|
@ -65,7 +65,11 @@ module CanCan
|
||||||
conditions.all? do |name, value|
|
conditions.all? do |name, value|
|
||||||
attribute = subject.send(name)
|
attribute = subject.send(name)
|
||||||
if value.kind_of?(Hash)
|
if value.kind_of?(Hash)
|
||||||
matches_conditions? attribute, value
|
if attribute.kind_of? Array
|
||||||
|
attribute.any? { |element| matches_conditions? element, value }
|
||||||
|
else
|
||||||
|
matches_conditions? attribute, value
|
||||||
|
end
|
||||||
elsif value.kind_of?(Array) || value.kind_of?(Range)
|
elsif value.kind_of?(Array) || value.kind_of?(Range)
|
||||||
value.include? attribute
|
value.include? attribute
|
||||||
else
|
else
|
||||||
|
|
|
@ -168,6 +168,12 @@ describe CanCan::Ability do
|
||||||
@ability.can?(:read, ["test1", "foo"]).should be_true
|
@ability.can?(:read, ["test1", "foo"]).should be_true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should allow nested hash of arrays and match any element" do
|
||||||
|
@ability.can :read, Array, :first => { :to_i => 3 }
|
||||||
|
@ability.can?(:read, [[1, 2, 3]]).should be_true
|
||||||
|
@ability.can?(:read, [[4, 5, 6]]).should be_false
|
||||||
|
end
|
||||||
|
|
||||||
it "should return conditions for a given ability" do
|
it "should return conditions for a given ability" do
|
||||||
@ability.can :read, Array, :first => 1, :last => 3
|
@ability.can :read, Array, :first => 1, :last => 3
|
||||||
@ability.conditions(:show, Array).should == {:first => 1, :last => 3}
|
@ability.conditions(:show, Array).should == {:first => 1, :last => 3}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user