class RailsSimpleSearch::Base
Public Class Methods
inherited(subclass)
click to toggle source
# File lib/rails-simple-search.rb, line 15 def self.inherited(subclass) class << subclass # in rails 3, the call to "form_for" invokes the model_name def model_name ActiveModel::Name.new(self) end end # to fix an issues in rails 4.2 subclass.send(:include, RailsSimpleSearch::FixModelName) end
new(model_class, criteria={}, config={})
click to toggle source
# File lib/rails-simple-search.rb, line 36 def initialize(model_class, criteria={}, config={}) @criteria = sanitize_criteria(criteria) @config = DEFAULT_CONFIG.merge(config) @config[:exact_match] = [@config[:exact_match]] unless @config[:exact_match].respond_to?(:map!) @config[:exact_match].map!{|em| em.to_s} @model_class = (model_class.is_a?(Symbol) || model_class.is_a?(String))? model_class.to_s.camelize.constantize : model_class load_database_handler(@model_class) init end
pre_process(model_name, &procedure)
click to toggle source
# File lib/rails-simple-search.rb, line 27 def self.pre_process(model_name, &procedure) @pre_processors ||= {} @pre_processors[model_name] = procedure end
pre_processor(model_name)
click to toggle source
# File lib/rails-simple-search.rb, line 32 def self.pre_processor(model_name) @pre_processors[model_name] end
Public Instance Methods
add_conditions(h={})
click to toggle source
# File lib/rails-simple-search.rb, line 59 def add_conditions(h={}) @criteria.merge!(h) end
append_criteria(key, value)
click to toggle source
# File lib/rails-simple-search.rb, line 69 def append_criteria(key, value) @criteria[key] = value end
count()
click to toggle source
# File lib/rails-simple-search.rb, line 55 def count @count || 0 end
load_database_handler(model_class)
click to toggle source
# File lib/rails-simple-search.rb, line 47 def load_database_handler(model_class) if model_class.ancestors.include?(ActiveRecord::Base) RailsSimpleSearch::Base.send(:include, RailsSimpleSearch::SqlHandler) else raise("RailsSimpleSearch only supports ActiveRecord for now") end end
remove_criteria(key)
click to toggle source
# File lib/rails-simple-search.rb, line 63 def remove_criteria(key) value = @criteria[key] @criteria.delete(key) value end
Private Instance Methods
method_missing(method, *args)
click to toggle source
# File lib/rails-simple-search.rb, line 75 def method_missing(method, *args) method_str = method.to_s if method_str =~ /^([^=]+)=$/ @criteria[$1.to_s] = args[0] else @criteria[method_str] end end
parse_field_name(name)
click to toggle source
# File lib/rails-simple-search.rb, line 84 def parse_field_name(name) result = {} if name =~ /^(.*)?((_(greater|less)_than)(_equal_to)?)$/ result[:field_name] = $1 if $4 == 'greater' result[:operator] = ">" else result[:operator] = "<" end if $5 result[:operator] << "=" end else result[:field_name] = name end result end
sanitize_criteria(criteria)
click to toggle source
# File lib/rails-simple-search.rb, line 102 def sanitize_criteria(criteria) criteria = criteria || {} c = {} criteria.each do |key, value| unless value.blank? c[key] = value end end c end