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