ffcrm_cloudfuji 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/views/leads/_top_section_ido_id.html.haml +4 -0
- data/lib/fat_free_crm/cloudfuji/event_observers/app_observer.rb +2 -1
- data/lib/fat_free_crm/cloudfuji/event_observers/base.rb +65 -0
- data/lib/fat_free_crm/cloudfuji/event_observers/customer_observer.rb +2 -28
- data/lib/fat_free_crm/cloudfuji/event_observers/email_observer.rb +1 -41
- data/lib/fat_free_crm/cloudfuji/event_observers/error_observer.rb +5 -7
- data/lib/fat_free_crm/cloudfuji/event_observers/event_rules_observer.rb +3 -10
- data/lib/fat_free_crm/cloudfuji/event_observers/payment_observer.rb +2 -1
- data/lib/fat_free_crm/cloudfuji/event_observers/user_observer.rb +2 -0
- data/lib/fat_free_crm/cloudfuji/view_hooks.rb +5 -1
- data/lib/fat_free_crm/cloudfuji.rb +1 -0
- data/lib/ffcrm_cloudfuji/version.rb +1 -1
- metadata +6 -4
@@ -2,11 +2,12 @@ module FatFreeCRM
|
|
2
2
|
module Cloudfuji
|
3
3
|
module EventObservers
|
4
4
|
class AppObserver < ::Cloudfuji::EventObserver
|
5
|
+
include FatFreeCRM::Cloudfuji::EventObservers::Base
|
6
|
+
|
5
7
|
def app_claimed
|
6
8
|
# Be verbose in development environment
|
7
9
|
debug = Rails.env == 'development'
|
8
10
|
|
9
|
-
data = params['data']
|
10
11
|
ido_id = data.try(:[], 'ido_id')
|
11
12
|
|
12
13
|
if user = User.find(:first, :conditions => ["email = ? OR ido_id = ?", data['email'], data['ido_id']])
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module FatFreeCRM
|
2
|
+
module Cloudfuji
|
3
|
+
module EventObservers
|
4
|
+
module Base
|
5
|
+
# Shared methods for observers
|
6
|
+
|
7
|
+
def find_lead_by_data
|
8
|
+
# Look up Lead by ido_id or email address.
|
9
|
+
lead = Lead.find_by_ido_id(data['customer_ido_id']) if data['customer_ido_id'].present?
|
10
|
+
lead ||= Lead.find_by_email(email)
|
11
|
+
update_ido_id_if_blank(lead)
|
12
|
+
lead
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
def find_or_create_activity_subject!
|
17
|
+
models = [Lead, Contact, Account]
|
18
|
+
models.each do |model|
|
19
|
+
has_ido_id = model.new.respond_to?(:ido_id)
|
20
|
+
|
21
|
+
if data['customer_ido_id'].present? && has_ido_id
|
22
|
+
asset = model.find_by_ido_id(data['customer_ido_id'])
|
23
|
+
return asset if asset
|
24
|
+
end
|
25
|
+
|
26
|
+
if asset = model.find_by_email(email)
|
27
|
+
update_ido_id_if_blank(asset) if has_ido_id
|
28
|
+
return asset if asset
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
puts "No pre-existing records found, creating a lead"
|
33
|
+
lead = Lead.create!(
|
34
|
+
:email => email,
|
35
|
+
:ido_id => data['customer_ido_id'],
|
36
|
+
:first_name => email.split("@").first,
|
37
|
+
:last_name => email.split("@").last,
|
38
|
+
:user => User.first)
|
39
|
+
lead
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def update_ido_id_if_blank(asset)
|
46
|
+
# If lead was found by email and has blank ido_id,
|
47
|
+
# but customer_ido_id is present, then update ido_id
|
48
|
+
if asset && asset.respond_to?(:ido_id) &&
|
49
|
+
asset.ido_id.blank? && data['customer_ido_id'].present?
|
50
|
+
asset.update_attribute :ido_id, data['customer_ido_id']
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def data
|
55
|
+
params['data']
|
56
|
+
end
|
57
|
+
|
58
|
+
def email
|
59
|
+
data['email'] || data['recipient']
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -2,6 +2,8 @@ module FatFreeCRM
|
|
2
2
|
module Cloudfuji
|
3
3
|
module EventObservers
|
4
4
|
class CustomerObserver < ::Cloudfuji::EventObserver
|
5
|
+
include FatFreeCRM::Cloudfuji::EventObservers::Base
|
6
|
+
|
5
7
|
# "customer_created"
|
6
8
|
# :account_balance => 0
|
7
9
|
# :object => "customer"
|
@@ -30,34 +32,6 @@ module FatFreeCRM
|
|
30
32
|
subject.versions.create! :event => message
|
31
33
|
end
|
32
34
|
|
33
|
-
def data
|
34
|
-
params['data']
|
35
|
-
end
|
36
|
-
|
37
|
-
def find_or_create_activity_subject!
|
38
|
-
lookups = [Account, Lead, Contact]
|
39
|
-
lookups.each do |model|
|
40
|
-
puts "#{model}.find_by_email( #{data['email']} )" if @debug
|
41
|
-
result = model.find_by_email(data['email'])
|
42
|
-
return result if result
|
43
|
-
end
|
44
|
-
|
45
|
-
lead = if data['customer_ido_id'].present?
|
46
|
-
Lead.find_by_ido_id(data['customer_ido_id'])
|
47
|
-
else
|
48
|
-
Lead.find_by_email(data['email'])
|
49
|
-
end
|
50
|
-
lead ||= Lead.new
|
51
|
-
|
52
|
-
lead.email = data['email']
|
53
|
-
lead.ido_id = data['customer_ido_id']
|
54
|
-
lead.first_name = data['first_name'] || data['email'].split("@").first if lead.first_name.blank?
|
55
|
-
lead.last_name = data['last_name'] || data['email'].split("@").last if lead.last_name.blank?
|
56
|
-
lead.user ||= User.first
|
57
|
-
lead.save!
|
58
|
-
|
59
|
-
lead
|
60
|
-
end
|
61
35
|
end
|
62
36
|
end
|
63
37
|
end
|
@@ -2,7 +2,7 @@ module FatFreeCRM
|
|
2
2
|
module Cloudfuji
|
3
3
|
module EventObservers
|
4
4
|
class EmailObserver < ::Cloudfuji::EventObserver
|
5
|
-
|
5
|
+
include FatFreeCRM::Cloudfuji::EventObservers::Base
|
6
6
|
|
7
7
|
# "email_delivered"
|
8
8
|
# :message_headers => "[[\"Received\", \"by luna.mailgun.net with SMTP mgrt 7313261; Tue, 20 Mar 2012 19:00:58 +0000\"], [\"Received\", \"from localhost.localdomain (ec2-23-20-14-40.compute-1.amazonaws.com [23.20.14.40]) by mxa.mailgun.org with ESMTP id 4f68d3e9.4ddcdf0-luna; Tue, 20 Mar 2012 19:00:57 -0000 (UTC)\"], [\"Date\", \"Tue, 20 Mar 2012 19:00:57 +0000\"], [\"From\", \"Sean Grove <sean@cloudfuji.com>\"], [\"Reply-To\", \"Cloudfuji Team <support@cloudfuji.com>\"], [\"Message-Id\", \"<4f68d3e9ad834_3c29377ea432615@ip-10-190-150-17.mail>\"], [\"X-Mailgun-Campaign-Id\", \"cloudfuji_buddies\"], [\"Repy-To\", \"support@cloudfuji.com\"], [\"To\", \"s+cfdemo@cloudfuji.com\"], [\"Subject\", \"Cloudfuji Beta: Thank you for your early support. Here's a gift for you.\"], [\"List-Unsubscribe\", \"<mailto:u+na6wcn3gmqzdszbsmrrdam3ghfstkzrxgbstgn3fgvtdgzjumvrgmyzgmm6tqnlkgetheplteuzeey3gmrsw23zfgqyge5ltnbus4zdpez2d2jjsietgipjrmi4a@email.cloudfuji.com>\"], [\"X-Mailgun-Sid\", \"WyI2NWQ4MSIsICJzK2NmZGVtb0BidXNoaS5kbyIsICIxYjgiXQ==\"], [\"Sender\", \"sean=cloudfuji.com@cloudfuji.com\"]]"
|
@@ -66,42 +66,6 @@ module FatFreeCRM
|
|
66
66
|
subject.versions.create! :event => message
|
67
67
|
end
|
68
68
|
|
69
|
-
def data
|
70
|
-
params['data']
|
71
|
-
end
|
72
|
-
|
73
|
-
def find_or_create_activity_subject!
|
74
|
-
lookups = [Account, Lead, Contact]
|
75
|
-
lookups.each do |model|
|
76
|
-
puts "#{model}.find_by_email( #{recipient} )"
|
77
|
-
result = model.find_by_email(recipient)
|
78
|
-
return result if result
|
79
|
-
end
|
80
|
-
|
81
|
-
puts "No pre-existing records found, creating a lead"
|
82
|
-
lead = if data['customer_ido_id'].present?
|
83
|
-
Lead.find_by_ido_id(data['customer_ido_id'])
|
84
|
-
else
|
85
|
-
Lead.find_by_email(recipient)
|
86
|
-
end
|
87
|
-
lead ||= Lead.new
|
88
|
-
|
89
|
-
lead.email = recipient
|
90
|
-
lead.ido_id = data['customer_ido_id']
|
91
|
-
lead.first_name = recipient.split("@").first if lead.first_name.blank?
|
92
|
-
lead.last_name = recipient.split("@").last if lead.last_name.blank?
|
93
|
-
lead.user ||= User.first
|
94
|
-
|
95
|
-
puts "About to save:"
|
96
|
-
puts lead.inspect
|
97
|
-
|
98
|
-
lead.save!
|
99
|
-
|
100
|
-
puts lead.inspect
|
101
|
-
|
102
|
-
lead
|
103
|
-
end
|
104
|
-
|
105
69
|
# Temp workarounds until umi delivers events properly
|
106
70
|
# Good example of the necessity of deep-schema enforcement for events
|
107
71
|
def headers
|
@@ -112,10 +76,6 @@ module FatFreeCRM
|
|
112
76
|
end
|
113
77
|
end
|
114
78
|
|
115
|
-
def recipient
|
116
|
-
data['recipient']
|
117
|
-
end
|
118
|
-
|
119
79
|
def custom_variables
|
120
80
|
JSON(data['custom_variables'])
|
121
81
|
end
|
@@ -2,6 +2,7 @@ module FatFreeCRM
|
|
2
2
|
module Cloudfuji
|
3
3
|
module EventObservers
|
4
4
|
class ErrorObserver < ::Cloudfuji::EventObserver
|
5
|
+
include FatFreeCRM::Cloudfuji::EventObservers::Base
|
5
6
|
include ActionView::Helpers::TextHelper
|
6
7
|
|
7
8
|
def error_caught
|
@@ -11,8 +12,11 @@ module FatFreeCRM
|
|
11
12
|
lead = Lead.find_by_ido_id(user_attributes['ido_id']) if user_attributes['ido_id'].present?
|
12
13
|
lead ||= Lead.find_by_email(user_attributes['email'])
|
13
14
|
if lead
|
15
|
+
# Set ido_id if blank
|
16
|
+
user_attributes
|
17
|
+
|
14
18
|
occurence = ActiveSupport::Inflector.ordinalize(data['occurrences'])
|
15
|
-
message = "Error
|
19
|
+
message = "Error experienced in <strong>#{data['app_name']}</strong> [#{data['environment_name']}] (#{occurence} time): "
|
16
20
|
message << "<em>" << truncate(data['message'], :length => 75) << "</em>"
|
17
21
|
message << "<br />View the error at: #{data['url']}" if data['url']
|
18
22
|
lead.versions.create! :event => message
|
@@ -20,12 +24,6 @@ module FatFreeCRM
|
|
20
24
|
end
|
21
25
|
end
|
22
26
|
|
23
|
-
private
|
24
|
-
|
25
|
-
def data
|
26
|
-
params['data']
|
27
|
-
end
|
28
|
-
|
29
27
|
end
|
30
28
|
end
|
31
29
|
end
|
@@ -2,19 +2,12 @@ module FatFreeCRM
|
|
2
2
|
module Cloudfuji
|
3
3
|
module EventObservers
|
4
4
|
class EventRulesObserver < ::Cloudfuji::EventObserver
|
5
|
+
include FatFreeCRM::Cloudfuji::EventObservers::Base
|
6
|
+
|
5
7
|
# Fire for all events
|
6
8
|
def catch_all
|
7
|
-
|
8
|
-
email = data['email'] || data['recipient']
|
9
|
-
# Look up Lead by ido_id, fall back to email address
|
10
|
-
lead = if data['customer_ido_id'].present?
|
11
|
-
Lead.find_by_ido_id(data['customer_ido_id'])
|
12
|
-
else
|
13
|
-
Lead.find_by_email(email)
|
14
|
-
end
|
15
|
-
if lead
|
9
|
+
if lead = find_lead_by_data
|
16
10
|
event_name = "#{params['category']}_#{params['event']}"
|
17
|
-
|
18
11
|
EventRule.find_all_by_event_category_and_cloudfuji_event('cloudfuji_event_received', event_name).each do |rule|
|
19
12
|
rule.process(lead, params['data'])
|
20
13
|
end
|
@@ -4,7 +4,11 @@ module FatFreeCRM
|
|
4
4
|
|
5
5
|
# Add lead scoring to summary on lead show page
|
6
6
|
def show_lead_sidebar_bottom(view, context)
|
7
|
-
view.render(:partial => 'leads/sidebar_show_lead_scoring', :locals =>
|
7
|
+
view.render(:partial => 'leads/sidebar_show_lead_scoring', :locals => context)
|
8
|
+
end
|
9
|
+
|
10
|
+
def lead_top_section_bottom(view, context)
|
11
|
+
view.render(:partial => 'leads/top_section_ido_id', :locals => context)
|
8
12
|
end
|
9
13
|
|
10
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ffcrm_cloudfuji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-05-
|
13
|
+
date: 2012-05-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rspec-rails
|
@@ -118,6 +118,7 @@ files:
|
|
118
118
|
- app/views/admin/event_rules/index.html.haml
|
119
119
|
- app/views/leads/_lead.html.haml
|
120
120
|
- app/views/leads/_sidebar_show_lead_scoring.html.haml
|
121
|
+
- app/views/leads/_top_section_ido_id.html.haml
|
121
122
|
- config.ru
|
122
123
|
- config/database.yml
|
123
124
|
- config/initializers/cloudfuji.rb
|
@@ -132,6 +133,7 @@ files:
|
|
132
133
|
- install.rb
|
133
134
|
- lib/fat_free_crm/cloudfuji.rb
|
134
135
|
- lib/fat_free_crm/cloudfuji/event_observers/app_observer.rb
|
136
|
+
- lib/fat_free_crm/cloudfuji/event_observers/base.rb
|
135
137
|
- lib/fat_free_crm/cloudfuji/event_observers/customer_observer.rb
|
136
138
|
- lib/fat_free_crm/cloudfuji/event_observers/email_observer.rb
|
137
139
|
- lib/fat_free_crm/cloudfuji/event_observers/error_observer.rb
|
@@ -166,7 +168,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
166
168
|
version: '0'
|
167
169
|
segments:
|
168
170
|
- 0
|
169
|
-
hash:
|
171
|
+
hash: 529527583371072573
|
170
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
171
173
|
none: false
|
172
174
|
requirements:
|
@@ -175,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
175
177
|
version: '0'
|
176
178
|
segments:
|
177
179
|
- 0
|
178
|
-
hash:
|
180
|
+
hash: 529527583371072573
|
179
181
|
requirements: []
|
180
182
|
rubyforge_project:
|
181
183
|
rubygems_version: 1.8.24
|