module PoorManSearch::Searchable

Public Instance Methods

time_range(*fields) click to toggle source
# File lib/poor_man_search/searchable.rb, line 15
def time_range *fields
  @time_fields = fields
end

Private Instance Methods

asociation_class(as_sym) click to toggle source
# File lib/poor_man_search/searchable.rb, line 44
def asociation_class as_sym
  _as = as_sym
  while(_as.is_a? Hash) do
    _as = _as.values.first
  end
  _as.to_s.singularize.classify.constantize
end
fetch_from_time_range(table, start_time, end_time) click to toggle source
# File lib/poor_man_search/searchable.rb, line 99
def fetch_from_time_range(table, start_time, end_time)
  @time_fields.collect{|f|
    table[f].gteq(start_time).and(table[f].lteq(end_time))
  }
end
find_by_time(table, time) click to toggle source
# File lib/poor_man_search/searchable.rb, line 93
def find_by_time(table, time)
  return fetch_from_time_range(table, time, time+59.seconds) if (time.hour > 0 && time.min > 0)
  return fetch_from_time_range(table, time.beginning_of_hour, time.end_of_hour) if (time.hour > 0)
  return fetch_from_time_range(table, time.beginning_of_day, time.end_of_day)
end
number_clause(t, criteria) click to toggle source
# File lib/poor_man_search/searchable.rb, line 67
def number_clause(t, criteria)
  return nil if @number_fields.blank?
  clause = nil
  criteria.numbers.collect do |value|
    @number_fields.collect{|f|
      t[f].eq(value)
    }.each{|t_node|
      clause = clause.or(t_node) rescue t_node
    }
  end
  clause
end
string_clauses(t, criteria) click to toggle source
# File lib/poor_man_search/searchable.rb, line 52
def string_clauses(t, criteria)
  return [] if @string_fields.blank?
  criteria.strings.collect do |word|
    v = "%#{word}%"
    clause = nil

    @string_fields.collect{|f|
      t[f].matches(v)
    }.each{|t_node|
      clause = clause.or(t_node) rescue t_node
    }
    clause
  end
end
time_clause(t, criteria) click to toggle source
# File lib/poor_man_search/searchable.rb, line 80
def time_clause(t, criteria)
  return nil if @time_fields.blank?
  clause = nil
  criteria.times.each do |value|
    @time_fields.each{|f|
      find_by_time(t, value).each{|t_node|
        clause = clause.or(t_node) rescue t_node
      }
    }
  end
  clause
end