Class: Wco::Lead

Inherits:
Object
  • Object
show all
Includes:
Mongoid::Document, Mongoid::Paranoia, Mongoid::Timestamps
Defined in:
app/models/wco/lead.rb

Constant Summary collapse

PAGE_PARAM_NAME =
'leads_page'
OP_DELETE =
'delete'
OP_ADD_TO_CAMPAIGN =
'add_to_campaign'
OPS =
[ OP_DELETE, OP_ADD_TO_CAMPAIGN ]

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.find_or_create_by_email(email) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
# File 'app/models/wco/lead.rb', line 52

def self.find_or_create_by_email email
  email = self.normalize_email email
  out = where( email: email ).first
  if !out
    domain    = email.split('@')[1]
    leadset   = Wco::Leadset.where(  company_url: domain ).first
    leadset ||= Wco::Leadset.create( company_url: domain, email: email )
    out = create!( email: email, leadset: leadset )
  end
  return out
end

.listObject



99
100
101
# File 'app/models/wco/lead.rb', line 99

def self.list
  [[nil,nil]] + all.map { |p| [ p.email, p.id ] }
end

.normalize_email(a) ⇒ Object



45
46
47
48
49
50
51
# File 'app/models/wco/lead.rb', line 45

def self.normalize_email a
  a = a.downcase
  if a.index('+')
    a.slice!( a[a.index('+')...a.index('@')] )
  end
  return a
end

Instance Method Details

#commentObject

_TODO: replace with log?



27
# File 'app/models/wco/lead.rb', line 27

field :comment

#convsObject



70
# File 'app/models/wco/lead.rb', line 70

def convs; conversations; end

#ctxsObject



72
# File 'app/models/wco/lead.rb', line 72

def ctxs; email_contexts; end

#nameObject



15
16
17
18
19
20
21
22
23
# File 'app/models/wco/lead.rb', line 15

def name
  if !self[:name].present?
    if email
      _name = (email[/\A[a-zA-Z]+/] || 'associate').capitalize
      update_attributes( name: _name )
    end
  end
  self[:name]
end

#normalize_emailObject



37
38
39
40
41
42
43
44
# File 'app/models/wco/lead.rb', line 37

def normalize_email
  self[:email] = email.downcase
  if email.index('+')
    a = email
    a.slice!( a[a.index('+')...a.index('@')] )
    self[:email] = a
  end
end

#schsObject



74
# File 'app/models/wco/lead.rb', line 74

def schs; email_actions; end

#set_leadsetObject



32
33
34
35
# File 'app/models/wco/lead.rb', line 32

def set_leadset
  domain         = email.split('@')[1]
  self.leadset ||= Wco::Leadset.find_or_create_by({ company_url: domain })
end

#to_sObject



95
96
97
98
# File 'app/models/wco/lead.rb', line 95

def to_s
  # "`#{name}` <#{email}>"
  email
end

#unsubscribe_tokenObject



87
88
89
90
91
92
# File 'app/models/wco/lead.rb', line 87

def unsubscribe_token
  if !self[:unsubscribe_token]
    update_attributes({ unsubscribe_token: (0...8).map { (65 + rand(26)).chr }.join })
  end
  self[:unsubscribe_token]
end