devise_mailjet 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 +4 -4
- data/README.rdoc +2 -3
- data/devise_mailjet.gemspec +4 -4
- data/lib/devise_mailjet.rb +4 -0
- data/lib/devise_mailjet/mailjet_list_api_mapper.rb +18 -61
- data/lib/devise_mailjet/mailjet_worker.rb +26 -0
- data/lib/devise_mailjet/model.rb +29 -7
- data/lib/devise_mailjet/version.rb +1 -1
- metadata +20 -19
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 492f65b3aeb563982e0e48a9cb77e57ecc0aaf4e
|
4
|
+
data.tar.gz: 1ba5a15c05396b6ce73247577c0137460ea26743
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a0ee5f2e82ad2b1d0af00eae4be25bfabc685e38ff5bfc6c6f9fa05c05549615142735d82715e2c7d5084026b2ecb2eb77bfe52f3c480de0d325706a2e95ece
|
7
|
+
data.tar.gz: e089c81e6f926f559475957326f7f3a100479d25da915de6d21f01f7dd52d58fafd0be60322c2f79494c8d08ef8df472dd9cfe964851935148d1c1d9b2766a61
|
data/README.rdoc
CHANGED
@@ -16,13 +16,12 @@ In your Gemfile, add devise_mailjet after devise:
|
|
16
16
|
In your User model, add :mailjet to the devise call and make :join_mailing_list accessible:
|
17
17
|
|
18
18
|
devise :database_authenticatable, ..., :mailjet
|
19
|
-
|
19
|
+
attr_accessor :join_mailing_list
|
20
20
|
|
21
21
|
In your devise initializer (config/initializers/devise.rb), set your API key and mailing list name:
|
22
22
|
|
23
23
|
Devise.mailjet_api_key = 'your_api_key'
|
24
24
|
Devise.mailing_list_name = 'List Name'
|
25
|
-
Devise.double_opt_in = false
|
26
25
|
Devise.send_welcome_email = false
|
27
26
|
|
28
27
|
If you are using the default Devise registration views, the Join Mailing List checkbox is added automatically, if not,
|
@@ -100,4 +99,4 @@ View our {contributors}[https://github.com/zedalaye/devise_mailjet/contributors]
|
|
100
99
|
|
101
100
|
== Copyright
|
102
101
|
|
103
|
-
Copyright (c) 2011 {Justin Cunningham}[http://littlebitofcode.com] and 2014 {Pierre Yager}[http://levosgien.net]. See MIT_LICENSE for details.
|
102
|
+
Copyright (c) 2011 {Justin Cunningham}[http://littlebitofcode.com] and 2014 {Pierre Yager}[http://levosgien.net]. See MIT_LICENSE for details.
|
data/devise_mailjet.gemspec
CHANGED
@@ -20,10 +20,10 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.require_paths = ["lib"]
|
21
21
|
|
22
22
|
{
|
23
|
-
'rails' => '
|
24
|
-
'devise' => '
|
25
|
-
'devise-bootstrap-views' => '
|
26
|
-
'mailjet' => '
|
23
|
+
'rails' => '< 5.2',
|
24
|
+
'devise' => '< 5.0',
|
25
|
+
'devise-bootstrap-views' => '< 1.0',
|
26
|
+
'mailjet' => '< 2.0'
|
27
27
|
}.each do |lib, version|
|
28
28
|
s.add_runtime_dependency(lib, *version)
|
29
29
|
end
|
data/lib/devise_mailjet.rb
CHANGED
@@ -4,28 +4,24 @@ module Devise
|
|
4
4
|
module Models
|
5
5
|
module Mailjet
|
6
6
|
class MailjetListApiMapper
|
7
|
-
|
8
|
-
CONTACTS_CACHE_KEY = "devise_mailjet/contacts"
|
9
|
-
|
10
|
-
# looks the name up in the cache. if it doesn't find it, looks it up using the api and saves it to the cache
|
7
|
+
# find the list using the mailjet API and save it to a memory cache
|
11
8
|
def list_name_to_id(list_name)
|
12
|
-
|
9
|
+
@lists ||= {}
|
13
10
|
unless @lists.has_key?(list_name)
|
14
|
-
|
15
|
-
|
16
|
-
@lists[list_name] =
|
17
|
-
save_cached_lists
|
11
|
+
l = ::Mailjet::Contactslist.all(name: list_name, limit: 1).first
|
12
|
+
l = ::Mailjet::Contactslist.create(name: list_name) unless l && l.name == list_name
|
13
|
+
@lists[list_name] = l.id
|
18
14
|
end
|
19
15
|
@lists[list_name]
|
20
16
|
end
|
21
17
|
|
18
|
+
# find the contact using the mailjet API and save it to a memory cache
|
22
19
|
def contact_email_to_id(email)
|
23
|
-
|
20
|
+
@contacts ||= {}
|
24
21
|
unless @contacts.has_key?(email)
|
25
|
-
|
26
|
-
|
27
|
-
@contacts[email] =
|
28
|
-
save_cached_contacts
|
22
|
+
c = ::Mailjet::Contact.find(email) # email is a valid key for finding contact resources
|
23
|
+
c = ::Mailjet::Contact.create(email: email) unless c && c.email == email
|
24
|
+
@contacts[email] = c.id
|
29
25
|
end
|
30
26
|
@contacts[email]
|
31
27
|
end
|
@@ -37,25 +33,23 @@ module Devise
|
|
37
33
|
def subscribe_to_lists(list_names, email)
|
38
34
|
walk_recipients(list_names, email) do |lr, list_id, contact_id|
|
39
35
|
if lr.nil?
|
40
|
-
|
36
|
+
::Mailjet::Listrecipient.create('ListID' => list_id, 'ContactID' => contact_id, is_active: true)
|
41
37
|
elsif lr.is_unsubscribed
|
42
|
-
lr.is_unsubscribed
|
43
|
-
lr.is_active = true
|
44
|
-
lr.save
|
38
|
+
lr.update_attributes(is_unsubscribed: false, is_active: true)
|
45
39
|
end
|
46
40
|
end
|
41
|
+
rescue ::Mailjet::ApiError
|
42
|
+
# ignore
|
47
43
|
end
|
48
44
|
|
49
45
|
# unsubscribe the user from the named mailing list(s). list_names can be the name of one list, or an array of
|
50
46
|
# several.
|
51
47
|
def unsubscribe_from_lists(list_names, email)
|
52
48
|
walk_recipients(list_names, email) do |lr, _, _|
|
53
|
-
if lr && !lr.is_unsubscribed
|
54
|
-
lr.is_unsubscribed = true
|
55
|
-
lr.is_active = false
|
56
|
-
lr.save
|
57
|
-
end
|
49
|
+
lr.update_attributes(is_unsubscribed: true, is_active: false) if lr && !lr.is_unsubscribed
|
58
50
|
end
|
51
|
+
rescue ::Mailjet::ApiError
|
52
|
+
# ignore
|
59
53
|
end
|
60
54
|
|
61
55
|
class ListLookupError < RuntimeError; end
|
@@ -67,47 +61,10 @@ module Devise
|
|
67
61
|
list_names = [list_names] unless list_names.is_a?(Array)
|
68
62
|
list_names.each do |list_name|
|
69
63
|
list_id = list_name_to_id(list_name)
|
70
|
-
lr =
|
64
|
+
lr = ::Mailjet::Listrecipient.all('ContactsList' => list_id, 'Contact' => contact_id, limit: 1).first
|
71
65
|
yield lr, list_id, contact_id if block_given?
|
72
66
|
end
|
73
67
|
end
|
74
|
-
|
75
|
-
# load the list from the cache
|
76
|
-
def load_cached_lists
|
77
|
-
@lists ||= Rails.cache.fetch(LISTS_CACHE_KEY) do
|
78
|
-
{}
|
79
|
-
end.dup
|
80
|
-
end
|
81
|
-
|
82
|
-
# save the modified list back to the cache
|
83
|
-
def save_cached_lists
|
84
|
-
Rails.cache.write(LISTS_CACHE_KEY, @lists)
|
85
|
-
end
|
86
|
-
|
87
|
-
# load contacts from the cache
|
88
|
-
def load_cached_contacts
|
89
|
-
@contacts ||= Rails.cache.fetch(CONTACTS_CACHE_KEY) do
|
90
|
-
{}
|
91
|
-
end.dup
|
92
|
-
end
|
93
|
-
|
94
|
-
# save the modified contacts back to the cache
|
95
|
-
def save_cached_contacts
|
96
|
-
Rails.cache.write(CONTACTS_CACHE_KEY, @contacts)
|
97
|
-
end
|
98
|
-
|
99
|
-
# the mailjet api helpers
|
100
|
-
def mailjet_contact
|
101
|
-
::Mailjet::Contact
|
102
|
-
end
|
103
|
-
|
104
|
-
def mailjet_list
|
105
|
-
::Mailjet::Contactslist
|
106
|
-
end
|
107
|
-
|
108
|
-
def mailjet_rcpt
|
109
|
-
::Mailjet::Listrecipient
|
110
|
-
end
|
111
68
|
end
|
112
69
|
end
|
113
70
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Devise
|
2
|
+
module Models
|
3
|
+
module Mailjet
|
4
|
+
class MailjetWorker
|
5
|
+
include Sidekiq::Worker
|
6
|
+
|
7
|
+
def perform(action, list_names, email, config)
|
8
|
+
if config.is_a?(Hash)
|
9
|
+
::Mailjet.configure do |c|
|
10
|
+
c.api_key = config['api_key']
|
11
|
+
c.secret_key = config['secret_key']
|
12
|
+
c.default_from = config['default_from']
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
mapper = MailjetListApiMapper.new
|
17
|
+
if action == 'subscribe'
|
18
|
+
mapper.subscribe_to_lists(list_names, email)
|
19
|
+
elsif action == 'unsubscribe'
|
20
|
+
mapper.unsubscribe_from_lists(list_names, email)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/devise_mailjet/model.rb
CHANGED
@@ -54,31 +54,53 @@ module Devise
|
|
54
54
|
|
55
55
|
# Add the user to the mailjet list with the specified name
|
56
56
|
def add_to_mailjet_list(list_name)
|
57
|
-
|
58
|
-
|
59
|
-
|
57
|
+
if defined?(Sidekiq::Worker)
|
58
|
+
MailjetWorker.perform_async(:subscribe, list_name, self.email, mailjet_config)
|
59
|
+
else
|
60
|
+
mapper = mailjet_list_mapper.respond_to?(:delay) ? mailjet_list_mapper.delay : mailjet_list_mapper
|
61
|
+
# options = self.respond_to?(:mailjet_list_subscribe_options) ? mailjet_list_subscribe_options : {}
|
62
|
+
mapper.subscribe_to_lists(list_name, self.email)
|
63
|
+
end
|
60
64
|
end
|
61
65
|
|
62
66
|
# remove the user from the mailjet list with the specified name
|
63
67
|
def remove_from_mailjet_list(list_name)
|
64
|
-
|
65
|
-
|
68
|
+
if defined?(Sidekiq::Worker)
|
69
|
+
MailjetWorker.perform_async(:unsubscribe, list_name, self.email, mailjet_config)
|
70
|
+
else
|
71
|
+
mapper = mailjet_list_mapper.respond_to?(:delay) ? mailjet_list_mapper.delay : mailjet_list_mapper
|
72
|
+
mapper.unsubscribe_from_lists(list_name, self.email)
|
73
|
+
end
|
66
74
|
end
|
67
75
|
|
68
76
|
# Commit the user to the mailing list if they have selected to join
|
69
77
|
def commit_mailing_list_join
|
70
|
-
|
78
|
+
if self.join_mailing_list
|
79
|
+
add_to_mailjet_list(mailjet_lists_to_join)
|
80
|
+
else
|
81
|
+
remove_from_mailjet_list(mailjet_lists_to_join)
|
82
|
+
end
|
71
83
|
end
|
72
84
|
|
73
85
|
# mapper that helps convert list names to mailjet ids
|
74
86
|
def mailjet_list_mapper
|
75
|
-
@@
|
87
|
+
@@mailjet_list_api_mapper ||= MailjetListApiMapper.new
|
76
88
|
end
|
77
89
|
|
78
90
|
module ClassMethods
|
79
91
|
Devise::Models.config(self, :mailing_list_name)
|
80
92
|
Devise::Models.config(self, :mailing_list_opt_in_by_default)
|
81
93
|
end
|
94
|
+
|
95
|
+
private
|
96
|
+
|
97
|
+
def mailjet_config
|
98
|
+
{
|
99
|
+
'api_key' => ::Mailjet.config.api_key,
|
100
|
+
'secret_key' => ::Mailjet.config.secret_key,
|
101
|
+
'default_from' => ::Mailjet.config.default_from
|
102
|
+
}
|
103
|
+
end
|
82
104
|
end
|
83
105
|
end
|
84
106
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_mailjet
|
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
|
- Justin Cunningham
|
@@ -9,64 +9,64 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2018-01-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - "
|
18
|
+
- - "<"
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
20
|
+
version: '5.2'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - "
|
25
|
+
- - "<"
|
26
26
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
27
|
+
version: '5.2'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: devise
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- - "
|
32
|
+
- - "<"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
34
|
+
version: '5.0'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - "<"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '5.0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: devise-bootstrap-views
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - "<"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: '
|
48
|
+
version: '1.0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - "<"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version: '
|
55
|
+
version: '1.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: mailjet
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - "
|
60
|
+
- - "<"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: '
|
62
|
+
version: '2.0'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - "
|
67
|
+
- - "<"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: '
|
69
|
+
version: '2.0'
|
70
70
|
description: Devise MailJet adds a MailJet option to devise that easily enables users
|
71
71
|
to join your mailing list when they create an account.
|
72
72
|
email:
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- devise_mailjet.gemspec
|
87
87
|
- lib/devise_mailjet.rb
|
88
88
|
- lib/devise_mailjet/mailjet_list_api_mapper.rb
|
89
|
+
- lib/devise_mailjet/mailjet_worker.rb
|
89
90
|
- lib/devise_mailjet/model.rb
|
90
91
|
- lib/devise_mailjet/version.rb
|
91
92
|
homepage: http://zedalaye.github.com/devise_mailjet/
|
@@ -108,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
109
|
version: '0'
|
109
110
|
requirements: []
|
110
111
|
rubyforge_project: devise_mailjet
|
111
|
-
rubygems_version: 2.
|
112
|
+
rubygems_version: 2.6.14
|
112
113
|
signing_key:
|
113
114
|
specification_version: 4
|
114
115
|
summary: Easy MailJet integration for Devise
|