class Ransack::Predicate

Attributes

arel_predicate[R]
case_insensitive[R]
compound[R]
formatter[R]
name[R]
type[R]
validator[R]
wants_array[R]

Public Class Methods

detect_and_strip_from_string!(str) click to toggle source
# File lib/ransack/predicate.rb, line 16
def detect_and_strip_from_string!(str)
  detect_from_string str, chomp: true
end
detect_from_string(str, chomp: false) click to toggle source
# File lib/ransack/predicate.rb, line 20
def detect_from_string(str, chomp: false)
  return unless str

  Ransack.predicates.sorted_names_with_underscores.each do |predicate, underscored|
    if str.end_with? underscored
      str.chomp! underscored if chomp
      return predicate
    end
  end

  nil
end
named(name) click to toggle source
# File lib/ransack/predicate.rb, line 12
def named(name)
  Ransack.predicates[(name || Ransack.options[:default_predicate]).to_s]
end
names() click to toggle source
# File lib/ransack/predicate.rb, line 8
def names
  Ransack.predicates.keys
end
new(opts = {}) click to toggle source
# File lib/ransack/predicate.rb, line 35
def initialize(opts = {})
  @name = opts[:name]
  @arel_predicate = opts[:arel_predicate]
  @type = opts[:type]
  @formatter = opts[:formatter]
  @validator = opts[:validator] ||
    lambda { |v| v.respond_to?(:empty?) ? !v.empty? : !v.nil? }
  @compound = opts[:compound]
  @wants_array = opts.fetch(:wants_array,
    @compound || Constants::IN_NOT_IN.include?(@arel_predicate))
  @case_insensitive = opts[:case_insensitive]
end

Public Instance Methods

==(other)
Alias for: eql?
eql?(other) click to toggle source
# File lib/ransack/predicate.rb, line 48
def eql?(other)
  self.class == other.class &&
  self.name == other.name
end
Also aliased as: ==
format(val) click to toggle source
# File lib/ransack/predicate.rb, line 58
def format(val)
  if formatter
    formatter.call(val)
  else
    val
  end
end
hash() click to toggle source
# File lib/ransack/predicate.rb, line 54
def hash
  name.hash
end
negative?() click to toggle source
# File lib/ransack/predicate.rb, line 70
def negative?
  @name.include?("not_".freeze)
end
validate(vals, type = @type) click to toggle source
# File lib/ransack/predicate.rb, line 66
def validate(vals, type = @type)
  vals.any? { |v| validator.call(type ? v.cast(type) : v.value) }
end