Add not_true and not_false predicates

This commit is contained in:
Pedro Chambino 2014-08-27 01:50:47 +01:00
parent 64827eeffe
commit 752dc781b3
2 changed files with 48 additions and 0 deletions

View File

@ -55,6 +55,14 @@ module Ransack
:formatter => proc { |v| true }
}
],
['not_true', {
:arel_predicate => proc { |v| v ? 'not_eq' : 'eq' },
:compounds => false,
:type => :boolean,
:validator => proc { |v| BOOLEAN_VALUES.include?(v) },
:formatter => proc { |v| true }
}
],
['false', {
:arel_predicate => proc { |v| v ? 'eq' : 'not_eq' },
:compounds => false,
@ -63,6 +71,14 @@ module Ransack
:formatter => proc { |v| false }
}
],
['not_false', {
:arel_predicate => proc { |v| v ? 'not_eq' : 'eq' },
:compounds => false,
:type => :boolean,
:validator => proc { |v| BOOLEAN_VALUES.include?(v) },
:formatter => proc { |v| false }
}
],
['present', {
:arel_predicate => proc { |v| v ? 'not_eq_all' : 'eq_any' },
:compounds => false,

View File

@ -96,6 +96,22 @@ module Ransack
end
end
describe 'not_true' do
it 'generates an inequality condition for boolean true' do
@s.awesome_not_true = true
field = "#{quote_table_name("people")}.#{quote_column_name("awesome")}"
expect(@s.result.to_sql).to match /#{field} != #{
ActiveRecord::Base.connection.quoted_true}/
end
it 'generates an equality condition for boolean true' do
@s.awesome_not_true = false
field = "#{quote_table_name("people")}.#{quote_column_name("awesome")}"
expect(@s.result.to_sql).to match /#{field} = #{
ActiveRecord::Base.connection.quoted_true}/
end
end
describe 'false' do
it 'generates an equality condition for boolean false' do
@s.awesome_false = true
@ -112,6 +128,22 @@ module Ransack
end
end
describe 'not_false' do
it 'generates an inequality condition for boolean false' do
@s.awesome_not_false = true
field = "#{quote_table_name("people")}.#{quote_column_name("awesome")}"
expect(@s.result.to_sql).to match /#{field} != #{
ActiveRecord::Base.connection.quoted_false}/
end
it 'generates an equality condition for boolean false' do
@s.awesome_not_false = false
field = "#{quote_table_name("people")}.#{quote_column_name("awesome")}"
expect(@s.result.to_sql).to match /#{field} = #{
ActiveRecord::Base.connection.quoted_false}/
end
end
describe 'null' do
it 'generates a value IS NULL query' do
@s.name_null = true