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