company.rb 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. require 'uri'
  2. require 'json'
  3. require 'rubydns'
  4. require 'rubydns/system'
  5. class Company < ActiveRecord::Base
  6. self.table_name = "companies"
  7. has_many :email_leads, :foreign_key => :domain, :primary_key => :domain
  8. has_many :phone_leads, :foreign_key => :domain, :primary_key => :domain
  9. has_many :social_leads, :foreign_key => :domain, :primary_key => :domain
  10. has_many :people, :foreign_key => :domain, :primary_key => :domain
  11. scope :with_image, lambda { where.not(:image_url => nil) }
  12. scope :by_state, lambda {|state| where(:state => state) }
  13. scope :by_country, lambda {|state| where(:state => state) }
  14. scope :by_domain, lambda {|domain| where(:domain => domain) }
  15. scope :by_website, lambda {|website| where(:website => website) }
  16. scope :by_employees, lambda {|employees| where(:employees_exact > employees) }
  17. scope :by_revenue, lambda {|revenue| where(:revenue_exact > revenue) }
  18. scope :by_industry, lambda {|industry| where(:industry => industry) }
  19. scope :updated_recently, lambda {where(:updated_at => [24.hours.ago..Time.now]) }
  20. scope :not_updated_recently, lambda {where(:updated_at => [1.year.ago..1.month.ago]) }
  21. alias_attribute :display_name, :company_name
  22. has_many :searches, class_name: "Searchjoy::Search", as: :convertable
  23. searchkick callbacks: :async, suggest: [:industry], locations: ["location"],
  24. conversions: ["unique_user_conversions", "total_conversions"],
  25. index_name: "companies", similarity: "BM25", batch_size: 500
  26. def self.scrape
  27. urls = Company.where(:note => "VALID").pluck(:website).uniq
  28. urls.each do |url|
  29. SpiderWorker.perform_async(url, 1, url)
  30. end
  31. puts "DONE"
  32. end
  33. def self.scrub
  34. user = User.first
  35. find_each do |biz|
  36. CompanyAnalysisWorker.perform_async(biz.id)
  37. job_id = SecureRandom.hex(8)
  38. SpiderWorker.perform_async(biz.website, user.id, job_id)
  39. end
  40. end
  41. def keywords
  42. self.description.to_s.split(" ").uniq
  43. end
  44. def self.to_csv(options = {})
  45. csv_string = CSV.generate(options) do |csv|
  46. csv << ["Company", "Industry", "Contact Name", "Contact Title", "City", "State", "Country", "Description"]
  47. all.each do |record|
  48. csv << [record.company_name, record.industry, record.contact_person, record.contact_person_title, record.city, record.state, record.country, record.description]
  49. end
  50. end
  51. csv_string
  52. end
  53. def search_data
  54. as_json only: [:company_name, :address, :city, :state, :country, :website, :domain,
  55. :contact_person, :contact_person_title, :important_people, :industry, :description]
  56. end
  57. def tags
  58. self.description.split(" ").uniq
  59. end
  60. def score
  61. missing = self.attributes.values.select(&:nil?).count
  62. total = self.attributes.count
  63. (((total.to_f - missing.to_f) / total.to_f) * 100).round(1)
  64. end
  65. end