Sha256: 86a95e9b831bd3b62eb3cb4b6718bf16048beb2112a0b81834b14308b097f777
Contents?: true
Size: 1.74 KB
Versions: 2
Compression:
Stored size: 1.74 KB
Contents
module Autosuggest module ActiveRecord def self.query(options) options[:object].where("#{options[:name]} #{options[:like_clause]} ?", "%#{options[:query]}%").order(options[:order]).limit(options[:limit]) end end module Mongoid def self.query(options) options[:object].where(options[:name].to_sym => /.*#{options[:query]}.*/i).limit(options[:limit]).order_by(resolve_order_syntax(options[:order])) end def self.resolve_order_syntax(order) fields = order.split [fields[0], fields[1].downcase.to_sym] end end module MongoMapper def self.query(options) options[:object].where(options[:name].to_sym => /#{options[:query]}/i).limit(options[:limit]).sort(resolve_order_syntax(options[:order])) end def self.resolve_order_syntax(order) fields = order.split [fields[0], fields[1].downcase.to_sym] end end module Helpers # Returns parameter object_sym as a constant # # objectify(:ingredient) # # returns a Ingredient constant supposing it is already defined # def objectify(object_sym) object_sym.to_s.camelize.constantize end # Decipher what database implementation the model is using # db_store(:ingredient) # # returns ActiveRecord assuming Ingredient is an AR model # def db_store(object) ancestors = objectify(object).ancestors.map(&:to_s) if ancestors.include?('ActiveRecord::Base') ActiveRecord elsif ancestors.include?('Mongoid::Document') Mongoid elsif ancestors.include?('MongoMapper::Document') MongoMapper else raise 'Database Store not supported' end end def resolve_like_clause defined?(PGconn) ? 'ILIKE' : 'LIKE' end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
autosuggest-rb-0.1.6 | lib/autosuggest/helpers.rb |
autosuggest-rb-0.1.5 | lib/autosuggest/helpers.rb |