ffcrm_cloudfuji 0.2.1 → 0.2.2

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.
Files changed (39) hide show
  1. data/app/assets/javascripts/event_rules.js.coffee +55 -0
  2. data/app/assets/javascripts/ffcrm_cloudfuji.js +1 -1
  3. data/app/assets/stylesheets/event_rules.css.scss +53 -0
  4. data/app/assets/stylesheets/ffcrm_cloudfuji.css +1 -1
  5. data/app/controllers/admin/{lead_scoring_controller.rb → event_rules_controller.rb} +12 -12
  6. data/app/helpers/admin/event_rules_helper.rb +47 -0
  7. data/app/models/event_rule.rb +112 -0
  8. data/app/models/lead_event_rule_count.rb +4 -0
  9. data/app/observers/cloudfuji_lead_observer.rb +27 -0
  10. data/app/views/admin/{lead_scoring → event_rules}/_errors.html.haml +1 -1
  11. data/app/views/admin/event_rules/_form.html.haml +39 -0
  12. data/app/views/admin/{lead_scoring → event_rules}/index.html.haml +7 -7
  13. data/app/views/leads/_sidebar_show_lead_scoring.html.haml +3 -3
  14. data/config/locales/en-US.yml +5 -0
  15. data/config/routes.rb +1 -1
  16. data/db/migrate/20120524031157_extend_lead_scoring_as_event_rules.rb +54 -0
  17. data/db/migrate/20120525151511_add_ido_id_to_lead.rb +5 -0
  18. data/lib/fat_free_crm/cloudfuji/event_observers/customer_observer.rb +3 -1
  19. data/lib/fat_free_crm/cloudfuji/event_observers/email_observer.rb +4 -2
  20. data/lib/fat_free_crm/cloudfuji/event_observers/event_rules_observer.rb +23 -0
  21. data/lib/fat_free_crm/cloudfuji/event_observers/user_observer.rb +6 -5
  22. data/lib/fat_free_crm/cloudfuji.rb +1 -1
  23. data/lib/ffcrm_cloudfuji/engine.rb +9 -4
  24. data/lib/ffcrm_cloudfuji/version.rb +1 -1
  25. data/spec/event_observers/event_rules_observer_spec.rb +103 -0
  26. data/spec/factories/lead_scoring_factories.rb +9 -3
  27. data/spec/internal/db/schema.rb +19 -13
  28. data/spec/models/event_rule_spec.rb +47 -0
  29. data/spec/observers/cloudfuji_lead_observer_spec.rb +26 -0
  30. metadata +80 -92
  31. data/app/assets/javascripts/lead_scoring.js.coffee +0 -42
  32. data/app/assets/stylesheets/lead_scoring.css.scss +0 -47
  33. data/app/helpers/admin/lead_scoring_helper.rb +0 -10
  34. data/app/models/lead_scoring_rule.rb +0 -6
  35. data/app/models/lead_scoring_rule_count.rb +0 -4
  36. data/app/views/admin/lead_scoring/_form.html.haml +0 -14
  37. data/config/initializers/inflections.rb +0 -3
  38. data/lib/fat_free_crm/cloudfuji/event_observers/lead_scoring_observer.rb +0 -38
  39. data/spec/event_observers/lead_scoring_observer_spec.rb +0 -87
