maropost 0.2.2 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c39222bf12c1d855cef900060f8cb24771387073
4
- data.tar.gz: 24b183da1021fb2cd7323c9f701116c4d2d78857
3
+ metadata.gz: 9c8115f30902b993b7c8d6895006ec6a69cbe84a
4
+ data.tar.gz: 2fa10ba47d14f3abe08caefb7c48adb6220a0ae5
5
5
  SHA512:
6
- metadata.gz: aaba52fbd153a4429e5a03a45c06f8dd797d750f5d2fea4ea9dbfcf61b4ccee01f9c6ddac4484cdd08f541e1816cd4bee36c51fc8d099ba5639ded269e2986bc
7
- data.tar.gz: 07ebe611835d1cf5da7b90b3ab16ef98c65fa48b9ec0d766ab6ab51cb131242bc4a61a1eb1e4050e49d358c33a75cf4aace439cc5c068a55e3114d4a414ca14d
6
+ metadata.gz: 6484c0511c8216ebc583d9fa4b3baaa0c67c5cd6ddd64384f660a38fa472bd1b9559db1dcb697b3663de5f3c789cf5eeca7e71bf79377d096563c866174dd5c2
7
+ data.tar.gz: f6623d5bf9b6a974850d5ba9c2a2486c197c3504b5a4b39d9868e31d2861abbdf8f0705cdb51f02d56ac8662b19e5cacf343e069e3df2bdf5c636a578dbb909b
@@ -5,3 +5,4 @@ require 'maropost/version'
5
5
  require 'maropost/configuration'
6
6
  require 'maropost/api'
7
7
  require 'maropost/contact'
8
+ require 'maropost/do_not_mail_list'
@@ -2,7 +2,7 @@ module Maropost
2
2
  class Api
3
3
  def self.find(email)
4
4
  response = request(:get,
5
- "#{Maropost.configuration.api_url}/contacts/email.json?contact[email]=#{email}")
5
+ maropost_url('/contacts/email.json', "contact[email]=#{email}"))
6
6
  Maropost::Contact.new(JSON.parse response.body)
7
7
  rescue RestClient::ResourceNotFound
8
8
  nil
@@ -15,11 +15,12 @@ module Maropost
15
15
  else
16
16
  create(contact)
17
17
  end
18
+ update_do_not_mail_list(contact)
18
19
  end
19
20
 
20
21
  def self.create(contact)
21
22
  response = request(:post,
22
- "#{Maropost.configuration.api_url}/contacts.json",
23
+ maropost_url('/contacts.json'),
23
24
  create_or_update_payload(contact))
24
25
  Maropost::Contact.new(JSON.parse response.body)
25
26
  rescue RestClient::UnprocessableEntity, RestClient::BadRequest => e
@@ -29,7 +30,7 @@ module Maropost
29
30
 
30
31
  def self.update(contact)
31
32
  response = request(:put,
32
- "#{Maropost.configuration.api_url}/contacts/#{contact.id}.json",
33
+ maropost_url("/contacts/#{contact.id}.json"),
33
34
  create_or_update_payload(contact))
34
35
  Maropost::Contact.new(JSON.parse response.body)
35
36
  rescue RestClient::UnprocessableEntity, RestClient::BadRequest => e
@@ -39,6 +40,10 @@ module Maropost
39
40
 
40
41
  private
41
42
 
43
+ def self.maropost_url(path, query = nil)
44
+ URI.join(Maropost.configuration.api_url, path).tap { |u| query && u.query = query }.to_s
45
+ end
46
+
42
47
  def self.request(method, url, payload = {})
