diff --git a/lib/cancan/rule.rb b/lib/cancan/rule.rb index 82758ba..f86296f 100644 --- a/lib/cancan/rule.rb +++ b/lib/cancan/rule.rb @@ -55,7 +55,8 @@ module CanCan end def unmergeable? - @conditions.respond_to?(:keys) && (! @conditions.keys.first.kind_of? Symbol) + @conditions.respond_to?(:keys) && @conditions.present? && + (!@conditions.keys.first.kind_of? Symbol) end def associations_hash(conditions = @conditions) diff --git a/spec/cancan/model_adapters/active_record_adapter_spec.rb b/spec/cancan/model_adapters/active_record_adapter_spec.rb index 2f1b7af..a2c2809 100644 --- a/spec/cancan/model_adapters/active_record_adapter_spec.rb +++ b/spec/cancan/model_adapters/active_record_adapter_spec.rb @@ -20,10 +20,12 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record" t.boolean "secret" t.integer "priority" t.integer "category_id" + t.integer "user_id" end model do belongs_to :category has_many :comments + belongs_to :user end end @@ -37,6 +39,15 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record" end end + with_model :user do + table do |t| + + end + model do + has_many :articles + end + end + before(:each) do Article.delete_all Comment.delete_all @@ -233,6 +244,15 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record" @ability.model_adapter(Article, :read).joins.should == [{:project=>[:comments]}] end + it "should merge :all conditions with other conditions" do + user = User.create! + article = Article.create!(:user => user) + ability = Ability.new(user) + ability.can :manage, :all + ability.can :manage, Article, :user_id => user.id + Article.accessible_by(ability).should == [article] + end + it "should restrict articles given a MetaWhere condition" do @ability.can :read, Article, :priority.lt => 2 article1 = Article.create!(:priority => 1) diff --git a/spec/cancan/rule_spec.rb b/spec/cancan/rule_spec.rb index 0fba0ed..9c612cb 100644 --- a/spec/cancan/rule_spec.rb +++ b/spec/cancan/rule_spec.rb @@ -44,4 +44,9 @@ describe CanCan::Rule do @rule.should be_unmergeable end + + it "should be mergeable if conditions is an empty hash" do + @conditions = {} + @rule.should_not be_unmergeable + end end