Class: QuickSearch::ContactPointEmailQuickSearch

Inherits:
BaseQuickSearch
  • Object
show all
Defined in:
app/queries/quick_search/contact_point_email_quick_search.rb

Overview

Query object: contact point email quick search.

Constant Summary collapse

QS_EMAIL_REGEXP =

Qs email regexp.

/^([^@\s]*@)?((?=.{1,253}\.?$)(?:(?!-|[^.]+_)[A-Za-z0-9\-_]{1,63}(?<!-)(?:\.|$)){2,})$/i

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.domain_scan(term) ⇒ Object



17
18
19
20
21
22
23
# File 'app/queries/quick_search/contact_point_email_quick_search.rb', line 17

def self.domain_scan(term)
  return if term.blank?

  domain = term.scan(QS_EMAIL_REGEXP)&.flatten&.last&.strip
  domain = nil if domain && skip_domain?(domain)
  domain
end

.exclude_domainsObject

Domains excluded from email domain-based searches.
Now loaded from shared FreeEmailDomains module (data/free_email_domains.yml)



9
10
11
# File 'app/queries/quick_search/contact_point_email_quick_search.rb', line 9

def self.exclude_domains
  FreeEmailDomains.list
end

.skip_domain?(domain) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'app/queries/quick_search/contact_point_email_quick_search.rb', line 37

def self.skip_domain?(domain)
  FreeEmailDomains.include?(domain)
end

Instance Method Details

#extract_term(query) ⇒ Object



13
14
15
# File 'app/queries/quick_search/contact_point_email_quick_search.rb', line 13

def extract_term(query)
  query.scan(QS_EMAIL_REGEXP).join.strip
end

#perform_find(term, _existing_results = []) ⇒ Object

term is an email



26
27
28
29
30
31
32
33
34
35
# File 'app/queries/quick_search/contact_point_email_quick_search.rb', line 26

def perform_find(term, _existing_results = [])
  base_query = ContactPoint.emails.joins(:party).includes(party: :profile_image).where.not(Party[:inactive].eq(true))
  res = base_query.where(ContactPoint[:detail].matches(term))
  if res.blank?
    domain = term.scan(QS_EMAIL_REGEXP)&.flatten&.last&.strip
    domain = nil if domain && self.class.skip_domain?(domain)
    res = base_query.contains("@#{domain}") if domain
  end
  res
end