validation_worker.rb 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. class ValidationWorker
  2. include Sidekiq::Worker
  3. include Sidekiq::Status::Worker # Important!
  4. include Sidekiq::Benchmark::Worker
  5. sidekiq_options :queue => 'validation', :retry => false, :backtrace => true, expires_in: 1.hour
  6. def perform(email_address, user_id)
  7. benchmark.extraction_metric do
  8. email = EmailLead.find_or_initialize_by(:address => email_address, :user_id => user_id)
  9. if email
  10. email_domain = email.address.rpartition("@")[2]
  11. school = Swot::school_name email.address
  12. if school or email_domain.downcase.match(".edu")
  13. email.organization = school || "Education"
  14. end
  15. # govt_domain = Gman.new email.address
  16. #
  17. # if govt_domain or email_domain.downcase.match(".gov")
  18. # email.organization = govt_domain.agency
  19. # email.organization ||= "Government"
  20. # end
  21. unless email.blank? or email.is_valid or email.address.match("gmail.com") or email.address.match("abuse") or email.address.match("yahoo.com") or email.address.match("hotmail.com") or email.address.match("msn.com") or email.address.match("aol.com") or email.address.split(".").last.match("ca")
  22. checker = ["support", $public_hostname].join("@")
  23. validator = EmailAuthentication::Base.new
  24. result = validator.check(email.address, checker)
  25. if result and result[0] and result.to_s.match("250")
  26. email.smtp_reply = result[1].to_s.first(255)
  27. email.is_valid = true
  28. else
  29. email.is_valid = false
  30. end
  31. end
  32. email.save
  33. end
  34. benchmark.finish
  35. end
  36. end
  37. def permutate(first_name, last_name, domain)
  38. first_initial = first_name[0]
  39. last_initial = last_name[0]
  40. # Define each name permutation manually
  41. name_permutations = <<PERMS
  42. {first_name}
  43. {last_name}
  44. {first_initial}
  45. {last_initial}
  46. {first_name}{last_name}
  47. {first_name}.{last_name}
  48. {first_initial}{last_name}
  49. {first_initial}.{last_name}
  50. {first_name}{last_initial}
  51. {first_name}.{last_initial}
  52. {first_initial}{last_initial}
  53. {first_initial}.{last_initial}
  54. {last_name}{first_name}
  55. {last_name}.{first_name}
  56. {last_name}{first_initial}
  57. {last_name}.{first_initial}
  58. {last_initial}{first_name}
  59. {last_initial}.{first_name}
  60. {last_initial}{first_initial}
  61. {last_initial}.{first_initial}
  62. {first_name}-{last_name}
  63. {first_initial}-{last_name}
  64. {first_name}-{last_initial}
  65. {first_initial}-{last_initial}
  66. {last_name}-{first_name}
  67. {last_name}-{first_initial}
  68. {last_initial}-{first_name}
  69. {last_initial}-{first_initial}
  70. {first_name}_{last_name}
  71. {first_initial}_{last_name}
  72. {first_name}_{last_initial}
  73. {first_initial}_{last_initial}
  74. {last_name}_{first_name}
  75. {last_name}_{first_initial}
  76. {last_initial}_{first_name}
  77. {last_initial}_{first_initial}
  78. PERMS
  79. # substitutions to get all permutations to an Array
  80. name_permutations = name_permutations.gsub('{first_name}', first_name)
  81. .gsub('{last_name}', last_name)
  82. .gsub('{first_initial}', first_initial)
  83. .gsub('{last_initial}', last_initial)
  84. .split($/)
  85. # accept domain arg to be a string or an array
  86. # %40 => @
  87. if domain.is_a? String
  88. domain = ['%40'].product domain.split
  89. elsif domain.is_a? Array
  90. domain = ['%40'].product domain
  91. else
  92. raise ArgumentError, 'Domain was neither a String or Array'
  93. end
  94. name_and_domains = name_permutations.product domain
  95. # combine names and domains
  96. # return permuations
  97. permutations = name_and_domains.map {|email| email.join }
  98. end
  99. end