maxemail_api 1.0.4 → 1.0.5
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/lib/maxemail_api/response.rb +23 -0
- data/lib/maxemail_api/shared.rb +15 -0
- data/lib/maxemail_api/subscriptions.rb +54 -0
- data/lib/maxemail_api/triggered.rb +77 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 532d04e35daedfca7a6598f8b668548e792f7ade
|
4
|
+
data.tar.gz: dc0228aa78feb5ede97bd14a5e104909446d03f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b425180553db383a4a1168e900de729ba1f3001c4c1504e0c898fcf9e5447d0e6a3d5fbe71a62b7ea656db4d2b09fb61d7cf1b69e80b95a4b627a17e5e09d74f
|
7
|
+
data.tar.gz: d81f90b604b2516f2cda763adb7aaae9f287795269da23029d7b9920a218d004c010a514d9c71f556e78537fafb9228819f7be95ef4ae49afd97f6a7b212ec12
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class MaxemailApiResponse
|
2
|
+
attr_accessor :data
|
3
|
+
|
4
|
+
def initialize(data:, success:, message:)
|
5
|
+
@data = data
|
6
|
+
@data[:success] = success
|
7
|
+
@data[:message] = message
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_json
|
11
|
+
{
|
12
|
+
data: @data
|
13
|
+
}.to_json
|
14
|
+
end
|
15
|
+
|
16
|
+
def successful?
|
17
|
+
@data[:success]
|
18
|
+
end
|
19
|
+
|
20
|
+
def message
|
21
|
+
@data[:message]
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module MaxemailApiShared
|
2
|
+
class << self
|
3
|
+
def send_request(params:, method:)
|
4
|
+
HTTP.headers(authentication_header)
|
5
|
+
.get("#{ENV['MAXEMAIL_API_URL']}#{method}",
|
6
|
+
params: params)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def authentication_header
|
12
|
+
{ Authorization: 'Basic ' + Base64.encode64(ENV['MAXEMAIL_USERNAME'] + ':' + ENV['MAXEMAIL_PASSWORD']).chomp("\n") }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module MaxemailApiSubscriptions
|
2
|
+
extend self
|
3
|
+
include MaxemailApiShared
|
4
|
+
|
5
|
+
def subscribe(email_address:, list_id:)
|
6
|
+
return MaxemailApiShared.send_request(params: { method: 'insertRecipient', data: { email_address: email_address, subscribed: 1 }.to_json, listID: list_id }, method: 'list') unless inserted?(email_address: email_address, list_id: list_id)
|
7
|
+
MaxemailApiShared.send_request(params: { method: 'updateRecipient', data: { email_address: email_address, subscribed: 1 }.to_json, listID: list_id, recipientId: find_recipient_id(email_address: email_address) }, method: 'list')
|
8
|
+
end
|
9
|
+
|
10
|
+
def subscribed?(email_address:, list_id:)
|
11
|
+
response = MaxemailApiShared.send_request(params: { method: 'fetchRecipient', listID: list_id, recipientId: find_recipient_id(email_address: email_address) }, method: 'list')
|
12
|
+
return false if response.body.to_s == 'false'
|
13
|
+
response = JSON.parse(response.body)
|
14
|
+
return false if response['success'].to_s == 'false'
|
15
|
+
return false if response['subscribed'].to_s == '0'
|
16
|
+
return true if response['subscribed'].to_s == '1'
|
17
|
+
rescue StandardError
|
18
|
+
false
|
19
|
+
end
|
20
|
+
|
21
|
+
def inserted?(email_address:, list_id:)
|
22
|
+
response = MaxemailApiShared.send_request(params: { method: 'fetchRecipient', listID: list_id, recipientId: find_recipient_id(email_address: email_address) }, method: 'list')
|
23
|
+
return false if response.body.to_s == 'false'
|
24
|
+
response = JSON.parse(response.body)
|
25
|
+
return false if response['success'].to_s == 'false'
|
26
|
+
return true if response['subscribed'].to_s == '0'
|
27
|
+
return true if response['subscribed'].to_s == '1'
|
28
|
+
rescue StandardError
|
29
|
+
false
|
30
|
+
end
|
31
|
+
|
32
|
+
def unsubscribe(email_address: nil, recipient_id: nil, list_id:)
|
33
|
+
recipient_id = find_recipient_id(email_address: email_address) if recipient_id.nil?
|
34
|
+
MaxemailApiShared.send_request(params: { method: 'updateRecipient', data: { email_address: email_address, subscribed: 0 }.to_json, listID: list_id, recipientId: recipient_id }, method: 'list')
|
35
|
+
end
|
36
|
+
|
37
|
+
def subscriptions(email_address: nil, recipient_id: nil, list_id:)
|
38
|
+
recipient_id = find_recipient_id(email_address: email_address) if recipient_id.nil?
|
39
|
+
MaxemailApiShared.send_request(params: { method: 'fetchLists', listID: list_id, recipientId: recipient_id }, method: 'recipient')
|
40
|
+
end
|
41
|
+
|
42
|
+
def find_recipient_id(email_address: nil)
|
43
|
+
MaxemailApiShared.send_request(params: { method: 'findByEmailAddress', emailAddress: email_address }, method: 'recipient')
|
44
|
+
end
|
45
|
+
|
46
|
+
def available_subscriptions
|
47
|
+
lists = JSON.parse(fetch_list)
|
48
|
+
lists.delete_if { |list| list['type'] != 'include' }
|
49
|
+
end
|
50
|
+
|
51
|
+
def fetch_list
|
52
|
+
MaxemailApiShared.send_request(params: { method: 'fetchAll' }, method: 'list')
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module MaxemailApiTriggered
|
2
|
+
extend self
|
3
|
+
include MaxemailApiShared
|
4
|
+
|
5
|
+
def send(folder_name: nil, email_name: nil, email_id: nil, email_address:, profile_data:)
|
6
|
+
email_id = MaxemailApiTriggered.find_email_id(folder_name: folder_name, email_name: email_name) if email_id.nil?
|
7
|
+
MaxemailApiTriggered.send_triggered(email_address: email_address, email_id: email_id, profile_data: profile_data)
|
8
|
+
end
|
9
|
+
|
10
|
+
def send_triggered(email_address: nil, email_id: nil, profile_data: nil)
|
11
|
+
return MaxemailApiResponse.new(data: {}, success: false, message: 'Template not found') if email_id.nil?
|
12
|
+
return MaxemailApiResponse.new(data: {}, success: false, message: 'Invalid Profile data') unless valid_profile_data?(profile_data)
|
13
|
+
return MaxemailApiResponse.new(data: {}, success: false, message: 'Invalid Email address') unless valid_email?(email_address)
|
14
|
+
response = JSON.parse(MaxemailApiShared.send_request(params: { method: 'trigger',
|
15
|
+
emailAddress: email_address,
|
16
|
+
emailId: email_id,
|
17
|
+
profileData: profile_data.to_json }, method: 'email_send').body)
|
18
|
+
return MaxemailApiResponse.new(data: {}, success: true, message: 'Mail sent') if response['success'] == true
|
19
|
+
return MaxemailApiResponse.new(data: {}, success: false, message: 'Server error') if response['success'] == false
|
20
|
+
rescue StandardError => e
|
21
|
+
puts 'MaxemailApiResponse Error:'
|
22
|
+
puts e
|
23
|
+
puts 'END MaxemailApiResponse Error:'
|
24
|
+
return MaxemailApiResponse.new(data: {}, success: false, message: 'Server error') if response['success'] == false
|
25
|
+
end
|
26
|
+
|
27
|
+
def find_email_id(folder_name: nil, email_name: nil)
|
28
|
+
folder_id = find_folder_id(folder_name: folder_name)
|
29
|
+
response = JSON.parse(fetch_tree(tree: 'email', node_id: folder_id, node_class: 'folder'))
|
30
|
+
response.map do |node|
|
31
|
+
node['nodeId'].to_i if node['text'] == email_name
|
32
|
+
end.compact.first
|
33
|
+
rescue StandardError
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def fetch_root(tree: 'email', children: '[]')
|
38
|
+
MaxemailApiShared.send_request(params: { method: 'fetchRoot',
|
39
|
+
tree: tree,
|
40
|
+
children: children }, method: 'tree')
|
41
|
+
end
|
42
|
+
|
43
|
+
def fetch_tree(tree: 'email', node_id: nil, node_class: 'folder')
|
44
|
+
MaxemailApiShared.send_request(params: { method: 'fetchTree',
|
45
|
+
tree: tree,
|
46
|
+
nodeId: node_id,
|
47
|
+
nodeClass: node_class }, method: 'tree')
|
48
|
+
end
|
49
|
+
|
50
|
+
def fetch_trigged(folder_id: nil)
|
51
|
+
MaxemailApiShared.send_request(params: { method: 'fetchAll',
|
52
|
+
folderId: folder_id }, method: 'email_triggered')
|
53
|
+
end
|
54
|
+
|
55
|
+
def find_folder_id(folder_name: nil)
|
56
|
+
response = JSON.parse(fetch_root)
|
57
|
+
response[0]['children'].map do |node|
|
58
|
+
node['nodeId'].to_i if node['text'] == folder_name
|
59
|
+
end.compact.first
|
60
|
+
rescue StandardError
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
|
64
|
+
def valid_email?(email_address)
|
65
|
+
valid = '[A-Za-z\d.+-]+'
|
66
|
+
(email_address =~ /#{valid}@#{valid}\.#{valid}/).zero?
|
67
|
+
rescue StandardError
|
68
|
+
false
|
69
|
+
end
|
70
|
+
|
71
|
+
def valid_profile_data?(profile_data)
|
72
|
+
JSON.parse(profile_data.to_s)
|
73
|
+
true
|
74
|
+
rescue StandardError
|
75
|
+
false
|
76
|
+
end
|
77
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maxemail_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Murray Catto
|
@@ -31,6 +31,10 @@ extensions: []
|
|
31
31
|
extra_rdoc_files: []
|
32
32
|
files:
|
33
33
|
- lib/maxemail_api.rb
|
34
|
+
- lib/maxemail_api/response.rb
|
35
|
+
- lib/maxemail_api/shared.rb
|
36
|
+
- lib/maxemail_api/subscriptions.rb
|
37
|
+
- lib/maxemail_api/triggered.rb
|
34
38
|
homepage:
|
35
39
|
licenses: []
|
36
40
|
metadata: {}
|