email_lead.rb 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. require 'swot'
  2. class EmailLead < ActiveRecord::Base
  3. validates_uniqueness_of :address, scope: :user_id
  4. validate :mail_checker
  5. belongs_to :website #, :foreign_key => :domain, :primary_key => :domain
  6. belongs_to :user
  7. after_create :validate_address
  8. searchkick callbacks: :async #, word_start: [:address, :domain], suggest: [:address] #, wordnet: true
  9. # after_create :get_page_text
  10. def get_page_text
  11. ExtractWorker.perform_async("EmailLead", self.id) # unless Rails.env.development?
  12. end
  13. def validate_address
  14. ValidationWorker.perform_async(self.address, self.user_id)
  15. end
  16. def mail_checker
  17. MailChecker(self.address)
  18. end
  19. def score
  20. missing = self.attributes.values.select(&:nil?).count
  21. total = self.attributes.count
  22. (((total.to_f - missing.to_f) / total.to_f) * 100).round(1)
  23. end
  24. def names
  25. names = self.page_text.scan(/([A-Z][a-z]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+)/)
  26. return names
  27. end
  28. def is_academic?
  29. Swot::is_academic? self.address
  30. end
  31. def display_name
  32. self.address
  33. end
  34. def self.to_csv(options = {})
  35. csv_string = CSV.generate(options) do |csv|
  36. csv << ["Email", "Tags", "Source", "Date"]
  37. all.each do |record|
  38. csv << [record.address, record.keywords, record.domain, record.created_at.to_date]
  39. end
  40. end
  41. csv_string
  42. end
  43. def self.bulk_crawl(ids=[])
  44. if ids.empty?
  45. urls = Company.select(:website, :id).pluck(:website).uniq
  46. else
  47. urls = Company.select(:website, :id).find(ids).pluck(:website).uniq
  48. end
  49. user = User.last
  50. puts ">> Loading #{urls.count} websites into crawler..."
  51. urls.each do |url|
  52. job_id = [user.id, "__", url].join
  53. SpiderWorker.perform_async(url, user.id, job_id)
  54. end
  55. puts "-- #{urls.count} targets acquired --"
  56. end
  57. def email_type
  58. if self.address[-3..-1] == "com"
  59. type = "Company"
  60. elsif self.address[-3..-1] == "gov"
  61. type = "Government"
  62. elsif self.address[-3..-1] == "org"
  63. type = "Non-Profit"
  64. elsif self.address[-3..-1] == "edu"
  65. type = "Education"
  66. elsif self.address[-3..-1] == "mil"
  67. type = "Military"
  68. elsif self.address[-3..-1] == "net"
  69. type = "Technology"
  70. else
  71. type = ""
  72. end
  73. type ||= self.domain[-1..-4]
  74. return type
  75. end
  76. end