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