@@ -0,0 +1,103 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ include FatFreeCRM::Cloudfuji::EventObservers
4
+
5
+ describe EventRulesObserver do
6
+ before do
7
+ @observer = EventRulesObserver.new
8
+ @observer.params = {
9
+ 'category' => 'customer',
10
+ 'event' => 'had_tea',
11
+ "data" => {
12
+ "email" => "test_lead@example.com",
13
+ "type_of_tea" => "Jasmine"
14
+ }
15
+ }
16
+ end
17
+
18
+ def find_rule_count(lead, rule)
19
+ LeadEventRuleCount.find_by_lead_id_and_event_rule_id(lead, rule)
20
+ end
21
+
22
+ describe 'Cloudfuji event received' do
23
+ describe 'Lead scoring' do
24
+
25
+ it "should increment a lead's score when an event is fired" do
26
+ user = FactoryGirl.create(:user, :ido_id => "1234")
27
+ @lead = FactoryGirl.create(:lead, :email => 'test_lead@example.com', :user => user, :campaign => nil)
28
+
29
+ @rule = FactoryGirl.create :event_rule,
30
+ :event_category => "cloudfuji_event_received",
31
+ :cloudfuji_event => "customer_had_tea",
32
+ :action => "change_lead_score",
33
+ :change_score_by => 20
34
+
35
+ @observer.catch_all
36
+ @lead.reload
37
+ @lead.versions.last.event.should include("Rule for Cloudfuji event - 'customer_had_tea': Score changed by 20 points")
38
+ @lead.score.should == 20
39
+ find_rule_count(@lead, @rule).count.should == 1
40
+
41
+ # Should increment score twice
42
+ @observer.catch_all
43
+ @lead.reload
44
+ @lead.score.should == 40
45
+ find_rule_count(@lead, @rule).count.should == 2
46
+ end
47
+
48
+ it "should increment a lead's score only when matching data is present" do
49
+ user = FactoryGirl.create(:user, :ido_id => "1234")
50
+ @lead = FactoryGirl.create(:lead, :email => 'test_lead@example.com', :user => user, :campaign => nil)
51
+
52
+ @rule = FactoryGirl.create :event_rule,
53
+ :event_category => "cloudfuji_event_received",
54
+ :cloudfuji_event => "customer_had_tea",
55
+ :action => "change_lead_score",
56
+ :change_score_by => 15,
57
+ :match => "Russian Earl Grey"
58
+
59
+ @observer.catch_all
60
+ @lead.reload
61
+ @lead.score.should == 0
62
+ # No LeadEventRuleCount should be created yet
63
+ find_rule_count(@lead, @rule).should == nil
64
+
65
+ @observer.params['data']['type_of_tea'] = "Russian Earl Grey"
66
+ @observer.catch_all
67
+
68
+ @lead.reload
69
+ @lead.score.should == 15
70
+ find_rule_count(@lead, @rule).count.should == 1
71
+ end
72
+
73
+ it "should not decrement a lead's score three times if the rule should only be applied twice" do
74
+ user = FactoryGirl.create(:user, :ido_id => "1234")
75
+ @lead = FactoryGirl.create(:lead, :email => 'test_lead@example.com', :user => user, :campaign => nil)
76
+
77
+ @rule = FactoryGirl.create :event_rule,
78
+ :event_category => "cloudfuji_event_received",
79
+ :cloudfuji_event => "customer_had_tea",
80
+ :action => "change_lead_score",
81
+ :change_score_by => -10,
82
+ :limit_per_lead => 1
83
+
84
+ test_score = 0
85
+ 2.times do |i|
86
+ test_score += -10
87
+ @observer.catch_all
88
+ @lead.reload
89
+
90
+ @lead.versions.last.event.should == "Rule for Cloudfuji event - 'customer_had_tea': Score changed by -10 points. (New total: #{test_score})"
91
+ @lead.score.should == test_score
92
+ find_rule_count(@lead, @rule).count.should == i + 1
93
+ end
94
+
95
+ # Should only decrement score twice
96
+ @observer.catch_all
97
+ @lead.reload
98
+ @lead.score.should == -20
99
+ find_rule_count(@lead, @rule).count.should == 2
100
+ end
101
+ end
102
+ end
103
+ end
@@ -1,9 +1,15 @@
1
1
  FactoryGirl.define do
