Module: Rails4Autocomplete::Orm::ActiveRecord

Defined in:
lib/rails4-autocomplete/orm/active_record.rb

Instance Method Summary collapse

Instance Method Details

#get_autocomplete_items(parameters) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rails4-autocomplete/orm/active_record.rb', line 11

def get_autocomplete_items(parameters)
  model   = parameters[:model]
  term    = parameters[:term]
  method  = parameters[:method]
  options = parameters[:options]
  scopes  = Array(options[:scopes])
  where   = options[:where]
  limit   = get_autocomplete_limit(options)
  order   = get_autocomplete_order(method, options, model)


  items = model.all

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

  items = items.select(get_autocomplete_select_clause(model, method, options)) unless options[:full_model]
  items = items.where(get_autocomplete_where_clause(model, term, method, options)).
      limit(limit).order(order)
  items = items.where(where) unless where.blank?

  items
end

#get_autocomplete_order(method, options, model = nil) ⇒ Object



4
5
6
7
8
9
# File 'lib/rails4-autocomplete/orm/active_record.rb', line 4

def get_autocomplete_order(method, options, model=nil)
  order = options[:order]

  table_prefix = model ? "#{model.table_name}." : ""
  order || "#{table_prefix}#{method} ASC"
end

#get_autocomplete_select_clause(model, method, options) ⇒ Object



34
35
36
37
# File 'lib/rails4-autocomplete/orm/active_record.rb', line 34

def get_autocomplete_select_clause(model, method, options)
  table_name = model.table_name
  (["#{table_name}.#{model.primary_key}", "#{table_name}.#{method}"] + (options[:extra_data].blank? ? [] : options[:extra_data]))
end

#get_autocomplete_where_clause(model, term, method, options) ⇒ Object



39
40
41
42
43
44
# File 'lib/rails4-autocomplete/orm/active_record.rb', line 39

def get_autocomplete_where_clause(model, term, method, options)
  table_name = model.table_name
  is_full_search = options[:full]
  like_clause = (postgres?(model) ? 'ILIKE' : 'LIKE')
  ["LOWER(#{table_name}.#{method}) #{like_clause} ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]
end

#postgres?(model) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
49
# File 'lib/rails4-autocomplete/orm/active_record.rb', line 46

def postgres?(model)
  # Figure out if this particular model uses the PostgreSQL adapter
  model.connection.class.to_s.match(/PostgreSQLAdapter/)
end