class Mincer::PgSearch::SearchEngines::Array

Public Instance Methods

conditions() click to toggle source
# File lib/mincer/processors/pg_search/search_engines/array.rb, line 6
def conditions
  return nil unless prepared_search_statements.any?
  arel_group do
    conditions = prepared_search_statements.map do |search_statement|
      if search_statement.pattern = args[search_statement.param_name]
        terms_delimiter = search_statement.options[:any_word] ? '&&' : '@>'
        arel_group(Arel::Nodes::InfixOperation.new(terms_delimiter, document_for(search_statement), query_for(search_statement)))
      end
    end
    join_expressions(conditions, :or)
  end
end

Private Instance Methods

document_for(search_statement) click to toggle source
# File lib/mincer/processors/pg_search/search_engines/array.rb, line 21
def document_for(search_statement)
  sanitizers = search_statement.sanitizers(:document)
  arel_group do
    documents = search_statement.columns.map do |search_column|
      sanitized_term = sanitizers.any? ? sanitize_column("#{search_column}::text", sanitizers).to_sql : search_column
      Arel.sql(sanitized_term + '::text[]')
    end
    join_expressions(documents, '||')
  end
end
query_for(search_statement) click to toggle source
# File lib/mincer/processors/pg_search/search_engines/array.rb, line 32
def query_for(search_statement)
  normalized_pattern = search_statement.pattern.split(%r{\s|,}).uniq.reject(&:empty?).map do |item|
    sanitize_string_quoted(item, search_statement.sanitizers(:query)).to_sql
  end.join(',')
  Arel.sql("ARRAY[#{normalized_pattern}]")
end