2
- factory :lead_scoring_rule do
3
- event {
2
+ factory :event_rule do
3
+ event_category { %w(cloudfuji_event_received lead_attribute_changed).sample }
4
+
5
+ cloudfuji_event {
4
6
  %w(customer email app user).sample << "_" <<
5
7
  %w(partied danced backflipped moonwalked).sample
6
8
  }
7
- points { rand(100) }
9
+ lead_attribute { %w(username score first_name last_name).sample }
10
+
11
+ action { %w(add_tag remove_tag change_lead_score send_notification).sample }
12
+ tag { 'EventTag' }
13
+ change_score_by { rand(100) }
8
14
  end
9
15
  end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20120515194445) do
14
+ ActiveRecord::Schema.define(:version => 20120525151511) do
15
15
 
16
16
  create_table "account_contacts", :force => true do |t|
17
17
  t.integer "account_id"
@@ -196,6 +196,20 @@ ActiveRecord::Schema.define(:version => 20120515194445) do
196
196
 
197
197
  add_index "emails", ["mediator_id", "mediator_type"], :name => "index_emails_on_mediator_id_and_mediator_type"
198
198
 
199
+ create_table "event_rules", :force => true do |t|
200
+ t.string "cloudfuji_event"
201
+ t.string "match"
202
+ t.integer "change_score_by", :default => 0
203
+ t.datetime "created_at", :null => false
204
+ t.datetime "updated_at", :null => false
205
+ t.string "event_category", :default => "cloudfuji_event_received"
206
+ t.string "lead_attribute"
207
+ t.string "action", :default => "change_lead_score"
208
+ t.string "tag"
209
+ t.integer "limit_per_lead"
210
+ t.boolean "case_insensitive_matching"
211
+ end
212
+
199
213
  create_table "field_groups", :force => true do |t|
200
214
  t.string "name", :limit => 64
201
215
  t.string "label", :limit => 128
@@ -227,19 +241,10 @@ ActiveRecord::Schema.define(:version => 20120515194445) do
227
241
  add_index "fields", ["field_group_id"], :name => "index_fields_on_field_group_id"
228
242
  add_index "fields", ["name"], :name => "index_fields_on_name"
229
243
 
230
- create_table "lead_scoring_rule_counts", :force => true do |t|
244
+ create_table "lead_event_rule_counts", :force => true do |t|
231
245
  t.integer "lead_id"
232
- t.integer "lead_scoring_rule_id"
233
- t.integer "count", :default => 0
234
- end
235
-
236
- create_table "lead_scoring_rules", :force => true do |t|
237
- t.string "event"
238
- t.string "match"
239
- t.integer "points", :default => 0
240
- t.boolean "once"
241
- t.datetime "created_at", :null => false
242
- t.datetime "updated_at", :null => false
246
+ t.integer "event_rule_id"
247
+ t.integer "count", :default => 0
243
248
  end
244
249
 
245
250
  create_table "leads", :force => true do |t|
@@ -271,6 +276,7 @@ ActiveRecord::Schema.define(:version => 20120515194445) do
271
276
  t.string "skype", :limit => 128
272
277
  t.text "subscribed_users"
273
278
  t.integer "score", :default => 0
279
+ t.text "ido_id"
274
280
  end
275
281
 
276
282
  add_index "leads", ["assigned_to"], :name => "index_leads_on_assigned_to"
