devise_campaignable 0.0.5 → 0.1.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d49a6804ef7659a0234f0ae7b2c9eaa1f5411cb9
|
4
|
+
data.tar.gz: 71eba1a480d64f4cce9ee93ca3ddbce609c3e696
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d1aa9bed23eba753db194a591a908e3c9a38aec87e85cf202b5b1a047ab038e92ad8f8aa8e3b9eee8b911dbda5992ba64106afb01a8a08f63ffbc590825771f
|
7
|
+
data.tar.gz: 5556fbae3e90a96cf9ee57e190f3294d7aecc9f5925936010810f9ef086df5574bc615338d46eeedc7bc86bde04ed575d3c3df278d01a8433b4c5909c6793228
|
data/README.md
CHANGED
@@ -14,7 +14,6 @@ Simply add DeviseCampaignable and Gibbon to your application's Gemfile:
|
|
14
14
|
|
15
15
|
gem 'devise'
|
16
16
|
gem 'devise_campaignable'
|
17
|
-
gem 'gibbon'
|
18
17
|
|
19
18
|
## Devise Configuration
|
20
19
|
|
@@ -26,6 +25,7 @@ Devise.setup do |config|
|
|
26
25
|
config.campaignable_vendor = :vendor_name
|
27
26
|
config.campaignable_api_key = 'your_service_api_key'
|
28
27
|
config.campaignable_list_id = 'the_id_of_the_list_to_which_we_subscribe'
|
28
|
+
config.campaignable_additional_fields = [:array, :of, :additional, :fields]
|
29
29
|
end
|
30
30
|
```
|
31
31
|
|
@@ -41,6 +41,10 @@ A API key for your chosen vendor. How you aqcuire this will depend from vendor t
|
|
41
41
|
|
42
42
|
The unique ID of the list to which you want your users to be subscribed. Again, how you get this will vary from vendor to vendor.
|
43
43
|
|
44
|
+
#### config.campaignable_additional_fields (optional)
|
45
|
+
|
46
|
+
An array of symbols which denote attributes on the model you want sent to the campaign vendor. Can be things like Name, Age, Address. Defaults to no additional fields.
|
47
|
+
|
44
48
|
## Model Configuration
|
45
49
|
|
46
50
|
Add :campaignable to the **devise** call in your model (we’re assuming here you already have a User model with some Devise modules):
|
data/lib/devise_campaignable.rb
CHANGED
@@ -34,11 +34,20 @@ module Devise
|
|
34
34
|
# account tab in your MailChimp account and select API Keys & Authorized Apps, then add
|
35
35
|
# a key. This defaults to 'your_api_key'
|
36
36
|
#
|
37
|
-
# Set
|
37
|
+
# Set campaignable_api_key in the Devise configuration file (config/initializers/devise.rb)
|
38
38
|
#
|
39
|
-
# Devise.
|
39
|
+
# Devise.campaignable_api_key = "your_api_key"
|
40
40
|
mattr_accessor :campaignable_api_key
|
41
41
|
@@campaignable_api_key = 'your_api_key'
|
42
|
+
|
43
|
+
# Public: The names of additional columns on your user model you want passed along to
|
44
|
+
# the campaign service provider, this may be things like names, address, plan etc.
|
45
|
+
#
|
46
|
+
# Set campaignable_additional_fields in the Devise configuration file (config/initializers/devise.rb)
|
47
|
+
#
|
48
|
+
# Devise.campaignable_additional_fields = [:first_name, :last_name, :favourite_colour]
|
49
|
+
mattr_accessor :campaignable_additional_fields
|
50
|
+
@@campaignable_additional_fields = []
|
42
51
|
end
|
43
52
|
|
44
53
|
Devise.add_module :campaignable, :model => 'devise_campaignable/model'
|
@@ -15,7 +15,7 @@ module Devise
|
|
15
15
|
# in the parent class but not on the base adapter.
|
16
16
|
#
|
17
17
|
# Accepts single email address to subscribe.
|
18
|
-
def subscribe(email)
|
18
|
+
def subscribe(email, merge_vars={})
|
19
19
|
# Raise an error to warn it isn't implemented.
|
20
20
|
raise NotImplementedError.new
|
21
21
|
end
|
@@ -24,7 +24,7 @@ module Devise
|
|
24
24
|
# in the parent class but not on the base adapter.
|
25
25
|
#
|
26
26
|
# Update an existing subscription.
|
27
|
-
def update_subscription(old_email, new_email)
|
27
|
+
def update_subscription(old_email, new_email, merge_vars={})
|
28
28
|
# Raise an error to warn it isn't implemented.
|
29
29
|
raise NotImplementedError.new
|
30
30
|
end
|
@@ -5,7 +5,7 @@ module Devise
|
|
5
5
|
class Mailchimp < Adapter
|
6
6
|
|
7
7
|
# Subscribe an email to the instantiated list.
|
8
|
-
def subscribe(email)
|
8
|
+
def subscribe(email, merge_vars={})
|
9
9
|
# Logic for mailchimp subcription.
|
10
10
|
api.subscribe({
|
11
11
|
:id => @campaignable_list_id,
|
@@ -14,21 +14,23 @@ module Devise
|
|
14
14
|
},
|
15
15
|
:double_optin => false, # Don't require email authorization.
|
16
16
|
:update_existing => true, # Don't error if adding existing subscriber.
|
17
|
-
:send_welcome => false # Don't send a welcome email when they're added to the list.
|
17
|
+
:send_welcome => false, # Don't send a welcome email when they're added to the list.
|
18
|
+
:merge_vars => merge_vars # Include additional variables to be stored.
|
18
19
|
})
|
19
20
|
end
|
20
21
|
|
21
22
|
# Update an existing subscription.
|
22
|
-
def update_subscription(old_email, new_email)
|
23
|
+
def update_subscription(old_email, new_email, merge_vars={})
|
24
|
+
# Append the new email address into the merge vars.
|
25
|
+
merge_vars[:new_email] = new_email
|
26
|
+
|
23
27
|
# Mailchimp have a handy helper for updating an existing subscription.
|
24
28
|
api.update_member({
|
25
29
|
:id => @campaignable_list_id,
|
26
30
|
:email => {
|
27
31
|
:email => old_email
|
28
32
|
},
|
29
|
-
:merge_vars =>
|
30
|
-
:'new-email' => new_email
|
31
|
-
}
|
33
|
+
:merge_vars => merge_vars # Include additional variables to be stored, including new email
|
32
34
|
})
|
33
35
|
end
|
34
36
|
|
@@ -30,14 +30,14 @@ module Devise
|
|
30
30
|
# Method to subscibe the user to the configrued mailing list.
|
31
31
|
def subscribe
|
32
32
|
# Ask the list manager to subscribe this devise models email.
|
33
|
-
self.class.list_manager.subscribe(self.email)
|
33
|
+
self.class.list_manager.subscribe(self.email, campaignable_additional_fields)
|
34
34
|
end
|
35
35
|
|
36
36
|
# Method to update the subscription
|
37
37
|
def update_subscription
|
38
38
|
# Only change the subscription if the models email
|
39
39
|
# address has been changed.
|
40
|
-
self.class.list_manager.update_subscription(self.email_was, self.email) if self.email_changed?
|
40
|
+
self.class.list_manager.update_subscription(self.email_was, self.email, campaignable_additional_fields) if self.email_changed?
|
41
41
|
end
|
42
42
|
|
43
43
|
# Method to unsubscribe the user from the configured mailing list.
|
@@ -46,6 +46,23 @@ module Devise
|
|
46
46
|
self.class.list_manager.unsubscribe(self.email)
|
47
47
|
end
|
48
48
|
|
49
|
+
private
|
50
|
+
|
51
|
+
# Get a hash of the additional fields.
|
52
|
+
def campaignable_additional_fields
|
53
|
+
# Create an empty hash to store the fields.
|
54
|
+
additional_fields = {}
|
55
|
+
|
56
|
+
# Loop over the additional fields configured.
|
57
|
+
self.class.campaignable_additional_fields.each do |field_name|
|
58
|
+
# Create a new additional field using the key/value.
|
59
|
+
additional_fields[field_name] = self.send(field_name)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Compact to the hash to remove any empty data.
|
63
|
+
additional_fields.compact
|
64
|
+
end
|
65
|
+
|
49
66
|
module ClassMethods
|
50
67
|
|
51
68
|
# Get the list subscriber library.
|
@@ -82,7 +99,7 @@ module Devise
|
|
82
99
|
end
|
83
100
|
|
84
101
|
# Set the configuration variables for the modeule.
|
85
|
-
Devise::Models.config(self, :campaignable_api_key, :campaignable_list_id, :campaignable_vendor)
|
102
|
+
Devise::Models.config(self, :campaignable_api_key, :campaignable_list_id, :campaignable_vendor, :campaignable_additional_fields)
|
86
103
|
end
|
87
104
|
end
|
88
105
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_campaignable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Rawlins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-07-
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|