From 80346ee4844a0d82c527be11632e75627b4ba9a9 Mon Sep 17 00:00:00 2001 From: Oleg Hasjanov Date: Fri, 11 Jun 2021 13:33:17 +0300 Subject: [PATCH] added validation for puny code and collected also from tech and admin contacts --- .../collect_invalid_validation_contacts.rake | 61 +++++++++++++++---- 1 file changed, 48 insertions(+), 13 deletions(-) diff --git a/lib/tasks/collect_invalid_validation_contacts.rake b/lib/tasks/collect_invalid_validation_contacts.rake index aa681c495..aa831036b 100644 --- a/lib/tasks/collect_invalid_validation_contacts.rake +++ b/lib/tasks/collect_invalid_validation_contacts.rake @@ -1,9 +1,11 @@ namespace :collect_invalid_contacts do desc 'Starts collect invalid validation contacts' task all_domains: :environment do + prepare_csv_file + Contact.all.each do |contact| result = Truemail.validate(contact.email, with: :mx) - unless result.result.success + if !result.result.success && !validate_puny_code(contact.email) collect_data_for_csv(contact, result.result) end end @@ -11,28 +13,61 @@ namespace :collect_invalid_contacts do end def find_related_domains(contact) - Domain.where(id: contact.id) + registrant_domains = Domain.where(registrant_id: contact.id) + + tech_domains = collect_tech_domains(contact) + admin_domains = collect_admin_domains(contact) + + tech_domains | admin_domains | registrant_domains +end + +def collect_admin_domains(contact) + admin_domains = [] + + admin_contacts = AdminDomainContact.where(contact_id: contact.id) + admin_contacts.each do |c| + admin_domains << Domain.find(c.domain_id) + end + + admin_domains +end + +def collect_tech_domains(contact) + tech_domains = [] + + tech_contacts = TechDomainContact.where(contact_id: contact.id) + tech_contacts.each do |c| + tech_domains << Domain.find(c.domain_id) + end + + tech_domains end def collect_data_for_csv(contact, result) domains = find_related_domains(contact) - headers = %w[ - contact - domain - error - ] - - CSV.open('invalid_email.csv', 'w') do |csv| - csv << headers - + CSV.open('invalid_emails.csv', 'a') do |csv| domains.each do |domain| attrs = [] - attrs.push(domain) + attrs.push(domain.name) attrs.push(contact.email) attrs.push(result.errors) csv << attrs end end -end \ No newline at end of file +end + +def prepare_csv_file + headers = %w[ + contact + domain + error + ] + csv = CSV.open('invalid_emails.csv', 'w') + csv << headers +end + +def validate_puny_code(email) + email.include?('xn--') +end