mailerlite 0.3.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.hound.yml +3 -0
- data/.rubocop.yml +30 -0
- data/.travis.yml +0 -6
- data/Gemfile +9 -4
- data/README.md +0 -1
- data/lib/mailerlite.rb +4 -0
- data/lib/mailerlite/client.rb +11 -2
- data/lib/mailerlite/clients/campaigns.rb +43 -31
- data/lib/mailerlite/clients/fields.rb +53 -0
- data/lib/mailerlite/clients/groups.rb +49 -0
- data/lib/mailerlite/clients/subscribers.rb +58 -16
- data/lib/mailerlite/configuration.rb +12 -5
- data/lib/mailerlite/connection.rb +13 -14
- data/lib/mailerlite/error.rb +20 -8
- data/lib/mailerlite/middleware/fix_unparsed_json.rb +12 -0
- data/lib/mailerlite/version.rb +2 -1
- data/mailerlite.gemspec +0 -1
- metadata +8 -19
- data/examples/campaigns.md +0 -62
- data/lib/mailerlite/clients/lists.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 843af19f90d52a10946d15d6e01a18145ea9d42f
|
4
|
+
data.tar.gz: dab4fc1e6262cd7534ce338603c5f8229a845d1c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afa2abd88a4f60d9b6ef7062fc1f6e403ebea6d5e07bfdd52d95620d5871a5e80b256a281e2fc85ff87c33fb285f5bdb6ccd82f89a8eb44daedf365363c83ba9
|
7
|
+
data.tar.gz: 4c8e17942c01e12c5806f05b758cd67e6f461bc1f9641a5dcc2cb8b34c5be7944fd8d49490c81466b8de9333ace95633c574fc4d1babaa47716911859052a276
|
data/.hound.yml
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
AllCops:
|
2
|
+
Include:
|
3
|
+
- '**/Rakefile'
|
4
|
+
- '**/Gemfile'
|
5
|
+
|
6
|
+
Style/Documentation:
|
7
|
+
Enabled: false
|
8
|
+
|
9
|
+
Style/AlignParameters:
|
10
|
+
Enabled: true
|
11
|
+
EnforcedStyle: with_fixed_indentation
|
12
|
+
|
13
|
+
Style/MultilineOperationIndentation:
|
14
|
+
Enabled: true
|
15
|
+
EnforcedStyle: indented
|
16
|
+
|
17
|
+
Style/MultilineMethodCallIndentation:
|
18
|
+
Enabled: true
|
19
|
+
EnforcedStyle: indented
|
20
|
+
|
21
|
+
Style/CaseIndentation:
|
22
|
+
Enabled: true
|
23
|
+
IndentWhenRelativeTo: end
|
24
|
+
|
25
|
+
Lint/EndAlignment:
|
26
|
+
Enabled: true
|
27
|
+
AlignWith: variable
|
28
|
+
|
29
|
+
Style/FrozenStringLiteralComment:
|
30
|
+
Enabled: false
|
data/.travis.yml
CHANGED
@@ -8,18 +8,12 @@ bundler_args: --without development
|
|
8
8
|
language: ruby
|
9
9
|
|
10
10
|
rvm:
|
11
|
-
- 1.9.3
|
12
11
|
- 2.0.0
|
13
12
|
- 2.1.0
|
14
13
|
- 2.2.0
|
15
14
|
- 2.3.0
|
16
15
|
- ruby-head
|
17
|
-
- jruby-19mode
|
18
|
-
- jruby-head
|
19
|
-
- rbx
|
20
16
|
|
21
17
|
matrix:
|
22
18
|
allow_failures:
|
23
19
|
- rvm: ruby-head
|
24
|
-
- rvm: jruby-head
|
25
|
-
- rvm: rbx
|
data/Gemfile
CHANGED
@@ -1,16 +1,21 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
+
group :development do
|
4
|
+
gem 'guard-rspec', '~> 4.7.3'
|
5
|
+
gem 'rubocop', '~> 0.42'
|
6
|
+
end
|
7
|
+
|
3
8
|
group :development, :test do
|
4
9
|
gem 'pry'
|
5
10
|
end
|
6
11
|
|
7
12
|
group :test do
|
8
13
|
gem 'codeclimate-test-reporter', require: false
|
9
|
-
gem 'coveralls',
|
10
|
-
gem 'guard-rspec', '~> 4.6.5'
|
14
|
+
gem 'coveralls', '~> 0.8.15', require: false
|
11
15
|
gem 'rake' # For Travis CI
|
12
|
-
gem '
|
13
|
-
gem '
|
16
|
+
gem 'rspec', '~> 3.5'
|
17
|
+
gem 'simplecov', '~> 0.12', require: false
|
18
|
+
gem 'webmock', '~> 2.1'
|
14
19
|
end
|
15
20
|
|
16
21
|
gemspec
|
data/README.md
CHANGED
data/lib/mailerlite.rb
CHANGED
@@ -17,5 +17,9 @@ module MailerLite
|
|
17
17
|
return super unless client.respond_to?(method_name)
|
18
18
|
client.send(method_name, *args, &block)
|
19
19
|
end
|
20
|
+
|
21
|
+
def respond_to_missing?(method_name, include_private = false)
|
22
|
+
client.respond_to?(method_name, include_private)
|
23
|
+
end
|
20
24
|
end
|
21
25
|
end
|
data/lib/mailerlite/client.rb
CHANGED
@@ -2,30 +2,39 @@ require 'mailerlite/connection'
|
|
2
2
|
require 'mailerlite/configuration'
|
3
3
|
|
4
4
|
require 'mailerlite/clients/campaigns'
|
5
|
-
require 'mailerlite/clients/
|
5
|
+
require 'mailerlite/clients/fields'
|
6
|
+
require 'mailerlite/clients/groups'
|
6
7
|
require 'mailerlite/clients/subscribers'
|
7
8
|
|
8
9
|
module MailerLite
|
9
10
|
# Wrapper class for all actions.
|
10
11
|
class Client
|
11
12
|
include MailerLite::Clients::Campaigns
|
12
|
-
include MailerLite::Clients::
|
13
|
+
include MailerLite::Clients::Fields
|
14
|
+
include MailerLite::Clients::Groups
|
13
15
|
include MailerLite::Clients::Subscribers
|
14
16
|
|
17
|
+
# Initialize client.
|
18
|
+
#
|
19
|
+
# @param options [Hash] A customizable set of options.
|
20
|
+
# @option options [String] :api_key API Key provider from MailerLite.
|
15
21
|
def initialize(options = {})
|
16
22
|
config.api_key = options[:api_key] if options[:api_key]
|
17
23
|
end
|
18
24
|
|
25
|
+
# @return [Configuration]
|
19
26
|
def config
|
20
27
|
@config ||= Configuration.new
|
21
28
|
end
|
22
29
|
alias configuration config
|
23
30
|
|
31
|
+
# Configure client with a block of settings.
|
24
32
|
def configure
|
25
33
|
yield(config) if block_given?
|
26
34
|
true
|
27
35
|
end
|
28
36
|
|
37
|
+
# @return [Connection]
|
29
38
|
def connection
|
30
39
|
@connection ||= Connection.new(self)
|
31
40
|
end
|
@@ -1,42 +1,54 @@
|
|
1
1
|
module MailerLite
|
2
2
|
module Clients
|
3
|
-
#
|
4
|
-
#
|
5
|
-
# You can official documentation at
|
6
|
-
# https://docs.mailerlite.com/pages/campaigns
|
3
|
+
# MailerLite Campaigns.
|
7
4
|
module Campaigns
|
8
|
-
|
9
|
-
|
5
|
+
# Create campaign where you will use your custom HTML template
|
6
|
+
#
|
7
|
+
# @see https://developers.mailerlite.com/docs/campaigns
|
8
|
+
#
|
9
|
+
# @param options [Hash] A customizable set of options.
|
10
|
+
# @option options [String] :type Type of campaign. Available values:
|
11
|
+
# regular, ab.
|
12
|
+
# @option options [String] :subject Mail subject. Required if campaign
|
13
|
+
# type is regular.
|
14
|
+
# @option options [String] :from Email of sender
|
15
|
+
# @option options [String] :from_name Name of sender
|
16
|
+
# @option options [String] :language ISO 639-1
|
17
|
+
# @option options [Array] :groups IDs of groups
|
18
|
+
# @option options [Hash] :ab_settings Required if campaign type is ab.
|
19
|
+
#
|
20
|
+
# @return [Hash] Response from API.
|
21
|
+
def create_campaign(options = {})
|
22
|
+
connection.post('campaigns', options)
|
10
23
|
end
|
11
24
|
|
12
|
-
|
13
|
-
|
25
|
+
# Upload your HTML template to created campaign
|
26
|
+
#
|
27
|
+
# @see https://developers.mailerlite.com/docs/put-custom-content-to-campaign
|
28
|
+
#
|
29
|
+
# @param id [Integer] ID of campaign
|
30
|
+
# @param options [Hash] A customizable set of options.
|
31
|
+
# @option options [String] :html HTML template source
|
32
|
+
# @option options [String] :plain Plain text of email
|
33
|
+
# @option options [Boolean] :auto_inline Defines if it is needed to
|
34
|
+
# convert available CSS to inline CSS (excluding media queries)
|
35
|
+
#
|
36
|
+
# @return [Hash] Response from API.
|
37
|
+
def update_campaign_content(id, options = {})
|
38
|
+
connection.put("campaigns/#{id}/content", options)
|
14
39
|
end
|
15
40
|
|
16
|
-
|
17
|
-
|
41
|
+
# Send, schedule or cancel campaign
|
42
|
+
#
|
43
|
+
# @see https://developers.mailerlite.com/docs/campaign-actions-and-triggers
|
44
|
+
#
|
45
|
+
# @param id [Integer] ID of campaign
|
46
|
+
# @param action [String] Action type. Possible values: send, cancel
|
47
|
+
#
|
48
|
+
# @return [Hash] Response from API.
|
49
|
+
def campaign_action(id, action)
|
50
|
+
connection.post("campaigns/#{id}/actions/#{action}")
|
18
51
|
end
|
19
|
-
|
20
|
-
def campaign_opens(id, options = {})
|
21
|
-
connection.get("campaigns/#{id}/opens/", options)
|
22
|
-
end
|
23
|
-
|
24
|
-
def campaign_clicks(id, options = {})
|
25
|
-
connection.get("campaigns/#{id}/clicks/", options)
|
26
|
-
end
|
27
|
-
|
28
|
-
def campaign_unsubscribes(id, options = {})
|
29
|
-
connection.get("campaigns/#{id}/unsubscribes/", options)
|
30
|
-
end
|
31
|
-
|
32
|
-
def campaign_bounces(id, options = {})
|
33
|
-
connection.get("campaigns/#{id}/bounces/", options)
|
34
|
-
end
|
35
|
-
|
36
|
-
def campaign_junk(id, options = {})
|
37
|
-
connection.get("campaigns/#{id}/junk/", options)
|
38
|
-
end
|
39
|
-
alias campaign_spam_complaints campaign_junk
|
40
52
|
end
|
41
53
|
end
|
42
54
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module MailerLite
|
2
|
+
module Clients
|
3
|
+
# Get information about MailerLite Fields
|
4
|
+
module Fields
|
5
|
+
# Get subscriber fields of account
|
6
|
+
#
|
7
|
+
# @see https://developers.mailerlite.com/docs/all-fields
|
8
|
+
#
|
9
|
+
# @return [Array] Response from API.
|
10
|
+
def fields
|
11
|
+
connection.get('fields')
|
12
|
+
end
|
13
|
+
|
14
|
+
# Create new custom field in account
|
15
|
+
#
|
16
|
+
# @see https://developers.mailerlite.com/docs/create-field
|
17
|
+
#
|
18
|
+
# @param options [Hash] A customizable set of options.
|
19
|
+
# @option options [String] :title Title of field
|
20
|
+
# @option options [String] :type Type of field. Available values:
|
21
|
+
# TEXT, INTEGER, DATE
|
22
|
+
#
|
23
|
+
# @return [Hash] Response from API.
|
24
|
+
def create_field(options = {})
|
25
|
+
connection.post('fields', options)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Update custom field in account
|
29
|
+
#
|
30
|
+
# @see https://developers.mailerlite.com/docs/update-field
|
31
|
+
#
|
32
|
+
# @param id [Integer] ID of field.
|
33
|
+
# @param options [Hash] A customizable set of options.
|
34
|
+
# @option options [String] :title Title of field
|
35
|
+
#
|
36
|
+
# @return [Hash] Response from API.
|
37
|
+
def update_field(id, options = {})
|
38
|
+
connection.put("fields/#{id}", options)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Remove custom field from account
|
42
|
+
#
|
43
|
+
# @see https://developers.mailerlite.com/docs/remove-field
|
44
|
+
#
|
45
|
+
# @param id [Integer] ID of field.
|
46
|
+
#
|
47
|
+
# @return [Hash] Response from API.
|
48
|
+
def delete_field(id)
|
49
|
+
connection.delete("fields/#{id}")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module MailerLite
|
2
|
+
module Clients
|
3
|
+
# Get information about MailerLite Lists.
|
4
|
+
#
|
5
|
+
# You can official documentation at
|
6
|
+
# https://developers.mailerlite.com/docs/groups
|
7
|
+
module Groups
|
8
|
+
def groups
|
9
|
+
connection.get('groups')
|
10
|
+
end
|
11
|
+
|
12
|
+
def group(id)
|
13
|
+
result = connection.get("groups/#{id}")
|
14
|
+
result.is_a?(Array) ? result[0] : result
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_group(name)
|
18
|
+
connection.post('groups', name: name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def update_group(id, options = {})
|
22
|
+
connection.put("groups/#{id}", options)
|
23
|
+
end
|
24
|
+
|
25
|
+
def delete_group(id)
|
26
|
+
connection.delete("groups/#{id}")
|
27
|
+
end
|
28
|
+
|
29
|
+
def group_subscribers(group_id, options = {})
|
30
|
+
connection.get("groups/#{group_id}/subscribers", options)
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_group_subscriber(group_id, options = {})
|
34
|
+
connection.post("groups/#{group_id}/subscribers", options)
|
35
|
+
end
|
36
|
+
|
37
|
+
def import_group_subscribers(group_id, subscribers, options = {})
|
38
|
+
options[:subscribers] = subscribers
|
39
|
+
connection.post("groups/#{group_id}/subscribers/import", options)
|
40
|
+
end
|
41
|
+
|
42
|
+
def delete_group_subscriber(group_id, subscriber_id_or_email)
|
43
|
+
connection.delete(
|
44
|
+
"groups/#{group_id}/subscribers/#{subscriber_id_or_email}"
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -2,32 +2,74 @@ module MailerLite
|
|
2
2
|
module Clients
|
3
3
|
# Get information about MailerLite Subscribers.
|
4
4
|
#
|
5
|
-
#
|
6
|
-
# https://docs.mailerlite.com/pages/subscribers
|
5
|
+
# @see https://docs.mailerlite.com/pages/subscribers
|
7
6
|
module Subscribers
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
# Get single subscriber
|
8
|
+
#
|
9
|
+
# @see https://developers.mailerlite.com/docs/single-subscriber
|
10
|
+
#
|
11
|
+
# @param identifier [Integer,String] ID or email of subscriber.
|
12
|
+
#
|
13
|
+
# @return [Hash] Response from API.
|
14
|
+
def subscriber(identifier)
|
15
|
+
connection.get("subscribers/#{identifier}")
|
12
16
|
end
|
13
17
|
|
14
|
-
|
15
|
-
|
18
|
+
# Update single subscriber
|
19
|
+
#
|
20
|
+
# @see https://developers.mailerlite.com/docs/update-subscriber
|
21
|
+
#
|
22
|
+
# @param identifier [Integer,String] ID or email of subscriber.
|
23
|
+
# @param options [Hash] A customizable set of options.
|
24
|
+
# @option options [Array] :fields Associated array where key is the same
|
25
|
+
# as field key.
|
26
|
+
# @option options [String] :type Available values: unsubscribed, active
|
27
|
+
# @option options [Boolean] :resend_autoresponders Defines if it is
|
28
|
+
# needed to resend autoresponders
|
29
|
+
#
|
30
|
+
# @return [Hash] Response from API.
|
31
|
+
def update_subscriber(identifier, options = {})
|
32
|
+
connection.put("subscribers/#{identifier}", options)
|
16
33
|
end
|
17
34
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
35
|
+
# Search for subscribers
|
36
|
+
#
|
37
|
+
# @see https://developers.mailerlite.com/docs/search-for-subscribers
|
38
|
+
#
|
39
|
+
# @param query [String] Search query
|
40
|
+
# @param options [Hash] A customizable set of options.
|
41
|
+
# @option options [Integer] :offset
|
42
|
+
# @option options [Integer] :limit
|
43
|
+
# @option options [Boolean] :minimized
|
44
|
+
#
|
45
|
+
# @return [Array] Response from API.
|
46
|
+
def search_subscribers(query, options = {})
|
47
|
+
options[:query] = query
|
48
|
+
connection.get('subscribers/search', options)
|
22
49
|
end
|
23
50
|
|
24
|
-
|
25
|
-
|
51
|
+
# Get groups subscriber belongs to
|
52
|
+
#
|
53
|
+
# @see https://developers.mailerlite.com/docs/groups-subscriber-belongs-to
|
54
|
+
#
|
55
|
+
# @param identifier [Integer,String] ID or email of subscriber.
|
56
|
+
#
|
57
|
+
# @return [Array] Response from API.
|
58
|
+
def subscriber_groups(identifier)
|
59
|
+
connection.get("subscribers/#{identifier}/groups")
|
26
60
|
end
|
27
61
|
|
28
|
-
|
29
|
-
|
62
|
+
# Get activity (clicks, opens, etc) of selected subscriber
|
63
|
+
#
|
64
|
+
# @see https://developers.mailerlite.com/docs/activity-of-single-subscriber
|
65
|
+
#
|
66
|
+
# @param identifier [Integer,String] ID or email of subscriber.
|
67
|
+
#
|
68
|
+
# @return [Array] Response from API.
|
69
|
+
def subscriber_activities(identifier)
|
70
|
+
connection.get("subscribers/#{identifier}/activity")
|
30
71
|
end
|
72
|
+
alias subscriber_activity subscriber_activities
|
31
73
|
end
|
32
74
|
end
|
33
75
|
end
|
@@ -1,20 +1,27 @@
|
|
1
1
|
module MailerLite
|
2
2
|
# A class responsible for all configurations.
|
3
3
|
class Configuration
|
4
|
-
# Default API endpoint
|
5
|
-
API_ENDPOINT = 'https://
|
4
|
+
# Default API endpoint.
|
5
|
+
API_ENDPOINT = 'https://api.mailerlite.com/api/v2'.freeze
|
6
6
|
|
7
|
-
# Default User Agent header string
|
7
|
+
# Default User Agent header string.
|
8
8
|
USER_AGENT = "MailerLite Ruby v#{MailerLite::VERSION}".freeze
|
9
9
|
|
10
10
|
attr_accessor :api_key
|
11
|
+
attr_writer :url, :user_agent
|
11
12
|
|
13
|
+
# Takes url provided from configuration or uses default one.
|
14
|
+
#
|
15
|
+
# @return [String] An API Endpoint url which will be used for connection.
|
12
16
|
def url
|
13
|
-
API_ENDPOINT
|
17
|
+
@url || API_ENDPOINT
|
14
18
|
end
|
15
19
|
|
20
|
+
# Takes user agent from configuration or uses default one.
|
21
|
+
#
|
22
|
+
# @return [String] User agent which will be used for connection headers.
|
16
23
|
def user_agent
|
17
|
-
USER_AGENT
|
24
|
+
@user_agent || USER_AGENT
|
18
25
|
end
|
19
26
|
end
|
20
27
|
end
|
@@ -4,6 +4,7 @@ require 'json'
|
|
4
4
|
|
5
5
|
require 'mailerlite/middleware/raise_error'
|
6
6
|
require 'mailerlite/middleware/underscore_keys'
|
7
|
+
require 'mailerlite/middleware/fix_unparsed_json'
|
7
8
|
|
8
9
|
module MailerLite
|
9
10
|
# A class responsible for connecting to MailerLite API and making requests.
|
@@ -18,29 +19,26 @@ module MailerLite
|
|
18
19
|
request(:get, path, options).body
|
19
20
|
end
|
20
21
|
|
21
|
-
def
|
22
|
-
request(:
|
22
|
+
def put(path, options = {})
|
23
|
+
request(:put, path, {}, options).body
|
23
24
|
end
|
24
25
|
|
25
26
|
def post(path, options = {})
|
26
|
-
|
27
|
-
|
28
|
-
response = connection.post do |req|
|
29
|
-
req.url(path)
|
30
|
-
req.headers['Content-Type'] = 'application/json'
|
31
|
-
req.body = options.to_json
|
32
|
-
end
|
27
|
+
request(:post, path, {}, options).body
|
28
|
+
end
|
33
29
|
|
34
|
-
|
30
|
+
def delete(path, options = {})
|
31
|
+
request(:delete, path, options).body
|
35
32
|
end
|
36
33
|
|
37
34
|
private
|
38
35
|
|
39
|
-
def request(method, path,
|
40
|
-
options['apiKey'] = client.config.api_key
|
41
|
-
|
36
|
+
def request(method, path, query_params = {}, body_params = {})
|
42
37
|
response = connection.send(method) do |request|
|
43
|
-
request.url(path,
|
38
|
+
request.url(path, query_params)
|
39
|
+
request.headers['Content-Type'] = 'application/json'
|
40
|
+
request.headers['X-MailerLite-ApiKey'] = client.config.api_key
|
41
|
+
request.body = body_params.to_json
|
44
42
|
end
|
45
43
|
|
46
44
|
response
|
@@ -64,6 +62,7 @@ module MailerLite
|
|
64
62
|
builder.use FaradayMiddleware::Mashify
|
65
63
|
builder.use MailerLite::Middleware::UnderscoreKeys
|
66
64
|
builder.use FaradayMiddleware::ParseJson
|
65
|
+
builder.use MailerLite::Middleware::FixUnparsedJson
|
67
66
|
builder.use MailerLite::Middleware::RaiseError
|
68
67
|
|
69
68
|
builder.adapter Faraday.default_adapter
|
data/lib/mailerlite/error.rb
CHANGED
@@ -1,20 +1,21 @@
|
|
1
1
|
module MailerLite
|
2
2
|
# Base MailerLite error.
|
3
3
|
class Error < StandardError
|
4
|
-
# Returns the appropriate MailerLite::Error sublcass based
|
5
|
-
#
|
4
|
+
# Returns the appropriate MailerLite::Error sublcass based on status and
|
5
|
+
# response message.
|
6
6
|
#
|
7
|
-
# response
|
7
|
+
# @param response [Hash] HTTP response.
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# @return [MailerLite::Error]
|
10
10
|
def self.from_response(response)
|
11
11
|
status = response[:status].to_i
|
12
12
|
|
13
13
|
klass = case status
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
when 400 then MailerLite::BadRequest
|
15
|
+
when 401 then MailerLite::Unauthorized
|
16
|
+
when 404 then MailerLite::NotFound
|
17
|
+
when 500 then MailerLite::InternalServerError
|
18
|
+
end
|
18
19
|
|
19
20
|
klass.new if klass
|
20
21
|
end
|
@@ -22,6 +23,7 @@ module MailerLite
|
|
22
23
|
|
23
24
|
# Raised when MailerLite returns a 400 HTTP status code
|
24
25
|
class BadRequest < Error
|
26
|
+
# Default error message.
|
25
27
|
def to_s
|
26
28
|
'Missing a required parameter or calling invalid method'
|
27
29
|
end
|
@@ -29,6 +31,7 @@ module MailerLite
|
|
29
31
|
|
30
32
|
# Raised when MailerLite returns a 401 HTTP status code
|
31
33
|
class Unauthorized < Error
|
34
|
+
# Default error message.
|
32
35
|
def to_s
|
33
36
|
'Invalid API key provided'
|
34
37
|
end
|
@@ -36,8 +39,17 @@ module MailerLite
|
|
36
39
|
|
37
40
|
# Raised when MailerLite returns a 404 HTTP status code
|
38
41
|
class NotFound < Error
|
42
|
+
# Default error message.
|
39
43
|
def to_s
|
40
44
|
"Can't find requested items"
|
41
45
|
end
|
42
46
|
end
|
47
|
+
|
48
|
+
# Raised when MailerLite returns a 500 HTTP status code
|
49
|
+
class InternalServerError < Error
|
50
|
+
# Default error message.
|
51
|
+
def to_s
|
52
|
+
'The server encountered an unexpected condition'
|
53
|
+
end
|
54
|
+
end
|
43
55
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module MailerLite
|
2
|
+
module Middleware
|
3
|
+
# This middleware will convert empty response to {}
|
4
|
+
class FixUnparsedJson < Faraday::Response::Middleware
|
5
|
+
private
|
6
|
+
|
7
|
+
def on_complete(response)
|
8
|
+
response[:body] = {} if response[:body] == ''
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/lib/mailerlite/version.rb
CHANGED
data/mailerlite.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailerlite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justas Palumickas
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -80,20 +80,6 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '10.0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rspec
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '3.4'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '3.4'
|
97
83
|
description: Ruby gem for MailerLite API
|
98
84
|
email:
|
99
85
|
- jpalumickas@gmail.com
|
@@ -102,7 +88,9 @@ extensions: []
|
|
102
88
|
extra_rdoc_files: []
|
103
89
|
files:
|
104
90
|
- ".gitignore"
|
91
|
+
- ".hound.yml"
|
105
92
|
- ".rspec"
|
93
|
+
- ".rubocop.yml"
|
106
94
|
- ".travis.yml"
|
107
95
|
- CONTRIBUTING.md
|
108
96
|
- Gemfile
|
@@ -112,16 +100,17 @@ files:
|
|
112
100
|
- bin/console
|
113
101
|
- bin/setup
|
114
102
|
- examples/authentication.md
|
115
|
-
- examples/campaigns.md
|
116
103
|
- lib/mailerlite.rb
|
117
104
|
- lib/mailerlite/client.rb
|
118
105
|
- lib/mailerlite/clients/campaigns.rb
|
119
|
-
- lib/mailerlite/clients/
|
106
|
+
- lib/mailerlite/clients/fields.rb
|
107
|
+
- lib/mailerlite/clients/groups.rb
|
120
108
|
- lib/mailerlite/clients/subscribers.rb
|
121
109
|
- lib/mailerlite/configuration.rb
|
122
110
|
- lib/mailerlite/connection.rb
|
123
111
|
- lib/mailerlite/core_ext/string.rb
|
124
112
|
- lib/mailerlite/error.rb
|
113
|
+
- lib/mailerlite/middleware/fix_unparsed_json.rb
|
125
114
|
- lib/mailerlite/middleware/raise_error.rb
|
126
115
|
- lib/mailerlite/middleware/underscore_keys.rb
|
127
116
|
- lib/mailerlite/version.rb
|
@@ -146,7 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
135
|
version: '0'
|
147
136
|
requirements: []
|
148
137
|
rubyforge_project:
|
149
|
-
rubygems_version: 2.
|
138
|
+
rubygems_version: 2.5.1
|
150
139
|
signing_key:
|
151
140
|
specification_version: 4
|
152
141
|
summary: Ruby wrapper for MailerLite API
|
data/examples/campaigns.md
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
# Campaigns
|
2
|
-
|
3
|
-
## Get all campaigns
|
4
|
-
|
5
|
-
Returns all campaigns you have in your account.
|
6
|
-
Also basic summary for each campaign including the ID.
|
7
|
-
|
8
|
-
#### Example:
|
9
|
-
|
10
|
-
```ruby
|
11
|
-
client.campaigns
|
12
|
-
```
|
13
|
-
|
14
|
-
You can specify **limit** and **page** options:
|
15
|
-
|
16
|
-
```ruby
|
17
|
-
client.campaings(limit: 200, page: 2)
|
18
|
-
```
|
19
|
-
|
20
|
-
## Campaign details
|
21
|
-
|
22
|
-
Retrieve stats about selected campaign with specified ID.
|
23
|
-
|
24
|
-
#### Example:
|
25
|
-
|
26
|
-
```ruby
|
27
|
-
campaign_id = 123
|
28
|
-
client.campaign(campaign_id)
|
29
|
-
```
|
30
|
-
|
31
|
-
## Campaign recipients
|
32
|
-
|
33
|
-
Retrieves a paged result representing all the subscribers that a given campaign was sent to.
|
34
|
-
|
35
|
-
#### Example:
|
36
|
-
|
37
|
-
```ruby
|
38
|
-
client.campaign_recipients(123)
|
39
|
-
```
|
40
|
-
|
41
|
-
You can specify **limit** and **page** options:
|
42
|
-
|
43
|
-
```ruby
|
44
|
-
client.campaing_recipients(123, limit: 200, page: 2)
|
45
|
-
```
|
46
|
-
|
47
|
-
|
48
|
-
## Campaign opens
|
49
|
-
|
50
|
-
Retrieves a paged result representing all the subscribers that opened a given campaign.
|
51
|
-
|
52
|
-
#### Example:
|
53
|
-
|
54
|
-
```ruby
|
55
|
-
client.campaign_opens(123)
|
56
|
-
```
|
57
|
-
|
58
|
-
You can specify **limit** and **page** options:
|
59
|
-
|
60
|
-
```ruby
|
61
|
-
client.campaing_opens(123, limit: 200, page: 2)
|
62
|
-
```
|
@@ -1,41 +0,0 @@
|
|
1
|
-
module MailerLite
|
2
|
-
module Clients
|
3
|
-
# Get information about MailerLite Lists.
|
4
|
-
#
|
5
|
-
# You can official documentation at
|
6
|
-
# https://docs.mailerlite.com/pages/lists
|
7
|
-
module Lists
|
8
|
-
def lists(options = {})
|
9
|
-
connection.get('lists/', options)
|
10
|
-
end
|
11
|
-
|
12
|
-
def list(id)
|
13
|
-
connection.get("lists/#{id}/")
|
14
|
-
end
|
15
|
-
|
16
|
-
def create_list(name)
|
17
|
-
connection.post('lists/', name: name)
|
18
|
-
end
|
19
|
-
|
20
|
-
def update_list(id, name)
|
21
|
-
connection.post("lists/#{id}/", name: name)
|
22
|
-
end
|
23
|
-
|
24
|
-
def delete_list(id)
|
25
|
-
connection.delete("lists/#{id}/")
|
26
|
-
end
|
27
|
-
|
28
|
-
def list_active_subscribers(id, options = {})
|
29
|
-
connection.get("lists/#{id}/active/", options)
|
30
|
-
end
|
31
|
-
|
32
|
-
def list_unsubscribed_subscribers(id, options = {})
|
33
|
-
connection.get("lists/#{id}/unsubscribed/", options)
|
34
|
-
end
|
35
|
-
|
36
|
-
def list_bounced_subscribers(id, options = {})
|
37
|
-
connection.get("lists/#{id}/bounced/", options)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|