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