43
48
  RestClient::Request.logged_request(
44
49
  method: method,
@@ -52,26 +57,36 @@ module Maropost
52
57
  end
53
58
 
54
59
  def self.create_or_update_payload(contact)
55
- { contact: { email: contact.email,
56
- phone: contact.phone_number,
57
- custom_field: {
58
- ama_rewards: contact.ama_rewards,
59
- ama_membership: contact.ama_membership,
60
- ama_insurance: contact.ama_insurance,
61
- ama_travel: contact.ama_travel,
62
- ama_new_member_series: contact.ama_new_member_series,
63
- ama_fleet_safety: contact.ama_fleet_safety,
64
- ovrr_personal: contact.ovrr_personal,
65
- ovrr_business: contact.ovrr_business,
66
- ovrr_associate: contact.ovrr_associate,
67
- ama_vr_reminder: contact.ama_vr_reminder,
68
- ama_vr_reminder_email: contact.ama_vr_reminder_email,
69
- ama_vr_reminder_sms: contact.ama_vr_reminder_sms,
70
- ama_vr_reminder_autocall: contact.ama_vr_reminder_autocall,
71
- cell_phone_number: contact.cell_phone_number
72
- }
73
- }
60
+ {
61
+ contact:
62
+ { email: contact.email,
63
+ phone: contact.phone_number,
64
+ custom_field: {
65
+ ama_rewards: contact.ama_rewards,
66
+ ama_membership: contact.ama_membership,
67
+ ama_insurance: contact.ama_insurance,
68
+ ama_travel: contact.ama_travel,
69
+ ama_new_member_series: contact.ama_new_member_series,
70
+ ama_fleet_safety: contact.ama_fleet_safety,
71
+ ovrr_personal: contact.ovrr_personal,
72
+ ovrr_business: contact.ovrr_business,
73
+ ovrr_associate: contact.ovrr_associate,
74
+ ama_vr_reminder: contact.ama_vr_reminder,
75
+ ama_vr_reminder_email: contact.ama_vr_reminder_email,
76
+ ama_vr_reminder_sms: contact.ama_vr_reminder_sms,
77
+ ama_vr_reminder_autocall: contact.ama_vr_reminder_autocall,
78
+ cell_phone_number: contact.cell_phone_number
79
+ }
80
+ }
74
81
  }
75
82
  end
83
+
84
+ def self.update_do_not_mail_list(contact)
85
+ if contact.subscribed_to_any_lists?
86
+ DoNotMailList.delete(contact)
87
+ else
88
+ DoNotMailList.create(contact)
89
+ end
90
+ end
76
91
  end
77
92
  end
@@ -28,5 +28,12 @@ module Maropost
28
28
 
29
29
  self.errors = []
30
30
  end
31
+
32
+ def subscribed_to_any_lists?
33
+ ama_rewards.eql?('1') || ama_membership.eql?('1') || ama_insurance.eql?('1') || ama_travel.eql?('1') ||
34
+ ama_new_member_series.eql?('1') || ama_fleet_safety.eql?('1') ||
35
+ ama_vr_reminder.eql?('1') || ama_vr_reminder_email.eql?('1') || ama_vr_reminder_sms.eql?('1') ||
36
+ ama_vr_reminder_autocall.eql?('1')
37
+ end
31
38
  end
32
39
  end
@@ -0,0 +1,53 @@
1
+ module Maropost
2
+ class DoNotMailList
3
+ def self.exists?(contact)
4
+ response = request(:get,
5
+ maropost_url('/global_unsubscribes/email.json', "contact[email]=#{contact.email}"))
6
+ JSON.parse response.body
7
+
8
+ response['id'] ? true : false
9
+ rescue RestClient::ResourceNotFound, RestClient::BadRequest => e
10
+ contact.errors << "Unexpected error occurred. Error: #{e.message}"
11
+ contact
12
+ end
13
+
14
+ def self.create(contact)
15
+ payload = { 'global_unsubscribe': { 'email': contact.email } }
16
+
17
+ request(:post,
18
+ maropost_url('/global_unsubscribes.json'),
19
+ payload)
20
+ contact
21
+ rescue RestClient::UnprocessableEntity, RestClient::BadRequest => e
22
+ contact.errors << "Unable to subscribe contact. Error: #{e.message}"
23
+ contact
24
+ end
25
+
26
+ def self.delete(contact)
27
+ request(:delete,
28
+ maropost_url('/global_unsubscribes/delete.json', "email=#{contact.email}"))
29
+ contact
30
+ rescue RestClient::UnprocessableEntity, RestClient::BadRequest => e
31
+ contact.errors << "Unable to unsubscribe contact. Error: #{e.message}"
32
+ contact
33
+ end
34
+
35
+ private
36
+
37
+ def self.maropost_url(path, query = nil)
38
+ URI.join(Maropost.configuration.api_url, path).tap { |u| query && u.query = query }.to_s
39
+ end
40
+
41
+ def self.request(method, url, payload = {})
42
+ RestClient::Request.logged_request(
43
+ method: method,
44
+ read_timeout: 10,
45
+ open_timeout: 5,
46
+ url: url,
47
+ payload: { auth_token: Maropost.configuration.auth_token }.merge(payload).to_json,
48
+ headers: { content_type: 'application/json', accept: 'application/json' },
49
+ verify_ssl: OpenSSL::SSL::VERIFY_PEER
50
+ )
51
+ end
52
+ end
53
+ end
@@ -1,3 +1,3 @@
1
1
  module Maropost
2
- VERSION = '0.2.2'
2
+ VERSION = '0.3.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maropost
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael van den Beuken
@@ -21,7 +21,7 @@ authors:
21
21
  autorequire:
22
22
  bindir: exe
23
23
  cert_chain: []
24
- date: 2017-10-04 00:00:00.000000000 Z
24
+ date: 2017-10-06 00:00:00.000000000 Z
25
25
  dependencies:
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rest-client
@@ -85,6 +85,7 @@ files:
85
85
  - lib/maropost/api.rb
86
86
  - lib/maropost/configuration.rb
87
87
  - lib/maropost/contact.rb
88
+ - lib/maropost/do_not_mail_list.rb
88
89
  - lib/maropost/version.rb
89
90
  - maropost.gemspec
90
91
  homepage: https://github.com/amaabca/maropost