maileon 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 +7 -0
- data/.gitignore +16 -0
- data/.rspec +1 -0
- data/.travis.yml +13 -0
- data/Gemfile +4 -0
- data/Guardfile +31 -0
- data/LICENSE +674 -0
- data/README.md +85 -0
- data/Rakefile +10 -0
- data/lib/maileon.rb +7 -0
- data/lib/maileon/api.rb +61 -0
- data/lib/maileon/errors.rb +7 -0
- data/lib/maileon/version.rb +3 -0
- data/maileon.gemspec +34 -0
- data/spec/lib/api_spec.rb +113 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/support/fixtures/create_contact.json +0 -0
- data/spec/support/fixtures/delete_contact.json +0 -0
- data/spec/support/fixtures/ping.json +0 -0
- data/spec/support/mock_maileon.rb +31 -0
- metadata +251 -0
data/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Maileon [](https://travis-ci.org/interactive-pioneers/maileon)
|
|
2
|
+
|
|
3
|
+
Ruby wrapper for Maileon email marketing software API.
|
|
4
|
+
|
|
5
|
+
- Supported Ruby versions:
|
|
6
|
+
- 2.2.1 (strongly recommended)
|
|
7
|
+
- 2.1.0
|
|
8
|
+
- 2.0.0
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
Add this line to your application's Gemfile:
|
|
13
|
+
|
|
14
|
+
```ruby
|
|
15
|
+
gem 'maileon'
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
And then execute:
|
|
19
|
+
|
|
20
|
+
$ bundle
|
|
21
|
+
|
|
22
|
+
Or install it yourself as:
|
|
23
|
+
|
|
24
|
+
$ gem install maileon
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
Below API requests are currently supported by the gem:
|
|
29
|
+
|
|
30
|
+
### Ping
|
|
31
|
+
|
|
32
|
+
``` ruby
|
|
33
|
+
api_key = "e30994fg0fig6t049u42j3gblgsr59043"
|
|
34
|
+
maileon = Maileon::API.new(api_key, true)
|
|
35
|
+
maileon.ping
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Subscribe
|
|
39
|
+
|
|
40
|
+
``` ruby
|
|
41
|
+
api_key = "e30994fg0fig6t049u42j3gblgsr59043"
|
|
42
|
+
maileon = Maileon::API.new(api_key, true)
|
|
43
|
+
attribs = {
|
|
44
|
+
:email => "subscriber@email.com"
|
|
45
|
+
}
|
|
46
|
+
body = {
|
|
47
|
+
:email => "subscriber@email.com",
|
|
48
|
+
:custom_fields => {
|
|
49
|
+
:CUSTOM_FIELD_DEFINED_AT_MAILEON => "1"
|
|
50
|
+
},
|
|
51
|
+
:standard_fields => {
|
|
52
|
+
:SALUTATION => "Herr",
|
|
53
|
+
:GENDER => "m",
|
|
54
|
+
:FIRSTNAME => "Max",
|
|
55
|
+
:LASTNAME => "Mustermann",
|
|
56
|
+
:LOCALE => "de_DE",
|
|
57
|
+
:CITY => "Hamburg",
|
|
58
|
+
:COUNTRY => "Germany",
|
|
59
|
+
:ZIP => "22675",
|
|
60
|
+
:ADDRESS => "Friedensallee",
|
|
61
|
+
:HNR => "9"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
maileon.create_contact(attribs, body)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Unsubscribe
|
|
68
|
+
|
|
69
|
+
``` ruby
|
|
70
|
+
api_key = "e30994fg0fig6t049u42j3gblgsr59043"
|
|
71
|
+
maileon = Maileon::API.new(api_key, true)
|
|
72
|
+
attribs = {
|
|
73
|
+
:email => "subscriber@email.com"
|
|
74
|
+
}
|
|
75
|
+
maileon.delete_contact(attribs)
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Contributing
|
|
79
|
+
|
|
80
|
+
1. Fork it ( https://github.com/[my-github-username]/maileon/fork )
|
|
81
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
82
|
+
3. Develop your feature by concepts of test-driven development. Run `guard` in parallel to automatically run your tests
|
|
83
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
84
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
85
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
data/lib/maileon.rb
ADDED
data/lib/maileon/api.rb
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Maileon
|
|
2
|
+
class API
|
|
3
|
+
|
|
4
|
+
attr_accessor :host, :path, :apikey, :debug, :session
|
|
5
|
+
|
|
6
|
+
def initialize(apikey=nil, debug=false)
|
|
7
|
+
@host = 'https://api.maileon.com'
|
|
8
|
+
@path = '/1.0/'
|
|
9
|
+
|
|
10
|
+
unless apikey
|
|
11
|
+
apikey = ENV['MAILEON_APIKEY']
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
raise 'You must provide Maileon API key' unless apikey
|
|
15
|
+
|
|
16
|
+
@apikey = Base64.encode64(apikey).strip
|
|
17
|
+
@debug = debug
|
|
18
|
+
@session = Excon.new @host, :debug => debug
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def ping
|
|
22
|
+
@session.get(:path => "#{@path}/ping", :headers => get_headers)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def create_contact(params, body={})
|
|
26
|
+
raise ArgumentError.new("No parameters.") if params.empty?
|
|
27
|
+
raise ArgumentError.new("Email is mandatory.") if params[:email].nil?
|
|
28
|
+
raise Maileon::Errors::ValidationError.new("Invalid email format.") unless is_valid_email(params[:email])
|
|
29
|
+
email = URI::escape(params[:email])
|
|
30
|
+
permission = params[:permission] ||= 1
|
|
31
|
+
sync_mode = params[:sync_mode] ||= 2
|
|
32
|
+
doi = params[:doi] ||= true
|
|
33
|
+
doiplus = params[:doiplus] ||= true
|
|
34
|
+
url = "contacts/#{email}?permission=#{permission}&sync_mode=#{sync_mode}&doi=#{doi}&doiplus=#{doiplus}"
|
|
35
|
+
@session.post(:path => "#{@path}#{url}", :headers => get_headers, :body => body.to_json)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def delete_contact(params)
|
|
39
|
+
raise ArgumentError.new("No parameters.") if params.empty?
|
|
40
|
+
raise ArgumentError.new("Email is mandatory.") if params[:email].nil?
|
|
41
|
+
raise Maileon::Errors::ValidationError.new("Invalid email format.") unless is_valid_email(params[:email])
|
|
42
|
+
email = URI::escape(params[:email])
|
|
43
|
+
url = "contacts/#{email}"
|
|
44
|
+
@session.delete(:path => "#{@path}#{url}", :headers => get_headers('xml'))
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def get_headers(type='json')
|
|
50
|
+
{
|
|
51
|
+
"Content-Type" => "application/vnd.maileon.api+#{type}; charset=utf-8",
|
|
52
|
+
"Authorization" => "Basic #{@apikey}"
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def is_valid_email(email)
|
|
57
|
+
!/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/.match(email).nil?
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
end
|
data/maileon.gemspec
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'maileon/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = "maileon"
|
|
8
|
+
spec.version = Maileon::VERSION
|
|
9
|
+
spec.authors = ["Ain Tohvri"]
|
|
10
|
+
spec.email = ["at@interactive-pioneers.de"]
|
|
11
|
+
spec.summary = %q{Ruby wrapper for Maileon API.}
|
|
12
|
+
spec.description = %q{Ruby wrapper for Maileon email marketing software API.}
|
|
13
|
+
spec.homepage = "https://github.com/interactive-pioneers/maileon"
|
|
14
|
+
spec.license = "GPL-3.0"
|
|
15
|
+
|
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
spec.require_paths = ["lib"]
|
|
20
|
+
|
|
21
|
+
spec.add_runtime_dependency "excon", "~> 0.44.4"
|
|
22
|
+
spec.add_runtime_dependency "json", "~> 1.8"
|
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
|
25
|
+
spec.add_development_dependency "rspec", "~> 3.2"
|
|
26
|
+
spec.add_development_dependency "rspec-nc", "~> 0.2"
|
|
27
|
+
spec.add_development_dependency "guard", "~> 2.2"
|
|
28
|
+
spec.add_development_dependency "guard-rspec", "~> 4.5"
|
|
29
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
|
30
|
+
spec.add_development_dependency "pry-remote", "~> 0.1"
|
|
31
|
+
spec.add_development_dependency "pry-nav", "~> 0.2"
|
|
32
|
+
spec.add_development_dependency "webmock", "~> 1.20"
|
|
33
|
+
spec.add_development_dependency "sinatra", "~> 1.4"
|
|
34
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'excon'
|
|
3
|
+
require 'support/mock_maileon'
|
|
4
|
+
|
|
5
|
+
describe Maileon::API do
|
|
6
|
+
|
|
7
|
+
describe '.initialize' do
|
|
8
|
+
context 'without API key' do
|
|
9
|
+
it { expect { Maileon::API.new }.to raise_error }
|
|
10
|
+
end
|
|
11
|
+
context 'with API key' do
|
|
12
|
+
it { expect(Maileon::API.new('2iaodsfi4u83943uruqf')).to be_an_instance_of Maileon::API }
|
|
13
|
+
end
|
|
14
|
+
context 'with environment-based API key' do
|
|
15
|
+
it {
|
|
16
|
+
ENV['MAILEON_APIKEY'] = 'adsfadsi4292r0vajsfdafldkaf'
|
|
17
|
+
is_expected.to be_an_instance_of Maileon::API
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
describe Maileon::API.new('asdfasdfasdfa') do
|
|
23
|
+
context 'when initiliased' do
|
|
24
|
+
it { is_expected.to have_attributes(:host => a_string_starting_with("https://")) }
|
|
25
|
+
it { is_expected.to have_attributes(:path => a_string_starting_with("/")) }
|
|
26
|
+
it { is_expected.to have_attributes(:apikey => Base64.encode64('asdfasdfasdfa').strip) }
|
|
27
|
+
it { is_expected.to have_attributes(:debug => false) }
|
|
28
|
+
it { is_expected.to have_attributes(:session => be) }
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
describe '.ping' do
|
|
33
|
+
context 'with invalid API key' do
|
|
34
|
+
it {
|
|
35
|
+
@maileon = Maileon::API.new('9320293t90gaksdf5900434')
|
|
36
|
+
expect(@maileon.ping.status).to eq 401
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
context 'with valid API key' do
|
|
40
|
+
it {
|
|
41
|
+
@maileon = Maileon::API.new(MockMaileon::API_KEY)
|
|
42
|
+
expect(@maileon.ping.status).to eq 200
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
describe '.create_contact' do
|
|
48
|
+
before(:all) do
|
|
49
|
+
@maileon = Maileon::API.new(MockMaileon::API_KEY)
|
|
50
|
+
end
|
|
51
|
+
context 'without parameters' do
|
|
52
|
+
it { expect { @maileon.create_contact() }.to raise_error(ArgumentError) }
|
|
53
|
+
end
|
|
54
|
+
context 'with empty parameters' do
|
|
55
|
+
it { expect { @maileon.create_contact({}) }.to raise_error(ArgumentError, "No parameters.") }
|
|
56
|
+
end
|
|
57
|
+
context 'without email' do
|
|
58
|
+
it { expect { @maileon.create_contact({:permission => 1}) }.to raise_error(ArgumentError, "Email is mandatory.") }
|
|
59
|
+
end
|
|
60
|
+
context 'with invalid email' do
|
|
61
|
+
it { expect { @maileon.create_contact({ :email => 'dummy@email' }) }.to raise_error(Maileon::Errors::ValidationError, "Invalid email format.") }
|
|
62
|
+
it { expect { @maileon.create_contact({ :email => 'dummy@email.2' }) }.to raise_error(Maileon::Errors::ValidationError, "Invalid email format.") }
|
|
63
|
+
it { expect { @maileon.create_contact({ :email => 'dummy@.2' }) }.to raise_error(Maileon::Errors::ValidationError, "Invalid email format.") }
|
|
64
|
+
it { expect { @maileon.create_contact({ :email => '@dummy.de' }) }.to raise_error(Maileon::Errors::ValidationError, "Invalid email format.") }
|
|
65
|
+
end
|
|
66
|
+
context 'with valid email' do
|
|
67
|
+
it { expect { @maileon.create_contact({ :email => 'dummy@email.com' }) }.not_to raise_error }
|
|
68
|
+
it { expect { @maileon.create_contact({ :email => 'dummy@some.email.de' }) }.not_to raise_error }
|
|
69
|
+
it { expect { @maileon.create_contact({ :email => 'dummy.some+filter@email.some-tld.de' }) }.not_to raise_error }
|
|
70
|
+
it { expect(@maileon.create_contact({ :email => 'dummy@tld.de' }).status).to eq 200 }
|
|
71
|
+
end
|
|
72
|
+
context 'with invalid API key' do
|
|
73
|
+
it {
|
|
74
|
+
@maileon = Maileon::API.new('219049tigadkv9f095t03tk2')
|
|
75
|
+
expect(@maileon.create_contact({ :email => 'dummy@tld.de' }).status).to eq 401
|
|
76
|
+
}
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
describe '.delete_contact' do
|
|
81
|
+
before(:all) do
|
|
82
|
+
@maileon = Maileon::API.new(MockMaileon::API_KEY)
|
|
83
|
+
end
|
|
84
|
+
context 'without parameters' do
|
|
85
|
+
it { expect { @maileon.delete_contact() }.to raise_error(ArgumentError) }
|
|
86
|
+
end
|
|
87
|
+
context 'with empty parameters' do
|
|
88
|
+
it { expect { @maileon.delete_contact({}) }.to raise_error(ArgumentError, "No parameters.") }
|
|
89
|
+
end
|
|
90
|
+
context 'without email' do
|
|
91
|
+
it { expect { @maileon.delete_contact({:permission => 1}) }.to raise_error(ArgumentError, "Email is mandatory.") }
|
|
92
|
+
end
|
|
93
|
+
context 'with invalid email' do
|
|
94
|
+
it { expect { @maileon.delete_contact({ :email => 'dummy@email' }) }.to raise_error(Maileon::Errors::ValidationError, "Invalid email format.") }
|
|
95
|
+
it { expect { @maileon.delete_contact({ :email => 'dummy@email.2' }) }.to raise_error(Maileon::Errors::ValidationError, "Invalid email format.") }
|
|
96
|
+
it { expect { @maileon.delete_contact({ :email => 'dummy@.2' }) }.to raise_error(Maileon::Errors::ValidationError, "Invalid email format.") }
|
|
97
|
+
it { expect { @maileon.delete_contact({ :email => '@dummy.de' }) }.to raise_error(Maileon::Errors::ValidationError, "Invalid email format.") }
|
|
98
|
+
end
|
|
99
|
+
context 'with valid email' do
|
|
100
|
+
it { expect { @maileon.delete_contact({ :email => 'dummy@email.com' }) }.not_to raise_error }
|
|
101
|
+
it { expect { @maileon.delete_contact({ :email => 'dummy@some.email.de' }) }.not_to raise_error }
|
|
102
|
+
it { expect { @maileon.delete_contact({ :email => 'dummy.some+filter@email.some-tld.de' }) }.not_to raise_error }
|
|
103
|
+
it { expect(@maileon.delete_contact({ :email => 'dummy@tld.de' }).status).to eq 200 }
|
|
104
|
+
end
|
|
105
|
+
context 'with invalid API key' do
|
|
106
|
+
it {
|
|
107
|
+
@maileon = Maileon::API.new('219049tigadkv9f095t03tk2')
|
|
108
|
+
expect(@maileon.delete_contact({ :email => 'dummy@tld.de' }).status).to eq 401
|
|
109
|
+
}
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
require 'pry'
|
|
2
|
+
require 'maileon'
|
|
3
|
+
require 'webmock/rspec'
|
|
4
|
+
require 'support/mock_maileon'
|
|
5
|
+
|
|
6
|
+
# Do not allow external calls to API
|
|
7
|
+
WebMock.disable_net_connect!(allow_localhost: true)
|
|
8
|
+
|
|
9
|
+
# Stub all external API calls for WebMock
|
|
10
|
+
RSpec.configure do |config|
|
|
11
|
+
config.before(:each) do
|
|
12
|
+
stub_request(:any, /api.maileon.com/).to_rack(MockMaileon)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'sinatra/base'
|
|
2
|
+
|
|
3
|
+
class MockMaileon < Sinatra::Base
|
|
4
|
+
|
|
5
|
+
API_KEY = 'adsfadsi4292r0vajsfdafldkaf'
|
|
6
|
+
|
|
7
|
+
post '/1.0/contacts/:email' do
|
|
8
|
+
json_response is_valid_api_key? ? 200 : 401, 'create_contact.json'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
delete '/1.0/contacts/:email' do
|
|
12
|
+
json_response is_valid_api_key? ? 200 : 401, 'delete_contact.json'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
get '/1.0/ping' do
|
|
16
|
+
json_response is_valid_api_key? ? 200 : 401, 'ping.json'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def is_valid_api_key?
|
|
22
|
+
key = request.env['HTTP_AUTHORIZATION'].split(' ').last
|
|
23
|
+
Base64.encode64(API_KEY).strip == key
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def json_response(response_code, file_name)
|
|
27
|
+
content_type :json
|
|
28
|
+
status response_code
|
|
29
|
+
File.open(File.dirname(__FILE__) + '/fixtures/' + file_name, 'rb').read
|
|
30
|
+
end
|
|
31
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: maileon
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Ain Tohvri
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2015-03-04 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: excon
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.44.4
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.44.4
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: json
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.8'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '1.8'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: bundler
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '1.6'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '1.6'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: rake
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '10.0'
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '10.0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rspec
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - "~>"
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '3.2'
|
|
76
|
+
type: :development
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - "~>"
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '3.2'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rspec-nc
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '0.2'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '0.2'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: guard
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '2.2'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '2.2'
|
|
111
|
+
- !ruby/object:Gem::Dependency
|
|
112
|
+
name: guard-rspec
|
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
|
114
|
+
requirements:
|
|
115
|
+
- - "~>"
|
|
116
|
+
- !ruby/object:Gem::Version
|
|
117
|
+
version: '4.5'
|
|
118
|
+
type: :development
|
|
119
|
+
prerelease: false
|
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
+
requirements:
|
|
122
|
+
- - "~>"
|
|
123
|
+
- !ruby/object:Gem::Version
|
|
124
|
+
version: '4.5'
|
|
125
|
+
- !ruby/object:Gem::Dependency
|
|
126
|
+
name: pry
|
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
|
128
|
+
requirements:
|
|
129
|
+
- - "~>"
|
|
130
|
+
- !ruby/object:Gem::Version
|
|
131
|
+
version: '0.10'
|
|
132
|
+
type: :development
|
|
133
|
+
prerelease: false
|
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
135
|
+
requirements:
|
|
136
|
+
- - "~>"
|
|
137
|
+
- !ruby/object:Gem::Version
|
|
138
|
+
version: '0.10'
|
|
139
|
+
- !ruby/object:Gem::Dependency
|
|
140
|
+
name: pry-remote
|
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
|
142
|
+
requirements:
|
|
143
|
+
- - "~>"
|
|
144
|
+
- !ruby/object:Gem::Version
|
|
145
|
+
version: '0.1'
|
|
146
|
+
type: :development
|
|
147
|
+
prerelease: false
|
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
149
|
+
requirements:
|
|
150
|
+
- - "~>"
|
|
151
|
+
- !ruby/object:Gem::Version
|
|
152
|
+
version: '0.1'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: pry-nav
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '0.2'
|
|
160
|
+
type: :development
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0.2'
|
|
167
|
+
- !ruby/object:Gem::Dependency
|
|
168
|
+
name: webmock
|
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
|
170
|
+
requirements:
|
|
171
|
+
- - "~>"
|
|
172
|
+
- !ruby/object:Gem::Version
|
|
173
|
+
version: '1.20'
|
|
174
|
+
type: :development
|
|
175
|
+
prerelease: false
|
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
177
|
+
requirements:
|
|
178
|
+
- - "~>"
|
|
179
|
+
- !ruby/object:Gem::Version
|
|
180
|
+
version: '1.20'
|
|
181
|
+
- !ruby/object:Gem::Dependency
|
|
182
|
+
name: sinatra
|
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
|
184
|
+
requirements:
|
|
185
|
+
- - "~>"
|
|
186
|
+
- !ruby/object:Gem::Version
|
|
187
|
+
version: '1.4'
|
|
188
|
+
type: :development
|
|
189
|
+
prerelease: false
|
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
191
|
+
requirements:
|
|
192
|
+
- - "~>"
|
|
193
|
+
- !ruby/object:Gem::Version
|
|
194
|
+
version: '1.4'
|
|
195
|
+
description: Ruby wrapper for Maileon email marketing software API.
|
|
196
|
+
email:
|
|
197
|
+
- at@interactive-pioneers.de
|
|
198
|
+
executables: []
|
|
199
|
+
extensions: []
|
|
200
|
+
extra_rdoc_files: []
|
|
201
|
+
files:
|
|
202
|
+
- ".gitignore"
|
|
203
|
+
- ".rspec"
|
|
204
|
+
- ".travis.yml"
|
|
205
|
+
- Gemfile
|
|
206
|
+
- Guardfile
|
|
207
|
+
- LICENSE
|
|
208
|
+
- README.md
|
|
209
|
+
- Rakefile
|
|
210
|
+
- lib/maileon.rb
|
|
211
|
+
- lib/maileon/api.rb
|
|
212
|
+
- lib/maileon/errors.rb
|
|
213
|
+
- lib/maileon/version.rb
|
|
214
|
+
- maileon.gemspec
|
|
215
|
+
- spec/lib/api_spec.rb
|
|
216
|
+
- spec/spec_helper.rb
|
|
217
|
+
- spec/support/fixtures/create_contact.json
|
|
218
|
+
- spec/support/fixtures/delete_contact.json
|
|
219
|
+
- spec/support/fixtures/ping.json
|
|
220
|
+
- spec/support/mock_maileon.rb
|
|
221
|
+
homepage: https://github.com/interactive-pioneers/maileon
|
|
222
|
+
licenses:
|
|
223
|
+
- GPL-3.0
|
|
224
|
+
metadata: {}
|
|
225
|
+
post_install_message:
|
|
226
|
+
rdoc_options: []
|
|
227
|
+
require_paths:
|
|
228
|
+
- lib
|
|
229
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
230
|
+
requirements:
|
|
231
|
+
- - ">="
|
|
232
|
+
- !ruby/object:Gem::Version
|
|
233
|
+
version: '0'
|
|
234
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
|
+
requirements:
|
|
236
|
+
- - ">="
|
|
237
|
+
- !ruby/object:Gem::Version
|
|
238
|
+
version: '0'
|
|
239
|
+
requirements: []
|
|
240
|
+
rubyforge_project:
|
|
241
|
+
rubygems_version: 2.4.6
|
|
242
|
+
signing_key:
|
|
243
|
+
specification_version: 4
|
|
244
|
+
summary: Ruby wrapper for Maileon API.
|
|
245
|
+
test_files:
|
|
246
|
+
- spec/lib/api_spec.rb
|
|
247
|
+
- spec/spec_helper.rb
|
|
248
|
+
- spec/support/fixtures/create_contact.json
|
|
249
|
+
- spec/support/fixtures/delete_contact.json
|
|
250
|
+
- spec/support/fixtures/ping.json
|
|
251
|
+
- spec/support/mock_maileon.rb
|