lib/ransack/constants.rb in ransack-1.2.3 vs lib/ransack/constants.rb in ransack-1.3.0

- old
+ new

@@ -1,99 +1,100 @@ 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 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)}%" } + :arel_predicate => 'matches', + :formatter => proc { |v| "%#{escape_wildcards(v)}%" } } ], ['not_cont', { - arel_predicate: 'does_not_match', - formatter: proc { |v| "%#{escape_wildcards(v)}%" } + :arel_predicate => 'does_not_match', + :formatter => proc { |v| "%#{escape_wildcards(v)}%" } } ], ['start', { - arel_predicate: 'matches', - formatter: proc { |v| "#{escape_wildcards(v)}%" } + :arel_predicate => 'matches', + :formatter => proc { |v| "#{escape_wildcards(v)}%" } } ], ['not_start', { - arel_predicate: 'does_not_match', - formatter: proc { |v| "#{escape_wildcards(v)}%" } + :arel_predicate => 'does_not_match', + :formatter => proc { |v| "#{escape_wildcards(v)}%" } } ], ['end', { - arel_predicate: 'matches', - formatter: proc { |v| "%#{escape_wildcards(v)}" } + :arel_predicate => 'matches', + :formatter => proc { |v| "%#{escape_wildcards(v)}" } } ], ['not_end', { - arel_predicate: 'does_not_match', - formatter: proc { |v| "%#{escape_wildcards(v)}" } + :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) } + :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 } + :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, ''] } + :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, ''] } } ], ['blank', { - arel_predicate: 'eq_any', - compounds: false, - type: :boolean, - validator: proc { |v| TRUE_VALUES.include?(v) }, - formatter: proc { |v| [nil, ''] } + :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, ''] } } ], ['null', { - arel_predicate: 'eq', - compounds: false, - type: :boolean, - validator: proc { |v| TRUE_VALUES.include?(v)}, - formatter: proc { |v| nil } + :arel_predicate => proc { |v| v ? 'eq' : 'not_eq' }, + :compounds => false, + :type => :boolean, + :validator => proc { |v| BOOLEAN_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 } } + :arel_predicate => proc { |v| v ? 'not_eq' : 'eq' }, + :compounds => false, + :type => :boolean, + :validator => proc { |v| BOOLEAN_VALUES.include?(v) }, + :formatter => proc { |v| nil } } ] ] - module_function + module_function # replace % \ to \% \\ def escape_wildcards(unescaped) case ActiveRecord::Base.connection.adapter_name - when "SQLite" - unescaped - else + when "Mysql2", "PostgreSQL" # Necessary for PostgreSQL and MySQL unescaped.to_s.gsub(/([\\|\%|.])/, '\\\\\\1') + else + unescaped end end end end