Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

57 lines (46 sloc) 2.242 kB
module Rails3JQueryAutocomplete
module Orm
module ActiveRecord
def active_record_get_autocomplete_order(method, options, model=nil)
order = options[:order]
table_prefix = model ? "#{model.table_name}." : ""
order || "LOWER(#{table_prefix}#{method}) ASC"
end
def active_record_get_autocomplete_items(parameters)
model = parameters[:model]
term = parameters[:term]
options = parameters[:options]
method = options[:hstore] ? options[:hstore][:method] : parameters[:method]
scopes = Array(options[:scopes])
where = options[:where]
limit = get_autocomplete_limit(options)
order = active_record_get_autocomplete_order(method, options, model)
items = (::Rails::VERSION::MAJOR * 10 + ::Rails::VERSION::MINOR) >= 40 ? model.where(nil) : model.scoped
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
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
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')
if options[:hstore]
["LOWER(#{table_name}.#{method} -> '#{options[:hstore][:key]}') LIKE ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]
else
["LOWER(#{table_name}.#{method}) #{like_clause} ?", "#{(is_full_search ? '%' : '')}#{term.downcase}%"]
end
end
def postgres?(model)
# Figure out if this particular model uses the PostgreSQL adapter
model.connection.class.to_s.match(/PostgreSQLAdapter/)
end
end
end
end
Jump to Line
Something went wrong with that request. Please try again.