maropost 0.3.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d46cc851445cb8bb9b24438e695176ccec886f5b
4
- data.tar.gz: 77fba51fa490defd9d70aa357af6944275138e33
3
+ metadata.gz: aa4796e02a8b14d6dc9d9cfafa879a2a9ca193af
4
+ data.tar.gz: bf551e4b26579e0183ad891af2a3a4a4476f4daf
5
5
  SHA512:
6
- metadata.gz: 663220a79654e756bf764d93abebd008a07fcacf95ea22fc0d97ff611e5bd4619054cd963024e52ab0c77deb3aab3e8c9c43d920b58c6f93318b91d7100f042e
7
- data.tar.gz: 155e82c202e4217d3ce0e2cf9bfa06fe1bc5ebf0afc6132a5ab52064ea106d76a5af3af43c612cc4baa47fe763a0d97d517dfe7d1851cf0f6ff8c7011dc49047
6
+ metadata.gz: d32697c99f8768a40913ab4637fa1a64aa33a9c95e1f88c6fddfedcfaf5234d864fb6e8e8eed48cc82d7485ba1aa2de02f523508373bbada8a58606dbc1d3173
7
+ data.tar.gz: 300107e26493f99c40001b45a6454a3a91303c846c5525c9d51f0f08563c2c9868b0e7d62350e17c9011ece32e3d398e6c20c7e1b4b1534f49eec5b22fc18246
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  *.gem
11
+ vendor/bundle
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
- --format documentation
2
1
  --color
2
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,18 @@
1
+ AllCops:
2
+ DisplayCopNames: true
3
+ TargetRubyVersion: 2.3
4
+ Exclude:
5
+ - 'bin/**/*'
6
+ - 'vendor/**/*'
7
+ Documentation:
8
+ Enabled: false
9
+ Metrics/BlockLength:
10
+ Exclude:
11
+ - 'spec/**/*'
12
+ - '*.gemspec'
13
+ Metrics/LineLength:
14
+ Max: 130
15
+ Metrics/MethodLength:
16
+ Max: 25
17
+ Style/Lambda:
18
+ EnforcedStyle: literal
data/.simplecov ADDED
@@ -0,0 +1,4 @@
1
+ SimpleCov.start do
2
+ SimpleCov.minimum_coverage 100.00
3
+ end
4
+
data/Gemfile CHANGED
@@ -1,11 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in maropost.gemspec
4
6
  gemspec
5
-
6
- group :development, :test do
7
- gem 'bundler', '~> 1.15'
8
- gem 'rake', '~> 12.0'
9
- gem 'rspec', '~> 3.5'
10
- gem 'webmock'
11
- end
data/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rspec/core/rake_task'
5
+ require 'rubocop/rake_task'
3
6
 
4
7
  RSpec::Core::RakeTask.new(:spec)
5
8
 
6
- task :default => :spec
9
+ task default: %i[spec rubocop]
10
+
11
+ RuboCop::RakeTask.new
data/lib/maropost/api.rb CHANGED
@@ -1,93 +1,85 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Maropost
2
4
  class Api
3
- def self.find(email)
4
- response = request(:get,
5
- maropost_url('contacts/email.json', "contact[email]=#{CGI::escape(email)}"))
6
- Maropost::Contact.new(JSON.parse response.body)
7
- rescue RestClient::ResourceNotFound
8
- nil
9
- end
10
-
11
- def self.update_subscriptions(contact)
12
- if existing_contact = find(contact.email)
13
- contact.id = existing_contact.id
14
- update(contact)
15
- else
16
- create(contact)
5
+ class << self
6
+ def find(email)
7
+ raise ArgumentError, 'must provide email' if email.blank?
8
+ service = Service.new(
9
+ method: :get,
10
+ path: 'contacts/email.json',
11
+ query: {
12
+ 'contact[email]': email,
13
+ 'auth_token': Maropost.configuration.auth_token
14
+ }
15
+ )
16
+ response = JSON.parse(service.execute!.body)
17
+ Maropost::Contact.new(response)
18
+ rescue RestClient::ResourceNotFound
19
+ nil
17
20
  end
18
- update_do_not_mail_list(contact)
19
- end
20
21
 
