Class: Mincer::Processors::PgSearch::Sanitizer

Inherits:
Object
  • Object
show all
Defined in:
lib/mincer/processors/pg_search/sanitizer.rb

Constant Summary collapse

AVAILABLE_SANITIZERS =
[:coalesce, :ignore_case, :ignore_accent]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(term, *sanitizers) ⇒ Sanitizer

Returns a new instance of Sanitizer.



8
9
10
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 8

def initialize(term, *sanitizers)
  @term, @sanitizers = term, AVAILABLE_SANITIZERS & Array.wrap(sanitizers).flatten
end

Instance Attribute Details

#sanitizersObject

Returns the value of attribute sanitizers.



6
7
8
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 6

def sanitizers
  @sanitizers
end

#termObject

Returns the value of attribute term.



6
7
8
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 6

def term
  @term
end

Class Method Details

.coalesce(term, val = '') ⇒ Object



50
51
52
53
54
55
56
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 50

def self.coalesce(term, val = '')
  if Mincer.pg_extension_installed?(:unaccent)
    Arel::Nodes::NamedFunction.new('coalesce', [term, val])
  else
    term
  end
end

.ignore_accent(term) ⇒ Object



46
47
48
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 46

def self.ignore_accent(term)
  Arel::Nodes::NamedFunction.new('unaccent', [term])
end

.ignore_case(term) ⇒ Object



42
43
44
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 42

def self.ignore_case(term)
  Arel::Nodes::NamedFunction.new('lower', [term])
end

.sanitize_column(term, *sanitizers) ⇒ Object



30
31
32
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 30

def self.sanitize_column(term, *sanitizers)
  new(term, *sanitizers).sanitize_column
end

.sanitize_string(term, *sanitizers) ⇒ Object



34
35
36
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 34

def self.sanitize_string(term, *sanitizers)
  new(term, *sanitizers).sanitize_string
end

.sanitize_string_quoted(term, *sanitizers) ⇒ Object



38
39
40
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 38

def self.sanitize_string_quoted(term, *sanitizers)
  new(term, *sanitizers).sanitize_string(quote: true)
end

Instance Method Details

#sanitize(node) ⇒ Object



23
24
25
26
27
28
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 23

def sanitize(node)
  sanitizers.inject(node) do |query, sanitizer|
    query = self.class.send(sanitizer, query)
    query
  end
end

#sanitize_columnObject



12
13
14
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 12

def sanitize_column
  @sanitized_column ||= sanitize(Arel.sql(@term))
end

#sanitize_string(options = {}) ⇒ Object



16
17
18
19
20
21
# File 'lib/mincer/processors/pg_search/sanitizer.rb', line 16

def sanitize_string(options = {})
  if sanitizers.empty?
    return options[:quote] ? Mincer.connection.quote(@term) : @term
  end
  @sanitized_string ||= sanitize(@term)
end