class AutoSelect2::Select2SearchAdapter::Base

Public Class Methods

limit() click to toggle source

Amount rows per ajax-request

# File lib/auto_select2/select2_search_adapter/base.rb, line 6
def limit
  25 # TODO: move to settings/config
end
search_from_autocomplete(term, page, search_method, options) click to toggle source
# File lib/auto_select2/select2_search_adapter/base.rb, line 10
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_count(searched_class, term, options = {}) click to toggle source
# File lib/auto_select2/select2_search_adapter/base.rb, line 41
def default_count(searched_class, term, options = {})
  conditions =
      default_search_conditions(term,
                                options[:basic_conditions],
                                options[:column] || 'name',
                                options.slice(:case_sensitive))
  query = searched_class.where(conditions)
  query = query.select(options[:select]) if options[:select].present?
  query = options[:uniq] ? query.uniq : query
  query.count
end
default_finder(searched_class, term, options) click to toggle source
# File lib/auto_select2/select2_search_adapter/base.rb, line 20
def default_finder(searched_class, term, options)
  columns = options[:column].present? ? options[:column] : 'name'
  conditions =
      default_search_conditions(term,
                                options[:basic_conditions],
                                columns,
                                options.slice(:case_sensitive))
  if term.nil?
    [ searched_class.where(options[:basic_conditions]) ]
  else
    skip_count = 0
    unless options.nil? || options[:page].nil?
      page = options[:page].to_i > 0 ? options[:page].to_i : 1
      skip_count = limit * ( page - 1 )
    end
    query = searched_class.where( conditions ).limit( limit ).offset(skip_count).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_select2/select2_search_adapter/base.rb, line 53
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(' ')
    # @ todo: needs to create arrays with conditions for words and columns and concatenate them in a properly way
    words.each_with_index do |word, index|
      term_filter += ' AND ' if index > 0
      term_filter += '( ' if columns.any?
      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
      term_filter += ' )' if columns.any?
    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_init_values(searched_class, ids, options = {}) click to toggle source
# File lib/auto_select2/select2_search_adapter/base.rb, line 82
def get_init_values(searched_class, ids, options = {})
  hash_method = options[:hash_method]
  text_columns = options[:text_columns] || []
  id_column = options[:id_column] || searched_class.primary_key
  ids = ids.split(',')
  if ids.size > 1
    result = []
    ids.each do |id|
      item = searched_class.where(id_column => id).first
      if item.present?
        result << get_select2_hash(item, hash_method, id_column, text_columns)
      end
    end
    result
  elsif ids.size == 1
    item = searched_class.where(id_column => ids[0]).first
    get_select2_hash(item, hash_method, id_column, text_columns) if item.present?
  else
    nil
  end
end
get_select2_hash(item, hash_method, id_column, text_columns) click to toggle source
# File lib/auto_select2/select2_search_adapter/base.rb, line 104
def get_select2_hash(item, hash_method, id_column, text_columns)
  if hash_method.present? && item.respond_to?(hash_method)
    item.public_send(hash_method)
  else
    if item.respond_to?(:to_select2)
      item.to_select2
    else
      label_method = text_columns.first || :name
      if item.respond_to?(label_method)
        { text: item.public_send(label_method), id: item.public_send(id_column) }
      else
        return { error: 'not found label method' }
      end
    end
  end
end