adding more MetaWhere comparison operators
This commit is contained in:
parent
a49269175e
commit
eb2826f135
|
@ -11,9 +11,17 @@ module CanCan
|
||||||
|
|
||||||
def self.matches_condition?(subject, name, value)
|
def self.matches_condition?(subject, name, value)
|
||||||
subject_value = subject.send(name.column)
|
subject_value = subject.send(name.column)
|
||||||
case name.method
|
case name.method.to_sym
|
||||||
when "lt" then subject_value < value
|
when :eq then subject_value == value
|
||||||
when "gt" then subject_value > value
|
when :not_eq then subject_value != value
|
||||||
|
when :in then value.include?(subject_value)
|
||||||
|
when :not_in then !value.include?(subject_value)
|
||||||
|
when :lt then subject_value < value
|
||||||
|
when :lteq then subject_value <= value
|
||||||
|
when :gt then subject_value > value
|
||||||
|
when :gteq then subject_value >= value
|
||||||
|
when :matches then subject_value.downcase.include?(value.downcase)
|
||||||
|
when :does_not_match then !subject_value.downcase.include?(value.downcase)
|
||||||
else raise NotImplemented, "The #{name.method} MetaWhere condition is not supported."
|
else raise NotImplemented, "The #{name.method} MetaWhere condition is not supported."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,6 +19,7 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record"
|
||||||
|
|
||||||
with_model :article do
|
with_model :article do
|
||||||
table do |t|
|
table do |t|
|
||||||
|
t.string "name"
|
||||||
t.boolean "published"
|
t.boolean "published"
|
||||||
t.boolean "secret"
|
t.boolean "secret"
|
||||||
t.integer "priority"
|
t.integer "priority"
|
||||||
|
@ -227,11 +228,27 @@ if ENV["MODEL_ADAPTER"].nil? || ENV["MODEL_ADAPTER"] == "active_record"
|
||||||
|
|
||||||
it "should match any MetaWhere condition" do
|
it "should match any MetaWhere condition" do
|
||||||
adapter = CanCan::ModelAdapters::ActiveRecordAdapter
|
adapter = CanCan::ModelAdapters::ActiveRecordAdapter
|
||||||
article1 = Article.new(:priority => 1)
|
article1 = Article.new(:priority => 1, :name => "Hello World")
|
||||||
|
adapter.matches_condition?(article1, :priority.eq, 1).should be_true
|
||||||
|
adapter.matches_condition?(article1, :priority.eq, 2).should be_false
|
||||||
|
adapter.matches_condition?(article1, :priority.ne, 2).should be_true
|
||||||
|
adapter.matches_condition?(article1, :priority.ne, 1).should be_false
|
||||||
|
adapter.matches_condition?(article1, :priority.in, [1, 2]).should be_true
|
||||||
|
adapter.matches_condition?(article1, :priority.in, [2, 3]).should be_false
|
||||||
|
adapter.matches_condition?(article1, :priority.nin, [2, 3]).should be_true
|
||||||
|
adapter.matches_condition?(article1, :priority.nin, [1, 2]).should be_false
|
||||||
adapter.matches_condition?(article1, :priority.lt, 2).should be_true
|
adapter.matches_condition?(article1, :priority.lt, 2).should be_true
|
||||||
adapter.matches_condition?(article1, :priority.lt, 1).should be_false
|
adapter.matches_condition?(article1, :priority.lt, 1).should be_false
|
||||||
|
adapter.matches_condition?(article1, :priority.lteq, 1).should be_true
|
||||||
|
adapter.matches_condition?(article1, :priority.lteq, 0).should be_false
|
||||||
adapter.matches_condition?(article1, :priority.gt, 0).should be_true
|
adapter.matches_condition?(article1, :priority.gt, 0).should be_true
|
||||||
adapter.matches_condition?(article1, :priority.gt, 1).should be_false
|
adapter.matches_condition?(article1, :priority.gt, 1).should be_false
|
||||||
|
adapter.matches_condition?(article1, :priority.gteq, 1).should be_true
|
||||||
|
adapter.matches_condition?(article1, :priority.gteq, 2).should be_false
|
||||||
|
adapter.matches_condition?(article1, :name.like, "ello worl").should be_true
|
||||||
|
adapter.matches_condition?(article1, :name.like, "helo").should be_false
|
||||||
|
adapter.matches_condition?(article1, :name.nlike, "helo").should be_true
|
||||||
|
adapter.matches_condition?(article1, :name.nlike, "ello worl").should be_false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user