@@ -0,0 +1,47 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe EventRule do
4
+ describe "validations" do
5
+
6
+ it "should create a new instance given valid attributes" do
7
+ EventRule.create!(
8
+ :event_category => "cloudfuji_event_received",
9
+ :cloudfuji_event => "dummy_event",
10
+ :action => "add_tag",
11
+ :tag => "EventTag"
12
+ )
13
+ end
14
+
15
+ it "should be invalid without a cloudfuji_event if event category is cloudfuji_event_received" do
16
+ @event_rule = EventRule.new :event_category => "cloudfuji_event_received"
17
+ @event_rule.should_not be_valid
18
+ @event_rule.errors[:cloudfuji_event].should include("can't be blank")
19
+ end
20
+
21
+ it "should be invalid without a lead_attribute if event category is lead_attribute_changed" do
22
+ @event_rule = EventRule.new :event_category => "lead_attribute_changed"
23
+ @event_rule.should_not be_valid
24
+ @event_rule.errors[:lead_attribute].should include("can't be blank")
25
+ end
26
+
27
+ it "should be invalid without a tag if action is add_tag or remove_tag" do
28
+ @event_rule = EventRule.new :action => "add_tag"
29
+ @event_rule.should_not be_valid
30
+ @event_rule.errors[:tag].should include("can't be blank")
31
+ @event_rule.action = "remove_tag"
32
+ @event_rule.should_not be_valid
33
+ @event_rule.errors[:tag].should include("can't be blank")
34
+ end
35
+
36
+ it "should be invalid without change_score_by if action is change_lead_score" do
37
+ @event_rule = EventRule.new :event_category => "cloudfuji_event_received",
38
+ :cloudfuji_event => "dummy_event",
39
+ :action => "change_lead_score",
40
+ :change_score_by => nil
41
+ @event_rule.should_not be_valid
42
+
43
+ @event_rule.errors[:change_score_by].should include("is not a number")
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe CloudfujiLeadObserver do
4
+
5
+ before do
6
+ @observer = CloudfujiLeadObserver.send :new
7
+ end
8
+
9
+ it "should process an event rule when a lead column is updated" do
10
+ user = FactoryGirl.create(:user, :ido_id => "1234")
11
+ @lead = FactoryGirl.create(:lead, :first_name => "Henry", :user => user, :campaign => nil)
12
+
13
+ EventRule.create!(
14
+ :event_category => "lead_attribute_changed",
15
+ :lead_attribute => "first_name",
16
+ :action => "change_lead_score",
17
+ :change_score_by => 5
18
+ )
19
+
20
+ EventRule.any_instance.should_receive(:process).with(@lead, ['Henry', 'George'])
21
+
22
+ @lead.first_name = "George"
23
+ @observer.after_update(@lead)
24
+ end
25
+
26
+ end
metadata CHANGED
@@ -1,137 +1,119 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: ffcrm_cloudfuji
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.1
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 0.2.2
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Sean Grove
9
9
  - Nathan Broadbent
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-05-22 00:00:00.000000000 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
13
+
14
+ date: 2012-05-25 00:00:00 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
16
17
  name: rspec-rails
17
- requirement: !ruby/object:Gem::Requirement
18
+ requirement: &id001 !ruby/object:Gem::Requirement
18
19
  none: false
19
- requirements:
20
+ requirements:
20
21
  - - ~>
21
- - !ruby/object:Gem::Version
22
- version: '2.6'
22
+ - !ruby/object:Gem::Version
23
+ version: "2.6"
23
24
  type: :development
24
25
  prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ~>
29
- - !ruby/object:Gem::Version
30
- version: '2.6'
31
- - !ruby/object:Gem::Dependency
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
32
28
  name: capybara
33
- requirement: !ruby/object:Gem::Requirement
29
+ requirement: &id002 !ruby/object:Gem::Requirement
34
30
  none: false
35
- requirements:
36
- - - ! '>='
37
- - !ruby/object:Gem::Version
38
- version: '0'
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
39
35
  type: :development
40
36
  prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ! '>='
45
- - !ruby/object:Gem::Version
46
- version: '0'
47
- - !ruby/object:Gem::Dependency
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
48
39
  name: combustion
49
- requirement: !ruby/object:Gem::Requirement
40
+ requirement: &id003 !ruby/object:Gem::Requirement
50
41
  none: false
51
- requirements:
52
- - - ! '>='
53
- - !ruby/object:Gem::Version
54
- version: '0'
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
55
46
  type: :development
56
47
  prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: '0'
63
- - !ruby/object:Gem::Dependency
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
64
50
  name: cloudfuji
