class AutoAwesomplete::SearchAdapter::Base

Public Class Methods

limit() click to toggle source
# File lib/auto_awesomplete/search_adapter/base.rb, line 5
def limit
  10
end
search_from_autocomplete(term, page, search_method, options) click to toggle source
# File lib/auto_awesomplete/search_adapter/base.rb, line 9
def search_from_autocomplete(term, page, search_method, options)
  if search_method.nil?
    search_default(term, page, options)
  else
    self.public_send("search_#{search_method}", term, page, options)
  end
end

Private Class Methods

default_finder(searched_class, term, options) click to toggle source
# File lib/auto_awesomplete/search_adapter/base.rb, line 19
def default_finder(searched_class, term, options)
  columns = options[:columns].present? ? options[:columns] : 'name'
  conditions =
      default_search_conditions(
          term,
          options[:basic_conditions],
          columns,
          options.slice(:case_sensitive)
      )

  if term.nil?
    [ searched_class.where(options[:basic_conditions]) ]
  else
    result_limit = options[:limit] || limit
    query = searched_class.where( conditions ).limit( result_limit ).order(columns)
    query = query.select(options[:select]) if options[:select].present?
    options[:uniq] ? query.uniq : query
  end
end
default_search_conditions(term, basic_conditions, columns, options = {}) click to toggle source
# File lib/auto_awesomplete/search_adapter/base.rb, line 39
def default_search_conditions(term, basic_conditions, columns, options = {})
  term_filter = ''
  conditions = []

  unless columns.is_a?(Array)
    columns = columns.split(/[\s,]+/)
  end

  unless term.nil?
    words = term.split(' ')
    words.each_with_index do |word, index|
      term_filter += ' AND ' if index > 0

      columns.each_with_index do |column, idx|
        term_filter += ' OR ' if idx > 0

        if options[:case_sensitive]
          term_filter += "#{column} LIKE ?"
        else
          term_filter += "LOWER(#{column}) LIKE LOWER(?)"
        end

        conditions << "%#{word}%"
      end
    end

    term_filter = term_filter.empty? ? nil : "(#{term_filter})"
    basic_conditions_part = basic_conditions.present? ? "(#{basic_conditions }) " : nil
    conditions.unshift([term_filter, basic_conditions_part].compact.join(' AND '))
  end
end
get_awesomplete_label(item, options) click to toggle source
# File lib/auto_awesomplete/search_adapter/base.rb, line 71
def get_awesomplete_label(item, options)
  label_method = options[:label_method]
  text_columns = options[:default_text_columns]
  if text_columns.is_a?(String)
    text_columns = text_columns.split(',').map(&:squish)
  end

  if label_method.present? && item.respond_to?(label_method)
    item.public_send(label_method)
  elsif text_columns.present?
    text_columns.map { |attr| item.attributes[attr.to_s] }.join(' ')
  else
    item.to_s
  end
end