Fixed bug where conditions on an optionally associated object would throw exceptions if the associated object was not present at the rule match time.

This commit is contained in:
Mitch Williams 2011-04-01 13:19:15 -07:00
parent 7bcfd3d295
commit 6aaab9e440
2 changed files with 8 additions and 1 deletions

View File

@ -109,7 +109,7 @@ module CanCan
if attribute.kind_of? Array
attribute.any? { |element| matches_conditions_hash? element, value }
else
matches_conditions_hash? attribute, value
!attribute.nil? && matches_conditions_hash?(attribute, value)
end
elsif value.kind_of?(Array) || value.kind_of?(Range)
value.include? attribute

View File

@ -250,6 +250,13 @@ describe CanCan::Ability do
@ability.can?(:read, 4..6).should be_false
end
it "should not match subjects return nil for methods that must match nested a nested conditions hash" do
mock(object_with_foo = Object.new).foo { :bar }
@ability.can :read, Array, :first => { :foo => :bar }
@ability.can?(:read, [object_with_foo]).should be_true
@ability.can?(:read, []).should be_false
end
it "should not stop at cannot definition when comparing class" do
@ability.can :read, Range
@ability.cannot :read, Range, :begin => 1