ffcrm_cloudfuji 0.2.11 → 0.3.0

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/README CHANGED
@@ -2,5 +2,5 @@ Fat Free CRM - Cloudfuji Integration
2
2
  ====================================
3
3
 
4
4
  Integrates Fat Free CRM with the Cloudfuji hosting platform.
5
-
5
+
6
6
  Copyright (c) 2012 Cloudfuji
@@ -48,6 +48,11 @@
48
48
  $('.event_category_select').live "change", ->
49
49
  event_rules.show_field_group this, 'event_category', $(this).val()
50
50
 
51
+ # Set 'cloudfuji_event' to 'page_loaded' if event category is page_loaded.
52
+ if $(this).val() == "page_loaded"
53
+ index = $(this).closest('li.event_rule').data('index')
54
+ $("#event_rules_#{index}_cloudfuji_event").val('page_loaded')
55
+
51
56
  $('.action_select').live "change", ->
52
57
  event_rules.show_field_group this, 'action', $(this).val()
53
58
 
@@ -14,10 +14,15 @@ ul#event_rules {
14
14
  vertical-align: middle;
15
15
  margin-bottom: 3px;
16
16
  }
17
- .cloudfuji_event { width: 120px; }
17
+ .cloudfuji_event_input { width: 120px; }
18
+ .page_name_input { width: 120px; }
19
+ .app_id_input { width: 110px; }
18
20
  .match_input { width: 140px; }
19
21
  .numeric_input { width: 35px; }
20
22
  .tag_input { width: 100px; }
