Module: RubySimpleSearch::ClassMethods

Defined in:
lib/ruby_simple_search.rb

Instance Method Summary collapse

Instance Method Details

#simple_search(search_term, options = {}, &block) ⇒ Object

Raises:



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ruby_simple_search.rb', line 22

def simple_search(search_term, options={}, &block)
  raise RubySimpleSearch::Errors::ATTRIBUTES_MISSING if @simple_search_attributes.blank?
  raise ArgumentError, "Argument is not string" unless search_term.is_a? String
  set_pattern(options[:pattern])

  sql_query = nil
  extended_query = nil
  sql_query_condition = ""
  sql_query_values = []

  patterned_text = "#{@simple_search_pattern.gsub('q', search_term.try(:downcase))}"

  @simple_search_attributes.each do |attr|
    sql_query_condition << set_sql_query_condition(attr, sql_query_condition)
    sql_query_values << patterned_text
  end

  if block.is_a? Proc
    sql_query_condition = "(#{sql_query_condition})"
    extended_query = block.call(search_term)
  end

  if !extended_query.nil?
    sql_query_values, sql_query_condition = extend_simple_search(extended_query,
                                                                 sql_query_condition,
                                                                 sql_query_values)
  end
  sql_query = [sql_query_condition, sql_query_values]

  where(sql_query.flatten)
end