65
- requirement: !ruby/object:Gem::Requirement
51
+ requirement: &id004 !ruby/object:Gem::Requirement
66
52
  none: false
67
- requirements:
68
- - - ! '>='
69
- - !ruby/object:Gem::Version
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
70
56
  version: 0.0.42
71
57
  type: :runtime
72
58
  prerelease: false
73
- version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
78
- version: 0.0.42
79
- - !ruby/object:Gem::Dependency
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
80
61
  name: authlogic_cloudfuji
81
- requirement: !ruby/object:Gem::Requirement
62
+ requirement: &id005 !ruby/object:Gem::Requirement
82
63
  none: false
83
- requirements:
64
+ requirements:
84
65
  - - ~>
85
- - !ruby/object:Gem::Version
86
- version: '0.9'
66
+ - !ruby/object:Gem::Version
67
+ version: "0.9"
87
68
  type: :runtime
88
69
  prerelease: false
89
- version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
- requirements:
92
- - - ~>
93
- - !ruby/object:Gem::Version
94
- version: '0.9'
70
+ version_requirements: *id005
95
71
  description: Integrates Fat Free CRM with the Cloudfuji hosting platform.
96
72
  email: s@cloudfuji.com
97
73
  executables: []
74
+
98
75
  extensions: []
76
+
99
77
  extra_rdoc_files: []
100
- files:
78
+
79
+ files:
101
80
  - .gitignore
102
81
  - .travis.yml
103
82
  - Gemfile
104
83
  - MIT-LICENSE
105
84
  - README
106
85
  - Rakefile
86
+ - app/assets/javascripts/event_rules.js.coffee
107
87
  - app/assets/javascripts/ffcrm_cloudfuji.js
108
- - app/assets/javascripts/lead_scoring.js.coffee
88
+ - app/assets/stylesheets/event_rules.css.scss
109
89
  - app/assets/stylesheets/ffcrm_cloudfuji.css
110
- - app/assets/stylesheets/lead_scoring.css.scss
111
- - app/controllers/admin/lead_scoring_controller.rb
112
- - app/helpers/admin/lead_scoring_helper.rb
113
- - app/models/lead_scoring_rule.rb
114
- - app/models/lead_scoring_rule_count.rb
115
- - app/views/admin/lead_scoring/_errors.html.haml
116
- - app/views/admin/lead_scoring/_form.html.haml
117
- - app/views/admin/lead_scoring/index.html.haml
90
+ - app/controllers/admin/event_rules_controller.rb
91
+ - app/helpers/admin/event_rules_helper.rb
92
+ - app/models/event_rule.rb
93
+ - app/models/lead_event_rule_count.rb
94
+ - app/observers/cloudfuji_lead_observer.rb
95
+ - app/views/admin/event_rules/_errors.html.haml
96
+ - app/views/admin/event_rules/_form.html.haml
97
+ - app/views/admin/event_rules/index.html.haml
118
98
  - app/views/leads/_lead.html.haml
119
99
  - app/views/leads/_sidebar_show_lead_scoring.html.haml
120
100
  - config.ru
121
101
  - config/database.yml
122
102
  - config/initializers/cloudfuji.rb
123
- - config/initializers/inflections.rb
103
+ - config/locales/en-US.yml
124
104
  - config/routes.rb
125
105
  - config/settings.yml
126
106
  - db/migrate/20120227184555_add_cloudfuji_fields_to_users.rb
127
107
  - db/migrate/20120515194445_add_lead_scoring_rules.rb
108
+ - db/migrate/20120524031157_extend_lead_scoring_as_event_rules.rb
109
+ - db/migrate/20120525151511_add_ido_id_to_lead.rb
128
110
  - ffcrm_cloudfuji.gemspec
129
111
  - install.rb
130
112
  - lib/fat_free_crm/cloudfuji.rb
131
113
  - lib/fat_free_crm/cloudfuji/event_observers/app_observer.rb