21
- def self.create(contact)
22
- response = request(:post,
23
- maropost_url('contacts.json'),
24
- create_or_update_payload(contact))
25
- Maropost::Contact.new(JSON.parse response.body)
26
- rescue RestClient::UnprocessableEntity, RestClient::BadRequest => e
27
- contact.errors << 'Unable to create or update contact'
28
- contact
29
- end
30
-
31
- def self.update(contact)
32
- response = request(:put,
33
- maropost_url("contacts/#{contact.id}.json"),
34
- create_or_update_payload(contact))
35
- Maropost::Contact.new(JSON.parse response.body)
36
- rescue RestClient::UnprocessableEntity, RestClient::BadRequest => e
37
- contact.errors << 'Unable to update contact'
38
- contact
39
- end
22
+ def update_subscriptions(contact)
23
+ to_maropost(
24
+ find(contact.email),
25
+ contact
26
+ )
27
+ update_do_not_mail_list(contact)
28
+ end
40
29
 
41
- private
30
+ def create(contact)
31
+ service = Service.new(
32
+ method: :post,
33
+ path: 'contacts.json',
34
+ payload: create_or_update_payload(contact)
35
+ )
36
+ response = JSON.parse(service.execute!.body)
37
+ Maropost::Contact.new(response)
38
+ rescue RestClient::UnprocessableEntity, RestClient::BadRequest
39
+ contact.errors << 'Unable to create or update contact'
40
+ contact
41
+ end
42
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
43
+ def update(contact)
44
+ service = Service.new(
45
+ method: :put,
46
+ path: "contacts/#{contact.id}.json",
47
+ payload: create_or_update_payload(contact)
48
+ )
49
+ response = JSON.parse(service.execute!.body)
50
+ Maropost::Contact.new(response)
51
+ rescue RestClient::UnprocessableEntity, RestClient::BadRequest
52
+ contact.errors << 'Unable to update contact'
53
+ contact
54
+ end
46
55
 
47
- def self.request(method, url, payload = {})
48
- RestClient::Request.logged_request(
49
- method: method,
50
- timeout: 10,
51
- open_timeout: 10,
52
- url: url,
53
- payload: { auth_token: Maropost.configuration.auth_token }.merge(payload).to_json,
54
- headers: { content_type: 'application/json', accept: 'application/json' },
55
- verify_ssl: OpenSSL::SSL::VERIFY_PEER
56
- )
57
- end
56
+ private
58
57
 
