lib/ransack/constants.rb in ransack-1.1.0 vs lib/ransack/constants.rb in ransack-1.2.0
- old
+ new
@@ -4,33 +4,96 @@
FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE'].to_set
AREL_PREDICATES = %w(eq not_eq matches does_not_match lt lteq gt gteq in not_in)
DERIVED_PREDICATES = [
- ['cont', {:arel_predicate => 'matches', :formatter => proc {|v| "%#{escape_wildcards(v)}%"}}],
- ['not_cont', {:arel_predicate => 'does_not_match', :formatter => proc {|v| "%#{escape_wildcards(v)}%"}}],
- ['start', {:arel_predicate => 'matches', :formatter => proc {|v| "#{escape_wildcards(v)}%"}}],
- ['not_start', {:arel_predicate => 'does_not_match', :formatter => proc {|v| "#{escape_wildcards(v)}%"}}],
- ['end', {:arel_predicate => 'matches', :formatter => proc {|v| "%#{escape_wildcards(v)}"}}],
- ['not_end', {:arel_predicate => 'does_not_match', :formatter => proc {|v| "%#{escape_wildcards(v)}"}}],
- ['true', {:arel_predicate => 'eq', :compounds => false, :type => :boolean, :validator => proc {|v| TRUE_VALUES.include?(v)}}],
- ['false', {:arel_predicate => 'eq', :compounds => false, :type => :boolean, :validator => proc {|v| TRUE_VALUES.include?(v)}, :formatter => proc {|v| !v}}],
- ['present', {:arel_predicate => 'not_eq_all', :compounds => false, :type => :boolean, :validator => proc {|v| TRUE_VALUES.include?(v)}, :formatter => proc {|v| [nil, '']}}],
- ['blank', {:arel_predicate => 'eq_any', :compounds => false, :type => :boolean, :validator => proc {|v| TRUE_VALUES.include?(v)}, :formatter => proc {|v| [nil, '']}}],
- ['null', {:arel_predicate => 'eq', :compounds => false, :type => :boolean, :validator => proc {|v| TRUE_VALUES.include?(v)}, :formatter => proc {|v| nil}}],
- ['not_null', {:arel_predicate => 'not_eq', :compounds => false, :type => :boolean, :validator => proc {|v| TRUE_VALUES.include?(v)}, :formatter => proc {|v| nil}}]
+ ['cont', {
+ arel_predicate: 'matches',
+ formatter: proc { |v| "%#{escape_wildcards(v)}%" }
+ }
+ ],
+ ['not_cont', {
+ arel_predicate: 'does_not_match',
+ formatter: proc { |v| "%#{escape_wildcards(v)}%" }
+ }
+ ],
+ ['start', {
+ arel_predicate: 'matches',
+ formatter: proc { |v| "#{escape_wildcards(v)}%" }
+ }
+ ],
+ ['not_start', {
+ arel_predicate: 'does_not_match',
+ formatter: proc { |v| "#{escape_wildcards(v)}%" }
+ }
+ ],
+ ['end', {
+ arel_predicate: 'matches',
+ formatter: proc { |v| "%#{escape_wildcards(v)}" }
+ }
+ ],
+ ['not_end', {
+ arel_predicate: 'does_not_match',
+ formatter: proc { |v| "%#{escape_wildcards(v)}" }
+ }
+ ],
+ ['true', {
+ arel_predicate: 'eq',
+ compounds: false,
+ type: :boolean,
+ validator: proc { |v| TRUE_VALUES.include?(v) }
+ }
+ ],
+ ['false', {
+ arel_predicate: 'eq',
+ compounds: false,
+ type: :boolean,
+ validator: proc { |v| TRUE_VALUES.include?(v) },
+ formatter: proc { |v| !v }
+ }
+ ],
+ ['present', {
+ arel_predicate: 'not_eq_all',
+ compounds: false,
+ type: :boolean,
+ validator: proc { |v| TRUE_VALUES.include?(v) },
+ formatter: proc { |v| [nil, ''] }
+ }
+ ],
+ ['blank', {
+ arel_predicate: 'eq_any',
+ compounds: false,
+ type: :boolean,
+ validator: proc { |v| TRUE_VALUES.include?(v) },
+ formatter: proc { |v| [nil, ''] }
+ }
+ ],
+ ['null', {
+ arel_predicate: 'eq',
+ compounds: false,
+ type: :boolean,
+ validator: proc { |v| TRUE_VALUES.include?(v)},
+ formatter: proc { |v| nil }
+ }
+ ],
+ ['not_null', {
+ arel_predicate: 'not_eq',
+ compounds: false,
+ type: :boolean,
+ validator: proc { |v| TRUE_VALUES.include?(v) },
+ formatter: proc { |v| nil } }
+ ]
]
module_function
# replace % \ to \% \\
def escape_wildcards(unescaped)
case ActiveRecord::Base.connection.adapter_name
- when "SQLite"
- unescaped
- else
- # Necessary for PostgreSQL and MySQL
- unescaped.to_s.gsub(/([\\|\%|.])/, '\\\\\\1')
+ when "SQLite"
+ unescaped
+ else
+ # Necessary for PostgreSQL and MySQL
+ unescaped.to_s.gsub(/([\\|\%|.])/, '\\\\\\1')
end
end
-
end
end