Permalink
Browse files

support has_many association or arrays in can conditions hash

  • Loading branch information...
1 parent e200814 commit 06296b0a40a1ce7e575441d113504b4ae0702fdc @ryanb committed Apr 23, 2010
Showing with 13 additions and 1 deletion.
  1. +2 −0 CHANGELOG.rdoc
  2. +5 −1 lib/cancan/can_definition.rb
  3. +6 −0 spec/cancan/ability_spec.rb
View
@@ -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
1.1.1 (April 17, 2010)
@@ -65,7 +65,11 @@ def matches_conditions?(subject, conditions = @conditions)
conditions.all? do |name, value|
attribute = subject.send(name)
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)
value.include? attribute
else
@@ -168,6 +168,12 @@
@ability.can?(:read, ["test1", "foo"]).should be_true
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
@ability.can :read, Array, :first => 1, :last => 3
@ability.conditions(:show, Array).should == {:first => 1, :last => 3}

0 comments on commit 06296b0

Please sign in to comment.