activerecord-hackery--ransack/lib/ransack/constants.rb

128 lines
3.8 KiB
Ruby
Raw Normal View History

2011-03-31 00:31:39 +00:00
module Ransack
module Constants
TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE'].to_set
FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE'].to_set
BOOLEAN_VALUES = TRUE_VALUES + FALSE_VALUES
2011-03-31 00:31:39 +00:00
AREL_PREDICATES = %w(eq not_eq matches does_not_match lt lteq gt gteq in not_in)
DERIVED_PREDICATES = [
2013-08-04 13:13:41 +00:00
['cont', {
:arel_predicate => 'matches',
:formatter => proc { |v| "%#{escape_wildcards(v)}%" }
2013-08-04 13:13:41 +00:00
}
],
['i_cont', {
:arel_predicate => 'i_matches',
:formatter => proc { |v| "%#{escape_wildcards(v)}%" }
}
],
2013-08-04 13:13:41 +00:00
['not_cont', {
:arel_predicate => 'does_not_match',
:formatter => proc { |v| "%#{escape_wildcards(v)}%" }
2013-08-04 13:13:41 +00:00
}
],
['i_not_cont', {
:arel_predicate => 'i_does_not_match',
:formatter => proc { |v| "%#{escape_wildcards(v)}%" }
}
],
2013-08-04 13:13:41 +00:00
['start', {
:arel_predicate => 'matches',
:formatter => proc { |v| "#{escape_wildcards(v)}%" }
2013-08-04 13:13:41 +00:00
}
],
['not_start', {
:arel_predicate => 'does_not_match',
:formatter => proc { |v| "#{escape_wildcards(v)}%" }
2013-08-04 13:13:41 +00:00
}
],
['end', {
:arel_predicate => 'matches',
:formatter => proc { |v| "%#{escape_wildcards(v)}" }
2013-08-04 13:13:41 +00:00
}
],
['not_end', {
:arel_predicate => 'does_not_match',
:formatter => proc { |v| "%#{escape_wildcards(v)}" }
2013-08-04 13:13:41 +00:00
}
],
['true', {
:arel_predicate => proc { |v| v ? 'eq' : 'not_eq' },
:compounds => false,
:type => :boolean,
:validator => proc { |v| BOOLEAN_VALUES.include?(v) },
:formatter => proc { |v| true }
2013-08-04 13:13:41 +00:00
}
],
2014-08-27 00:50:47 +00:00
['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 }
}
],
2013-08-04 13:13:41 +00:00
['false', {
:arel_predicate => proc { |v| v ? 'eq' : 'not_eq' },
:compounds => false,
:type => :boolean,
:validator => proc { |v| BOOLEAN_VALUES.include?(v) },
:formatter => proc { |v| false }
2013-08-04 13:13:41 +00:00
}
],
2014-08-27 00:50:47 +00:00
['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 }
}
],
2013-08-04 13:13:41 +00:00
['present', {
:arel_predicate => proc { |v| v ? 'not_eq_all' : 'eq_any' },
:compounds => false,
:type => :boolean,
:validator => proc { |v| BOOLEAN_VALUES.include?(v) },
:formatter => proc { |v| [nil, ''] }
2013-08-04 13:13:41 +00:00
}
],
['blank', {
:arel_predicate => proc { |v| v ? 'eq_any' : 'not_eq_all' },
:compounds => false,
:type => :boolean,
:validator => proc { |v| BOOLEAN_VALUES.include?(v) },
:formatter => proc { |v| [nil, ''] }
2013-08-04 13:13:41 +00:00
}
],
['null', {
:arel_predicate => proc { |v| v ? 'eq' : 'not_eq' },
:compounds => false,
:type => :boolean,
:validator => proc { |v| BOOLEAN_VALUES.include?(v)},
:formatter => proc { |v| nil }
2013-08-04 13:13:41 +00:00
}
],
['not_null', {
:arel_predicate => proc { |v| v ? 'not_eq' : 'eq' },
:compounds => false,
:type => :boolean,
:validator => proc { |v| BOOLEAN_VALUES.include?(v) },
:formatter => proc { |v| nil } }
2013-08-04 13:13:41 +00:00
]
2011-03-31 00:31:39 +00:00
]
module_function
# replace % \ to \% \\
def escape_wildcards(unescaped)
2013-12-07 00:51:55 +00:00
case ActiveRecord::Base.connection.adapter_name
2014-06-04 05:28:40 +00:00
when "Mysql2", "PostgreSQL"
2013-12-07 00:51:55 +00:00
# Necessary for PostgreSQL and MySQL
unescaped.to_s.gsub(/([\\|\%|.])/, '\\\\\\1')
2014-06-04 05:28:40 +00:00
else
unescaped
2013-12-07 00:51:55 +00:00
end
end
2011-03-31 00:31:39 +00:00
end
end