132
114
  - lib/fat_free_crm/cloudfuji/event_observers/customer_observer.rb
133
115
  - lib/fat_free_crm/cloudfuji/event_observers/email_observer.rb
134
- - lib/fat_free_crm/cloudfuji/event_observers/lead_scoring_observer.rb
116
+ - lib/fat_free_crm/cloudfuji/event_observers/event_rules_observer.rb
135
117
  - lib/fat_free_crm/cloudfuji/event_observers/payment_observer.rb
136
118
  - lib/fat_free_crm/cloudfuji/event_observers/user_observer.rb
137
119
  - lib/fat_free_crm/cloudfuji/view_hooks.rb
@@ -140,40 +122,46 @@ files:
140
122
  - lib/ffcrm_cloudfuji/version.rb
141
123
  - spec/event_observers/app_observer_spec.rb
142
124
  - spec/event_observers/customer_observer_spec.rb
143
- - spec/event_observers/lead_scoring_observer_spec.rb
125
+ - spec/event_observers/event_rules_observer_spec.rb
144
126
  - spec/factories/lead_scoring_factories.rb
145
127
  - spec/internal/config/database.yml
146
128
  - spec/internal/db/schema.rb
129
+ - spec/models/event_rule_spec.rb
130
+ - spec/observers/cloudfuji_lead_observer_spec.rb
147
131
  - spec/spec_helper.rb
148
132
  - uninstall.rb
149
133
  homepage: http://cloudfuji.com
150
134
  licenses: []
135
+
151
136
  post_install_message:
152
137
  rdoc_options: []
153
- require_paths:
138
+
139
+ require_paths:
154
140
  - lib
155
- required_ruby_version: !ruby/object:Gem::Requirement
141
+ required_ruby_version: !ruby/object:Gem::Requirement
156
142
  none: false
157
- requirements:
158
- - - ! '>='
159
- - !ruby/object:Gem::Version
160
- version: '0'
161
- segments:
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ hash: -827916366021811991
147
+ segments:
162
148
  - 0
163
- hash: -3365246970251086224
164
- required_rubygems_version: !ruby/object:Gem::Requirement
149
+ version: "0"
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
151
  none: false
166
- requirements:
167
- - - ! '>='
168
- - !ruby/object:Gem::Version
169
- version: '0'
170
- segments:
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ hash: -827916366021811991
156
+ segments:
171
157
  - 0
172
- hash: -3365246970251086224
158
+ version: "0"
173
159
  requirements: []
160
+
174
161
  rubyforge_project:
175
- rubygems_version: 1.8.24
162
+ rubygems_version: 1.8.17
176
163
  signing_key:
177
164
  specification_version: 3
178
165
  summary: Fat Free CRM - Cloudfuji Integration
179
166
  test_files: []
