class Mincer::Processors::PgSearch::Sanitizer

Constants

AVAILABLE_SANITIZERS

Attributes

sanitizers[RW]
term[RW]

Public Class Methods

coalesce(term, val = '') click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 54
def self.coalesce(term, val = '')
  if Mincer.pg_extension_installed?(:unaccent)
    Arel::Nodes::NamedFunction.new('coalesce', [quote(term), quote(val)])
  else
    term
  end
end
ignore_accent(term) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 50
def self.ignore_accent(term)
  Arel::Nodes::NamedFunction.new('unaccent', [quote(term)])
end
ignore_case(term) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 46
def self.ignore_case(term)
  Arel::Nodes::NamedFunction.new('lower', [quote(term)])
end
new(term, *sanitizers) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 8
def initialize(term, *sanitizers)
  @term, @sanitizers = term, AVAILABLE_SANITIZERS & Array.wrap(sanitizers).flatten
end
quote(string) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 62
def self.quote(string)
  if defined?(Arel::Nodes::Quoted) && !string.is_a?(Arel::Nodes::Quoted) && !string.is_a?(Arel::Nodes::NamedFunction)
    Arel::Nodes::Quoted.new(string)
  else
    string
  end
end
sanitize_column(term, *sanitizers) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 34
def self.sanitize_column(term, *sanitizers)
  new(term, *sanitizers).sanitize_column
end
sanitize_string(term, *sanitizers) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 38
def self.sanitize_string(term, *sanitizers)
  new(term, *sanitizers).sanitize_string
end
sanitize_string_quoted(term, *sanitizers) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 42
def self.sanitize_string_quoted(term, *sanitizers)
  new(term, *sanitizers).sanitize_string(quote: true)
end

Public Instance Methods

sanitize(node) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 27
def sanitize(node)
  sanitizers.inject(node) do |query, sanitizer|
    query = self.class.send(sanitizer, query)
    query
  end
end
sanitize_column() click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 12
def sanitize_column
  @sanitized_column ||= sanitize(Arel.sql(@term))
end
sanitize_string(options = {}) click to toggle source
# File lib/mincer/processors/pg_search/sanitizer.rb, line 16
def sanitize_string(options = {})
  if sanitizers.empty?
    if defined?(Arel::Nodes::Quoted)
      return self.class.quote(@term)
    elsif options[:quote]
      return Mincer.connection.quote(@term)
    end
  end
  @sanitized_string ||= sanitize(@term)
end