Sha256: 6d6bb662e297b7252a96d6e6d0456dc8832e39d1310e84898a0f6a7d06a505b4
Contents?: true
Size: 1.6 KB
Versions: 11
Compression:
Stored size: 1.6 KB
Contents
module Cms module Behaviors module Searching def self.included(model_class) model_class.extend(MacroMethods) end module MacroMethods def searchable? !!@is_searchable end def is_searchable(options={}) @is_searchable = true @searchable_columns = options[:searchable_columns] ? options[:searchable_columns].map(&:to_sym) : [:name] extend ClassMethods #This is in a method to allow classes to override it scope :search, lambda{|search_params| term = search_params.is_a?(Hash) ? search_params[:term] : search_params order = search_params.is_a?(Hash) && search_params[:order] ? search_params[:order] : default_order_for_search conditions = [] unless term.blank? searchable_columns.each do |c| if conditions.empty? conditions = ["#{table_name}.#{c} like ?"] else conditions.first << "or #{table_name}.#{c} like ?" end conditions << "%#{term}%" end conditions[0] = "(#{conditions[0]})" end scope = {} scope[:conditions] = conditions if conditions scope[:order] = order if order scope } end end module ClassMethods def searchable_columns @searchable_columns end def default_order_for_search "#{table_name}.#{searchable_columns.first}" end end end end end
Version data entries
11 entries across 11 versions & 1 rubygems