167
+
@@ -1,42 +0,0 @@
1
- (($) ->
2
- class @LeadScoring
3
- constructor: (@templates = {}) ->
4
-
5
- add_fields: (button, content) ->
6
- new_id = new Date().getTime()
7
- regexp = new RegExp('new_lead_scoring_rule', 'g')
8
- $('ul#lead_scoring_rules').append(content.replace(regexp, new_id))
9
- # Setup event autocomplete for new field
10
- this.event_autocomplete('input#lead_scoring_rules_'+new_id+'_event')
11
-
12
- remove_fields: (button) ->
13
- container = $(button).closest('li.lead_scoring_rule')
14
- index = container.data('index')
15
- # If rule has no id, just remove
16
- if $("#lead_scoring_rules_"+index+"_id").length == 0
17
- container.remove()
18
- else
19
- # If rule has an id, mark container as hidden and add _destroy field
20
- container.hide()
21
- container.append($('<input type="text" name="lead_scoring_rules['+index+'][_destroy]" value="yes">'))
22
-
23
- event_autocomplete: (selector = 'input.lead_scoring_event') ->
24
- $(selector).autocomplete({source: observed_cloudfuji_events, minLength: 0})
25
- # Show all events on focus, if input is empty
26
- $(selector).focus ->
27
- $(this).autocomplete "search", "" if $(this).val() == ""
28
-
29
- $(document).ready ->
30
- lead_scoring = new LeadScoring()
31
- # Initialize autocomplete for events
32
- lead_scoring.event_autocomplete()
33
-
34
- $("button.add_lead_scoring_rule").live "click", ->
35
- lead_scoring.add_fields this, $(this).data("content")
36
- false
37
-
38
- $(".remove_lead_scoring_rule").live "click", ->
39
- lead_scoring.remove_fields this
40
- false
41
-
42
- ) jQuery
@@ -1,47 +0,0 @@
1
- li.lead_scoring_rule {
2
- font-size: 13px;
3
-
4
- &:last-child {
5
- border-bottom: none;
6
- }
7
-
8
- input {
9
- font-size: 13px;
10
- margin: 0 4px;
11
- vertical-align: middle;
12
- margin-bottom: 3px;
13
- }
14
- .lead_scoring_event { width: 160px; }
15
- .lead_scoring_once {
16
- width: 14px;
17
- margin-left: 2px;
18
- }
19
- .lead_scoring_match { width: 190px; }
20
- .lead_scoring_points { width: 35px; }
21
-
22
- .field_with_errors {
23
- display: inline;
24
- input {
25
- background-color: #ffdddd;
26
- }
27
- }
28
- }
29
-
30
- ul#lead_scoring_rules {
31
- a.remove_lead_scoring_rule {
32
- margin-right: 6px;
33
- img {
34
- vertical-align: middle;
35
- margin-bottom: 4px;
36
- }
37
- }
38
- }
39
-
40
- .buttonbar.lead_scoring_buttons {
41
- width: 845px;
42
- float: left;
43
- font-size: 13px;
44
- input[type='submit'], button { font-size: 14px; }
45
- .save_or_cancel { float: right; }
46
- button { float: left; }
47
- }
@@ -1,10 +0,0 @@
1
- module Admin::LeadScoringHelper
2
-
3
- def add_lead_scoring_rule_button(f)
4
- fields = f.fields_for "new_lead_scoring_rule", LeadScoringRule.new(:points => 0) do |builder|
5
- render("form", :r => builder, :index => "new_lead_scoring_rule")
6
- end
7
- button_tag 'Add New Rule', :class => "add_lead_scoring_rule", "data-content" => "#{fields}"
8
- end
9
-
10
- end
@@ -1,6 +0,0 @@
1
- class LeadScoringRule < ActiveRecord::Base
2
- validates_presence_of :event, :points
3
- validates_numericality_of :points, :only_integer => true
4
-
5
- has_many :lead_scoring_rule_counts
6
- end
@@ -1,4 +0,0 @@
1
- class LeadScoringRuleCount < ActiveRecord::Base
2
- belongs_to :lead
3
- belongs_to :lead_scoring_rule
4
- end
@@ -1,14 +0,0 @@
1
- %li.lead_scoring_rule{"data-index" => index}
2
- = link_to image_tag('delete.png', :size => '16x16', :alt => 'Remove Rule'), nil, :class => "remove_lead_scoring_rule"
3
-
4
- = r.hidden_field(:id) unless r.object.new_record?
5
-
6
- If event:
7
- = r.text_field :event, :class => "lead_scoring_event"
8
- matches:
9
- = r.text_field :match, :class => "lead_scoring_match"
10
- change score by
11
- = r.text_field :points, :class => "lead_scoring_points"
12
- points.
13
- Only once per lead:
14
- = r.check_box :once, :class => "lead_scoring_once"
@@ -1,3 +0,0 @@
1
- ActiveSupport::Inflector.inflections do |inflect|
2
- inflect.uncountable "lead_scoring"
3
- end