59
- def self.create_or_update_payload(contact)
60
- {
61
- contact:
62
- {
58
+ def create_or_update_payload(contact)
59
+ {
60
+ contact: {
63
61
  email: contact.email,
64
62
  phone: contact.phone_number,
65
- custom_field:
66
- {
67
- ama_rewards: contact.ama_rewards,
68
- ama_membership: contact.ama_membership,
69
- ama_insurance: contact.ama_insurance,
70
- ama_travel: contact.ama_travel,
71
- ama_new_member_series: contact.ama_new_member_series,
72
- ama_fleet_safety: contact.ama_fleet_safety,
73
- ovrr_personal: contact.ovrr_personal,
74
- ovrr_business: contact.ovrr_business,
75
- ovrr_associate: contact.ovrr_associate,
76
- ama_vr_reminder: contact.ama_vr_reminder,
77
- ama_vr_reminder_email: contact.ama_vr_reminder_email,
78
- ama_vr_reminder_sms: contact.ama_vr_reminder_sms,
79
- ama_vr_reminder_autocall: contact.ama_vr_reminder_autocall,
80
- cell_phone_number: contact.cell_phone_number
81
- }
63
+ custom_field: contact.list_parameters
82
64
  }
83
- }
84
- end
65
+ }
66
+ end
67
+
68
+ def to_maropost(existing, contact)
69
+ if existing
70
+ contact.id = existing.id
71
+ update(contact)
72
+ else
73
+ create(contact)
74
+ end
75
+ end
85
76
 
86
- def self.update_do_not_mail_list(contact)
87
- if contact.subscribed_to_any_lists?
88
- DoNotMailList.delete(contact)
89
- else
90
- DoNotMailList.create(contact)
77
+ def update_do_not_mail_list(contact)
78
+ if contact.subscribed_to_any_lists?
79
+ DoNotMailList.delete(contact)
80
+ else
81
+ DoNotMailList.create(contact)
82
+ end
91
83
  end
92
84
  end
93
85
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Maropost
2
4
  attr_accessor :configuration
3
5
 
@@ -10,11 +12,14 @@ module Maropost
10
12
  end
11
13
 
12
14
  class Configuration
13
- attr_accessor :api_url, :auth_token
15
+ attr_accessor :api_url, :auth_token, :open_timeout, :read_timeout
16
+
17
+ def open_timeout
18
+ @open_timeout || 5
19
+ end
14
20
 
15
- def initialize
16
- self.api_url = "http://example.com"
17
- self.auth_token = "auth_token"
21
+ def read_timeout
22
+ @read_timeout || 10
18
23
  end
19
24
  end
20
25
  end
@@ -1,39 +1,58 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Maropost
2
4
  class Contact
3
- attr_accessor :id, :email,
4
- :ama_rewards, :ama_membership, :ama_insurance, :ama_travel, :ama_new_member_series, :ama_fleet_safety,
5
- :ovrr_personal, :ovrr_business, :ovrr_associate,
6
- :ama_vr_reminder, :ama_vr_reminder_email, :ama_vr_reminder_sms, :ama_vr_reminder_autocall,
7
- :phone_number, :cell_phone_number, :errors
5
+ ATTRIBUTES = %i[
6
+ id
7
+ email
8
+ phone_number
9
+ cell_phone_number
10
+ lists
11
+ errors
12
+ ].freeze
13
+ LISTS = %i[
14
+ ama_rewards
15
+ ama_membership
16
+ ama_insurance
17
+ ama_travel
18
+ ama_new_member_series
19
+ ama_fleet_safety
20
+ ovrr_personal
21
+ ovrr_business
22
+ ovrr_associate
23
+ ama_vr_reminder
24
+ ama_vr_reminder_email
25
+ ama_vr_reminder_sms
26
+ ama_vr_reminder_autocall
27
+ ].freeze
8
28
 
9
- def initialize(data)
10
- data = data.stringify_keys
11
- self.id = data['id']
12
- self.email = data['email']
13
- self.ama_rewards = data['ama_rewards'] || '0'
14
- self.ama_membership = data['ama_membership'] || '0'
15
- self.ama_insurance = data['ama_insurance'] || '0'
16
- self.ama_travel = data['ama_travel'] || '0'
17
- self.ama_new_member_series = data['ama_new_member_series'] || '0'
18
- self.ama_fleet_safety = data['ama_fleet_safety'] || '0'
19
- self.ovrr_personal = data['ovrr_personal'] || ''
20
- self.ovrr_business = data['ovrr_business'] || ''
21
- self.ovrr_associate = data['ovrr_associate'] || ''
22
- self.ama_vr_reminder = data['ama_vr_reminder'] || '0'
23
- self.ama_vr_reminder_email = data['ama_vr_reminder_email'] || '0'
24
- self.ama_vr_reminder_sms = data['ama_vr_reminder_sms'] || '0'
25
- self.ama_vr_reminder_autocall = data['ama_vr_reminder_autocall'] || '0'
26
- self.phone_number = data['phone'] || ''
27
- self.cell_phone_number = data['cell_phone_number'] || ''
29
+ attr_accessor(*ATTRIBUTES)
28
30
 
31
+ def initialize(opts = {})
32
+ data = opts.with_indifferent_access
33
+ self.id = data[:id]
34
+ self.email = data[:email]
35
+ self.phone_number = data[:phone]
36
+ self.cell_phone_number = data[:cell_phone_number]
29
37
  self.errors = []
38
+ self.lists = {}
39
+ initialize_lists(data)
30
40
  end
31
41
 
32
42
  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')
43
+ lists.values.any? { |v| v == '1' }
44
+ end
45
+
46
+ def list_parameters
47
+ { cell_phone_number: cell_phone_number }.merge(lists)
48
+ end
49
+
50
+ private
51
+
52
+ def initialize_lists(opts = {})
53
+ LISTS.each do |list|
54
+ lists[list] = opts.fetch(list, 0).to_s
55
+ end
37
56
  end
38
57
  end
39
58
  end
@@ -1,53 +1,52 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Maropost
2
4
  class DoNotMailList
3
- def self.exists?(contact)
4
- response = request(:get,
5
- maropost_url('global_unsubscribes/email.json', "contact[email]=#{CGI::escape(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=#{CGI::escape(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
5
+ class << self
6
+ def exists?(contact)
7
+ service = Service.new(
8
+ method: :get,
9
+ path: 'global_unsubscribes/email.json',
10
+ query: {
11
+ 'contact[email]': contact.email,
12
+ 'auth_token': Maropost.configuration.auth_token
13
+ }
14
+ )
15
+ response = JSON.parse(service.execute!.body)
16
+ response['id'].present?
17
+ rescue RestClient::ResourceNotFound, RestClient::BadRequest => e
18
+ contact.errors << "Unexpected error occurred. Error: #{e.message}"
19
+ contact
20
+ end
34
21
 
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
22
+ def create(contact)
23
+ payload = { 'global_unsubscribe': { 'email': contact.email } }
24
+ service = Service.new(
25
+ method: :post,
26
+ path: 'global_unsubscribes.json',
27
+ payload: payload
28
+ )
29
+ service.execute!
30
+ contact
31
+ rescue RestClient::UnprocessableEntity, RestClient::BadRequest => e
32
+ contact.errors << "Unable to subscribe contact. Error: #{e.message}"
33
+ contact
34
+ end
40
35
 
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
- )
36
+ def delete(contact)
37
+ service = Service.new(
38
+ method: :delete,
39
+ path: 'global_unsubscribes/delete.json',
40
+ query: {
41
+ 'email': contact.email
42
+ }
43
+ )
44
+ service.execute!
45
+ contact
46
+ rescue RestClient::UnprocessableEntity, RestClient::BadRequest => e
47
+ contact.errors << "Unable to unsubscribe contact. Error: #{e.message}"
48
+ contact
49
+ end
51
50
  end
52
51
  end
53
52
  end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Maropost
4
+ class Service
5
+ attr_accessor :method, :path, :query, :payload, :request_id
6
+
7
+ def initialize(opts = {})
8
+ self.method = opts.fetch(:method)
9
+ self.path = opts.fetch(:path)
10
+ self.payload = opts.fetch(:payload, {}) # optional
11
+ self.query = opts[:query] # optional
12
+ self.request_id = SecureRandom.uuid
13
+ end
14
+
15
+ def execute!
16
+ RestClient::Request.logged_request(params)
17
+ end
18
+
19
+ private
20
+
21
+ def maropost_url
22
+ self.query &&= encode_query(query)
23
+ uri = URI.join(Maropost.configuration.api_url, path)
24
+ uri.tap { |u| query && u.query = query }.to_s
25
+ end
26
+
27
+ def encode_query(hash)
28
+ RestClient::Utils.encode_query_string(hash)
29
+ end
30
+
31
+ def get?
32
+ method.to_s.casecmp('get').zero?
33
+ end
34
+
35
+ def base_params
36
+ {
37
+ method: method,
38
+ read_timeout: Maropost.configuration.read_timeout,
39
+ open_timeout: Maropost.configuration.open_timeout,
40
+ url: maropost_url,
41
+ headers: {
42
+ content_type: 'application/json',
43
+ accept: 'application/json',
44
+ request_id: request_id
45
+ },
46
+ verify_ssl: OpenSSL::SSL::VERIFY_PEER
47
+ }
48
+ end
49
+
50
+ def params
51
+ return base_params if get?
52
+ base_params.merge(
53
+ payload: { auth_token: Maropost.configuration.auth_token }.merge(payload).to_json
54
+ )
55
+ end
56
+ end
57
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Maropost
2
- VERSION = '0.3.2'
4
+ VERSION = '0.5.0'
3
5
  end
data/lib/maropost.rb CHANGED
@@ -1,8 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/all'
1
4
  require 'json'
2
5
  require 'rest_client'
3
6
  require 'rest_client/jogger'
4
7
  require 'maropost/version'
5
8
  require 'maropost/configuration'
9
+ require 'maropost/service'
6
10
  require 'maropost/api'
7
11
  require 'maropost/contact'
8
12
  require 'maropost/do_not_mail_list'
data/maropost.gemspec CHANGED
@@ -1,27 +1,62 @@
1
1
  # coding: utf-8
2
+ # frozen_string_literal: true
3
+
2
4
  lib = File.expand_path('../lib', __FILE__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'maropost/version'
5
7
 
6
8
  Gem::Specification.new do |spec|
7
- spec.name = 'maropost'
8
- spec.version = Maropost::VERSION
9
- spec.authors = ['Michael van den Beuken', 'Ruben Estevez', 'Jordan Babe', 'Mathieu Gilbert', 'Ryan Jones', 'Darko Dosenovic', 'Jonathan Weyermann', 'Adam Melnyk', 'Kayt Campbell', 'Kathleen Robertson', 'Jesse Doyle', 'Sinead Errity', 'Serene Yew', 'Martin Echtner']
10
- spec.email = ['michael.beuken@gmail.com', 'ruben.a.estevez@gmail.com', 'jorbabe@gmail.com', 'mathieu.gilbert@ama.ab.ca', 'ryan.michael.jones@gmail.com', 'darko.dosenovic@ama.ab.ca', 'jonathan.weyermann@ama.ab.ca', 'adam.melnyk@ama.ab.ca', 'kayt.campbell@ama.ab.ca', 'kathleen.robertson@ama.ab.ca', 'jdoyle@ualberta.ca', 'sinead.errity@ama.ab.ca', 'serene.yew@ama.ab.ca', 'martin.echtner@ama.ab.ca']
11
- spec.summary = %q{Interact with the Maropost API}
12
- spec.description = %q{Interact with the Maropost API}
13
- spec.homepage = 'https://github.com/amaabca/maropost'
14
- spec.license = 'MIT'
9
+ spec.name = 'maropost'
10
+ spec.version = Maropost::VERSION
11
+ spec.authors = [
12
+ 'Michael van den Beuken',
13
+ 'Ruben Estevez',
14
+ 'Jordan Babe',
15
+ 'Ryan Jones',
16
+ 'Darko Dosenovic',
17
+ 'Jonathan Weyermann',
18
+ 'Kayt Campbell',
19
+ 'Jesse Doyle',
20
+ 'Zoie Carnegie',
21
+ 'Sinead Errity',
22
+ 'Serene Yew',
23
+ 'Martin Echtner'
24
+ ]
25
+ spec.email = [
26
+ 'michael.beuken@gmail.com',
27
+ 'ruben.a.estevez@gmail.com',
28
+ 'jorbabe@gmail.com',
29
+ 'ryan.michael.jones@gmail.com',
30
+ 'darko.dosenovic@ama.ab.ca',
31
+ 'jonathan.weyermann@ama.ab.ca',
32
+ 'kayt.campbell@ama.ab.ca',
33
+ 'jdoyle@ualberta.ca',
34
+ 'zoie.carnegie@ama.ab.ca',
35
+ 'sinead.errity@ama.ab.ca',
36
+ 'serene.yew@ama.ab.ca',
37
+ 'martin.echtner@ama.ab.ca'
38
+ ]
39
+ spec.summary = 'Interact with the Maropost API'
40
+ spec.description = 'Interact with the Maropost API'
41
+ spec.homepage = 'https://github.com/amaabca/maropost'
42
+ spec.license = 'MIT'
15
43
 
16
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
44
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
45
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
46
 
19
- spec.bindir = 'exe'
20
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
- spec.require_paths = %w(lib spec)
47
+ spec.bindir = 'bin'
48
+ spec.require_paths = %w[lib spec]
22
49
 
23
50
  spec.add_dependency 'rest-client'
24
51
  spec.add_dependency 'rest-client-jogger'
52
+ spec.add_dependency 'activesupport'
53
+ spec.add_development_dependency 'simplecov'
54
+ spec.add_development_dependency 'bundler'
55
+ spec.add_development_dependency 'rake'
56
+ spec.add_development_dependency 'rspec', '>= 3.0'
57
+ spec.add_development_dependency 'webmock'
58
+ spec.add_development_dependency 'rubocop', '0.49.1'
59
+ spec.add_development_dependency 'pry'
25
60
 
26
61
  spec.required_ruby_version = '>= 2.2'
27
62
  end
metadata CHANGED
@@ -1,27 +1,25 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maropost
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael van den Beuken
8
8
  - Ruben Estevez
9
9
  - Jordan Babe
10
- - Mathieu Gilbert
11
10
  - Ryan Jones
12
11
  - Darko Dosenovic
13
12
  - Jonathan Weyermann
14
- - Adam Melnyk
15
13
  - Kayt Campbell
16
- - Kathleen Robertson
17
14
  - Jesse Doyle
15
+ - Zoie Carnegie
18
16
  - Sinead Errity
19
17
  - Serene Yew
20
18
  - Martin Echtner
21
19
  autorequire:
22
- bindir: exe
20
+ bindir: bin
23
21
  cert_chain: []
24
- date: 2017-10-15 00:00:00.000000000 Z
22
+ date: 2017-10-18 00:00:00.000000000 Z
25
23
  dependencies:
26
24
  - !ruby/object:Gem::Dependency
27
25
  name: rest-client
@@ -51,19 +49,129 @@ dependencies:
51
49
  - - ">="
52
50
  - !ruby/object:Gem::Version
53
51
  version: '0'
52
+ - !ruby/object:Gem::Dependency
53
+ name: activesupport
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ type: :runtime
60
+ prerelease: false
61
+ version_requirements: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ - !ruby/object:Gem::Dependency
67
+ name: simplecov
68
+ requirement: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ type: :development
74
+ prerelease: false
75
+ version_requirements: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ - !ruby/object:Gem::Dependency
81
+ name: bundler
82
+ requirement: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ type: :development
88
+ prerelease: false
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ type: :development
102
+ prerelease: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ - !ruby/object:Gem::Dependency
109
+ name: rspec
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '3.0'
115
+ type: :development
116
+ prerelease: false
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '3.0'
122
+ - !ruby/object:Gem::Dependency
123
+ name: webmock
124
+ requirement: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ type: :development
130
+ prerelease: false
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ - !ruby/object:Gem::Dependency
137
+ name: rubocop
138
+ requirement: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - '='
141
+ - !ruby/object:Gem::Version
142
+ version: 0.49.1
143
+ type: :development
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - '='
148
+ - !ruby/object:Gem::Version
149
+ version: 0.49.1
150
+ - !ruby/object:Gem::Dependency
151
+ name: pry
152
+ requirement: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ version: '0'
157
+ type: :development
158
+ prerelease: false
159
+ version_requirements: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
54
164
  description: Interact with the Maropost API
55
165
  email:
56
166
  - michael.beuken@gmail.com
57
167
  - ruben.a.estevez@gmail.com
58
168
  - jorbabe@gmail.com
59
- - mathieu.gilbert@ama.ab.ca
60
169
  - ryan.michael.jones@gmail.com
61
170
  - darko.dosenovic@ama.ab.ca
62
171
  - jonathan.weyermann@ama.ab.ca
63
- - adam.melnyk@ama.ab.ca
64
172
  - kayt.campbell@ama.ab.ca
65
- - kathleen.robertson@ama.ab.ca
66
173
  - jdoyle@ualberta.ca
174
+ - zoie.carnegie@ama.ab.ca
67
175
  - sinead.errity@ama.ab.ca
68
176
  - serene.yew@ama.ab.ca
69
177
  - martin.echtner@ama.ab.ca
@@ -73,7 +181,9 @@ extra_rdoc_files: []
73
181
  files:
74
182
  - ".gitignore"
75
183
  - ".rspec"
184
+ - ".rubocop.yml"
76
185
  - ".ruby-version"
186
+ - ".simplecov"
77
187
  - ".travis.yml"
78
188
  - Gemfile
79
189
  - LICENSE.txt
@@ -86,6 +196,7 @@ files:
86
196
  - lib/maropost/configuration.rb
87
197
  - lib/maropost/contact.rb
88
198
  - lib/maropost/do_not_mail_list.rb
199
+ - lib/maropost/service.rb
89
200
  - lib/maropost/version.rb
90
201
  - maropost.gemspec
91
202
  homepage: https://github.com/amaabca/maropost