23
+ .mailing_list_input { width: 100px; }
24
+ .mailing_list_group_input { width: 100px; }
25
+ .mailing_list_grouping_input { width: 120px; }
21
26
  input[type='checkbox'] {
22
27
  width: 14px;
23
28
  margin-left: 2px;
@@ -10,16 +10,18 @@ module Admin::EventRulesHelper
10
10
  def event_category_select(form)
11
11
  form.select :event_category, [
12
12
  ["Cloudfuji event", :cloudfuji_event_received],
13
- ["Lead attribute", :lead_attribute_changed]
13
+ ["Page loaded", :page_loaded],
14
+ ["Lead attribute", :lead_attribute_changed]
14
15
  ], {}, :class => "event_category_select"
15
16
  end
16
17
 
17
18
  def action_select(form)
18
19
  form.select :action, [
19
- ["change Lead score", :change_lead_score],
20
- ["send notification", :send_notification],
21
- ["add tag", :add_tag],
22
- ["remove tag", :remove_tag]
20
+ ["change Lead score", :change_lead_score],
21
+ ["send notification", :send_notification],
22
+ ["add tag", :add_tag],
23
+ ["remove tag", :remove_tag],
24
+ ["add to mailing group", :add_to_mailing_list_group]
23
25
  ], {}, :class => "action_select"
24
26
  end
25
27
 
@@ -2,34 +2,39 @@ class EventRule < ActiveRecord::Base
2
2
 
3
3
  # event category validations
4
4
  validates_presence_of :event_category
5
- validates_presence_of :cloudfuji_event, :if => lambda { self.event_category == 'cloudfuji_event_received' }
6
- validates_presence_of :lead_attribute, :if => lambda { self.event_category == 'lead_attribute_changed' }
5
+ validates_presence_of :lead_attribute, :if => lambda { self.event_category == 'lead_attribute_changed' }
6
+ validates_presence_of :cloudfuji_event, :if => lambda { self.event_category == 'cloudfuji_event_received' }
7
+ validates_presence_of :page_name, :app_id, :if => lambda { self.cloudfuji_event == 'page_loaded' }
7
8
 
8
9
  # action validations
9
10
  validates_presence_of :action
10
11
  validates_presence_of :tag, :if => lambda { %w(add_tag remove_tag).include?(self.action) }
12
+ validates_presence_of :mailing_list, :mailing_list_group, :mailing_list_grouping, :if => lambda { self.action == "add_to_mailing_list_group" }
13
+
11
14
  validates_numericality_of :change_score_by, :only_integer => true, :if => lambda { self.action == 'change_lead_score' }
12
15
 
13
16
  validates_numericality_of :limit_per_lead, :only_integer => true, :allow_blank => true
14
17
 
15
18
  has_many :lead_event_rule_counts
16
19
 
17
- def process(lead, match_data)
20
+ def process(lead, params = {})
18
21
  # How many times this rule has been applied to a given Lead
19
22
  count = LeadEventRuleCount.find_by_lead_id_and_event_rule_id(lead, self) ||
20
23
  LeadEventRuleCount.new(:lead => lead, :event_rule => self)
21
24
  # Don't apply this rule more than limit_per_lead, if set
22
25
  unless limit_per_lead.present? && count.count > limit_per_lead
23
26
  # If :match is present, only apply the rule if data matches string
24
- if match.blank? || event_matches?(match_data)
25
- # Run the action method if defined
26
- if respond_to?(action)
27
- send(action, lead, match_data)
28
- # Increment and save count of rule/lead applications
29
- count.count += 1
30
- count.save
31
- else
32
- raise "Do not know how to process '#{action}' action."
27
+ if match.blank? || (params['data'] && event_matches?(params))
28
+ if (app_id.blank? && page.blank?) || page_and_app_matches?(params)
29
+ # Run the action method if defined
30
+ if respond_to?(action)
31
+ send(action, lead, params)
32
+ # Increment and save count of rule/lead applications
33
+ count.count += 1
34
+ count.save
35
+ else
36
+ raise "Do not know how to process '#{action}' action."
37
+ end
33
38
  end
34
39
  end
35
40
  end
@@ -74,23 +79,47 @@ class EventRule < ActiveRecord::Base
74
79
  lead.versions.create! :event => "Rule for #{human_event_label}: Removed tag '#{tag}'"
75
80
  end
76
81
 
82
+ def add_to_mailing_list_group(lead, match_data)
83
+ # Send a Cloudfuji event which results in a call to the Mailchimp API,
84
+ # and adds InterestGroup to lead.
85
+ event = {
86
+ :category => :mailing_list_group,
87
+ :name => :added,
88
+ :data => {
89
+ :email => lead.email,
90
+ :customer_ido_id => lead.ido_id,
91
+ :user_ido_id => user_ido_id,
92
+ :mailing_list => mailing_list,
93
+ :mailing_list_grouping => mailing_list_grouping,
94
+ :mailing_list_group => mailing_list_group
95
+ }
96
+ }
97
+
98
+ puts "Publishing Cloudfuji Event: #{event.inspect}"
99
+ ::Cloudfuji::Event.publish(event)
100
+ end
77
101
 
78
102
  private
79
103
 
80
- def event_matches?(match_data)
104
+ def event_matches?(match)
81
105
  test_string = case_insensitive_matching ? match.downcase : match
82
106
  case event_category
83
107
  when 'cloudfuji_event_received'
84
- match_string = match_data.inspect
108
+ match_string = match['data'].inspect
85
109
  match_string.downcase! if case_insensitive_matching
86
110
  match_string.include?(test_string)
87
111
  when 'lead_attribute_changed'
88
- match_string = match_data[1].to_s.dup
112
+ match_string = match[1].to_s.dup
89
113
  match_string.downcase! if case_insensitive_matching
90
114
  match_string == test_string.to_s
91
115
  end
92
116
  end
93
117
 
118
+ def page_and_app_matches?(params)
119
+ (page_name.blank? || page_name == params["data"]["page"]) &&
120
+ (app_id.blank? || app_id == params["app_id"])
121
+ end
122
+
94
123
  def human_event_label
95
124
  case event_category
96
125
  when 'cloudfuji_event_received'; "Cloudfuji event - '#{cloudfuji_event}'"
@@ -7,19 +7,24 @@
7
7
  = event_category_select(r)
8
8
 
9
9
  = event_fields_for(r.object, 'cloudfuji_event_received') do
10
- = r.text_field :cloudfuji_event, :class => "cloudfuji_event"
10
+ = r.text_field :cloudfuji_event, :class => "cloudfuji_event_input"
11
11
  is received, and contains
12
12
 
13
+ = event_fields_for(r.object, 'page_loaded') do
14
+ = r.text_field :page_name, :class => "page_name_input"
15
+ on app ID
16
+ = r.text_field :app_id, :class => "app_id_input"
17
+
13
18
  = event_fields_for(r.object, 'lead_attribute_changed') do
14
19
  = r.select :lead_attribute, lead_attributes, :class => "lead_attribute", :include_blank => true
15
20
  changes, and equals
16
21
 
17
- = content_tag(:small, "(optional)") << ":".html_safe
18
- = r.text_field :match, :class => "match_input"
19
-
20
- %small
21
- (Case insensitive?
22
- = r.check_box(:case_insensitive_matching) << h(")")
22
+ = event_fields_for(r.object, %w(cloudfuji_event_received lead_attribute_changed)) do
23
+ = content_tag(:small, "(optional)") << ":".html_safe
24
+ = r.text_field :match, :class => "match_input"
25
+ %small
26
+ (Case insensitive?
27
+ = r.check_box(:case_insensitive_matching) << h(")")
23
28
 
24
29
  then
25
30
  = action_select(r)
@@ -33,6 +38,17 @@
33
38
  = action_fields_for(r.object, %w(add_tag remove_tag)) do
34
39
  = r.text_field :tag, :class => "tag_input"
35
40
 
41
+ = action_fields_for(r.object, %w(add_to_mailing_list_group)) do
42
+ = r.text_field :mailing_list_group, :class => "mailing_list_group_input"
43
+ in grouping
44
+ = r.text_field :mailing_list_grouping, :class => "mailing_list_grouping_input"
45
+ on list
46
+ = r.text_field :mailing_list, :class => "mailing_list_input"
47
+ %br
48
+ -# TEMPORARY WORKAROUND
49
+ %small{:style => "margin-left:26px;display:inline-block;padding-top:14px;"} Umi user Ido ID:
50
+ = r.text_field :user_ido_id
51
+
36
52
  = action_fields_for(r.object, %w(change_lead_score send_notification)) do
37
53
  %small
38
54
  (Limit per lead:
@@ -0,0 +1,14 @@
1
+ class AddMailingListAndPageFieldsToEventRules < ActiveRecord::Migration
2
+ def change
3
+ add_column :event_rules, :mailing_list, :string
4
+ add_column :event_rules, :mailing_list_group, :string
5
+ add_column :event_rules, :mailing_list_grouping, :string
6
+
7
+ add_column :event_rules, :page_name, :string
8
+ add_column :event_rules, :app_id, :string
9
+
10
+ # TODO - There's no way to figure out which user to use based on a received event... ??
11
+ # Just making the Umi user's ido_id field temporarily part of the event rule form, for now.
12
+ add_column :event_rules, :user_ido_id, :string
13
+ end
14
+ end
@@ -8,8 +8,8 @@ module FatFreeCRM
8
8
  def catch_all
9
9
  if lead = find_lead_by_data
10
10
  event_name = "#{params['category']}_#{params['event']}"
11
- EventRule.find_all_by_event_category_and_cloudfuji_event('cloudfuji_event_received', event_name).each do |rule|
12
- rule.process(lead, params['data'])
11
+ EventRule.find(:all, :conditions => ["event_category IN ('cloudfuji_event_received', 'page_loaded') AND cloudfuji_event = ?", event_name]).each do |rule|
12
+ rule.process(lead, params)
13
13
  end
14
14
  end
15
15
  end
@@ -1,5 +1,5 @@
1
1
  module FatFreeCRM
2
2
  module Cloudfuji
3
- VERSION = '0.2.11'
3
+ VERSION = '0.3.0'
4
4
  end
5
5
  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.11
4
+ version: 0.3.0
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-06-04 00:00:00.000000000 Z
13
+ date: 2012-06-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec-rails
@@ -129,6 +129,7 @@ files:
129
129
  - db/migrate/20120515194445_add_lead_scoring_rules.rb
130
130
  - db/migrate/20120524031157_extend_lead_scoring_as_event_rules.rb
131
131
  - db/migrate/20120525151511_add_ido_id_to_lead.rb
132
+ - db/migrate/20120607115701_add_mailing_list_and_page_fields_to_event_rules.rb
132
133
  - ffcrm_cloudfuji.gemspec
133
134
  - install.rb
134
135
  - lib/fat_free_crm/cloudfuji.rb
@@ -168,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
168
169
  version: '0'
169
170
  segments:
170
171
  - 0
171
- hash: 4051267979847360433
172
+ hash: -1045058604205238337
172
173
  required_rubygems_version: !ruby/object:Gem::Requirement
173
174
  none: false
174
175
  requirements:
@@ -177,7 +178,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
178
  version: '0'
178
179
  segments:
179
180
  - 0
180
- hash: 4051267979847360433
181
+ hash: -1045058604205238337
181
182
  requirements: []
182
183
  rubyforge_project:
183
184
  rubygems_version: 1.8.24