Class: RailsSimpleSearch::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/rails-simple-search.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_class, criteria = {}, config = {}) ⇒ Base

Returns a new instance of Base.



27
28
29
30
31
32
33
34
35
36
# File 'lib/rails-simple-search.rb', line 27

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

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args) ⇒ Object (private)



56
57
58
59
60
61
62
63
# File 'lib/rails-simple-search.rb', line 56

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

Class Method Details

.inherited(subclass) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
# 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

Instance Method Details

#add_conditions(h = {}) ⇒ Object



50
51
52
# File 'lib/rails-simple-search.rb', line 50

def add_conditions(h={})
  @criteria.merge!(h)
end

#countObject



46
47
48
# File 'lib/rails-simple-search.rb', line 46

def count
  @count || 0
end

#load_database_handler(model_class) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/rails-simple-search.rb', line 38

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