Class: FullSearch::ExactMatch

Inherits:
Object
  • Object
show all
Defined in:
lib/full_search/exact_match.rb

Class Method Summary collapse

Class Method Details

.exact_match_value(em, query) ⇒ Object



25
26
27
28
29
# File 'lib/full_search/exact_match.rb', line 25

def self.exact_match_value(em, query)
  fake = Object.new
  fake.define_singleton_method(em.name) { query }
  fake.instance_exec(&em.source)
end

.ids_for(model, query, filters) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/full_search/exact_match.rb', line 5

def self.ids_for(model, query, filters)
  dsl = model.full_search_dsl
  return [] if dsl.exact_matches.empty?

  cleaned = query.to_s.strip
  return [] if cleaned.empty?

  relation = model.all
  filters.each { |name, value| relation = relation.where(name => value) }

  exact_ids = dsl.exact_matches.flat_map do |em|
    value = exact_match_value(em, cleaned)
    next [] if value.nil? || value.to_s.empty?

    relation.where(em.name => value).pluck(:id)
  end

  exact_ids.uniq
end