module Bootstrap3AutocompleteInput::Orm::ActiveRecord

Public Instance Methods

get_autocomplete_items(parameters) click to toggle source
# File lib/bootstrap3_autocomplete_input/orm/active_record.rb, line 11
def get_autocomplete_items(parameters)
  model   = parameters[:model]
  term    = parameters[:q] || parameters[:term]


  options = parameters[:options]

  extra_columns = (options[:extra_columns] || []).map{|c| c.to_sym}
  #column_name  = options[:column_name]
  column_name = parameters[:method]

  #
  items = model.all
  unless options[:full_model]
    items = items.select(get_autocomplete_select_clause(model, column_name, extra_columns, options))
  end

  # basic where
  items = items.where(get_autocomplete_where_clause(model, term, column_name, options))


  # additional where
  scopes  = Array(options[:scopes])
  where   = options[:where]
  where_method   = options[:where_method]

  unless scopes.empty?
    scopes.each { |scope| items = items.send(scope) }
  end

  unless where.blank?
    items = items.where(where)
  end


  unless where_method.nil?
    if respond_to?(where_method)
      w = send(where_method)
      if w
        items = items.where(w)
      end
    end
  end


  # order, limit
  limit   = autocomplete_option_limit(options)
  order   = get_autocomplete_order(column_name, options, model)

  items = items.limit(limit).order(order)

  #
  items
end
get_autocomplete_order(column_name, options, model=nil) click to toggle source
# File lib/bootstrap3_autocomplete_input/orm/active_record.rb, line 4
def get_autocomplete_order(column_name, options, model=nil)
  order = options[:order]

  table_prefix = model ? "#{model.table_name}." : ""
  order || "#{table_prefix}#{column_name} ASC"
end
get_autocomplete_select_clause(model, column_name, extra_columns, options) click to toggle source
# File lib/bootstrap3_autocomplete_input/orm/active_record.rb, line 66
def get_autocomplete_select_clause(model, column_name, extra_columns, options)
  table_name = model.table_name
  #cols = ([model.primary_key, column_name]+extra_columns).reject { |c| c.nil? || c.blank? || c.empty? }
  cols = ([model.primary_key, column_name]).reject { |c| c.nil? || c.blank? || c.empty? }

  #(["#{table_name}.#{model.primary_key}", "#{table_name}.#{column_name}"] + (options[:extra_data].blank? ? [] : options[:extra_data]))
  cols.map{|c| "#{table_name}.#{c}"} + (options[:extra_data].blank? ? [] : options[:extra_data])
end
get_autocomplete_where_clause(model, term, column_name, options) click to toggle source
# File lib/bootstrap3_autocomplete_input/orm/active_record.rb, line 75
def get_autocomplete_where_clause(model, term, column_name, options)
  table_name = model.table_name

  # basic search
  is_full_search = options[:full]
  like_clause = (postgres?(model) ? 'ILIKE' : 'LIKE')
  ["LOWER(#{table_name}.#{column_name}) #{like_clause} ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]
end
postgres?(model) click to toggle source
# File lib/bootstrap3_autocomplete_input/orm/active_record.rb, line 84
def postgres?(model)
  # Figure out if this particular model uses the PostgreSQL adapter
  model.connection.class.to_s.match(/PostgreSQLAdapter/)
end