Class: QuickSearch::ContactPointEmailQuickSearch
- Inherits:
-
BaseQuickSearch
- Object
- BaseQuickSearch
- QuickSearch::ContactPointEmailQuickSearch
- 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
- .domain_scan(term) ⇒ Object
-
.exclude_domains ⇒ Object
Domains excluded from email domain-based searches.
- .skip_domain?(domain) ⇒ Boolean
Instance Method Summary collapse
- #extract_term(query) ⇒ Object
-
#perform_find(term, _existing_results = []) ⇒ Object
term is an email.
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_domains ⇒ Object
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
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 |