mandrill-api-rb 1.0.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/lib/mandrill/api.rb +2055 -0
- data/lib/mandrill/errors.rb +63 -0
- data/lib/mandrill.rb +148 -0
- metadata +78 -0
@@ -0,0 +1,63 @@
|
|
1
|
+
module Mandrill
|
2
|
+
class Error < Exception
|
3
|
+
end
|
4
|
+
class ValidationError < Error
|
5
|
+
end
|
6
|
+
class InvalidKeyError < Error
|
7
|
+
end
|
8
|
+
class PaymentRequiredError < Error
|
9
|
+
end
|
10
|
+
class UnknownSubaccountError < Error
|
11
|
+
end
|
12
|
+
class UnknownTemplateError < Error
|
13
|
+
end
|
14
|
+
class ServiceUnavailableError < Error
|
15
|
+
end
|
16
|
+
class UnknownMessageError < Error
|
17
|
+
end
|
18
|
+
class InvalidTagNameError < Error
|
19
|
+
end
|
20
|
+
class InvalidRejectError < Error
|
21
|
+
end
|
22
|
+
class UnknownSenderError < Error
|
23
|
+
end
|
24
|
+
class UnknownUrlError < Error
|
25
|
+
end
|
26
|
+
class UnknownTrackingDomainError < Error
|
27
|
+
end
|
28
|
+
class InvalidTemplateError < Error
|
29
|
+
end
|
30
|
+
class UnknownWebhookError < Error
|
31
|
+
end
|
32
|
+
class UnknownInboundDomainError < Error
|
33
|
+
end
|
34
|
+
class UnknownInboundRouteError < Error
|
35
|
+
end
|
36
|
+
class UnknownExportError < Error
|
37
|
+
end
|
38
|
+
class IPProvisionLimitError < Error
|
39
|
+
end
|
40
|
+
class UnknownPoolError < Error
|
41
|
+
end
|
42
|
+
class NoSendingHistoryError < Error
|
43
|
+
end
|
44
|
+
class PoorReputationError < Error
|
45
|
+
end
|
46
|
+
class UnknownIPError < Error
|
47
|
+
end
|
48
|
+
class InvalidEmptyDefaultPoolError < Error
|
49
|
+
end
|
50
|
+
class InvalidDeleteDefaultPoolError < Error
|
51
|
+
end
|
52
|
+
class InvalidDeleteNonEmptyPoolError < Error
|
53
|
+
end
|
54
|
+
class InvalidCustomDNSError < Error
|
55
|
+
end
|
56
|
+
class InvalidCustomDNSPendingError < Error
|
57
|
+
end
|
58
|
+
class MetadataFieldLimitError < Error
|
59
|
+
end
|
60
|
+
class UnknownMetadataFieldError < Error
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
data/lib/mandrill.rb
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'excon'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
require 'mandrill/errors'
|
6
|
+
require 'mandrill/api'
|
7
|
+
|
8
|
+
module Mandrill
|
9
|
+
class API
|
10
|
+
|
11
|
+
attr_accessor :host, :path, :apikey, :debug, :session
|
12
|
+
|
13
|
+
def initialize(apikey=nil, debug=false)
|
14
|
+
@host = 'https://mandrillapp.com'
|
15
|
+
@path = '/api/1.0/'
|
16
|
+
|
17
|
+
@session = Excon.new @host
|
18
|
+
@debug = debug
|
19
|
+
|
20
|
+
if not apikey
|
21
|
+
if ENV['MANDRILL_APIKEY']
|
22
|
+
apikey = ENV['MANDRILL_APIKEY']
|
23
|
+
else
|
24
|
+
apikey = read_configs
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
raise Error, 'You must provide a Mandrill API key' if not apikey
|
29
|
+
@apikey = apikey
|
30
|
+
end
|
31
|
+
|
32
|
+
def call(url, params={})
|
33
|
+
params[:key] = @apikey
|
34
|
+
params = JSON.generate(params)
|
35
|
+
r = @session.post(:path => "#{@path}#{url}.json", :headers => {'Content-Type' => 'application/json'}, :body => params)
|
36
|
+
|
37
|
+
cast_error(r.body) if r.status != 200
|
38
|
+
return JSON.parse(r.body)
|
39
|
+
end
|
40
|
+
|
41
|
+
def read_configs()
|
42
|
+
[File.expand_path('~/.mandrill.key'), '/etc/mandrill.key'].delete_if{ |p| not File.exist? p}.each do |path|
|
43
|
+
f = File.new path
|
44
|
+
apikey = f.read.strip
|
45
|
+
f.close
|
46
|
+
return apikey if apikey != ''
|
47
|
+
end
|
48
|
+
|
49
|
+
return nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def cast_error(body)
|
53
|
+
|
54
|
+
error_map = {
|
55
|
+
'ValidationError' => ValidationError,
|
56
|
+
'Invalid_Key' => InvalidKeyError,
|
57
|
+
'PaymentRequired' => PaymentRequiredError,
|
58
|
+
'Unknown_Subaccount' => UnknownSubaccountError,
|
59
|
+
'Unknown_Template' => UnknownTemplateError,
|
60
|
+
'ServiceUnavailable' => ServiceUnavailableError,
|
61
|
+
'Unknown_Message' => UnknownMessageError,
|
62
|
+
'Invalid_Tag_Name' => InvalidTagNameError,
|
63
|
+
'Invalid_Reject' => InvalidRejectError,
|
64
|
+
'Unknown_Sender' => UnknownSenderError,
|
65
|
+
'Unknown_Url' => UnknownUrlError,
|
66
|
+
'Unknown_TrackingDomain' => UnknownTrackingDomainError,
|
67
|
+
'Invalid_Template' => InvalidTemplateError,
|
68
|
+
'Unknown_Webhook' => UnknownWebhookError,
|
69
|
+
'Unknown_InboundDomain' => UnknownInboundDomainError,
|
70
|
+
'Unknown_InboundRoute' => UnknownInboundRouteError,
|
71
|
+
'Unknown_Export' => UnknownExportError,
|
72
|
+
'IP_ProvisionLimit' => IPProvisionLimitError,
|
73
|
+
'Unknown_Pool' => UnknownPoolError,
|
74
|
+
'NoSendingHistory' => NoSendingHistoryError,
|
75
|
+
'PoorReputation' => PoorReputationError,
|
76
|
+
'Unknown_IP' => UnknownIPError,
|
77
|
+
'Invalid_EmptyDefaultPool' => InvalidEmptyDefaultPoolError,
|
78
|
+
'Invalid_DeleteDefaultPool' => InvalidDeleteDefaultPoolError,
|
79
|
+
'Invalid_DeleteNonEmptyPool' => InvalidDeleteNonEmptyPoolError,
|
80
|
+
'Invalid_CustomDNS' => InvalidCustomDNSError,
|
81
|
+
'Invalid_CustomDNSPending' => InvalidCustomDNSPendingError,
|
82
|
+
'Metadata_FieldLimit' => MetadataFieldLimitError,
|
83
|
+
'Unknown_MetadataField' => UnknownMetadataFieldError
|
84
|
+
}
|
85
|
+
|
86
|
+
begin
|
87
|
+
error_info = JSON.parse(body)
|
88
|
+
if error_info['status'] != 'error' or not error_info['name']
|
89
|
+
raise Error, "We received an unexpected error: #{body}"
|
90
|
+
end
|
91
|
+
if error_map[error_info['name']]
|
92
|
+
raise error_map[error_info['name']], error_info['message']
|
93
|
+
else
|
94
|
+
raise Error, error_info['message']
|
95
|
+
end
|
96
|
+
rescue JSON::ParserError
|
97
|
+
raise Error, "We received an unexpected error: #{body}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def templates()
|
102
|
+
Templates.new self
|
103
|
+
end
|
104
|
+
def exports()
|
105
|
+
Exports.new self
|
106
|
+
end
|
107
|
+
def users()
|
108
|
+
Users.new self
|
109
|
+
end
|
110
|
+
def rejects()
|
111
|
+
Rejects.new self
|
112
|
+
end
|
113
|
+
def inbound()
|
114
|
+
Inbound.new self
|
115
|
+
end
|
116
|
+
def tags()
|
117
|
+
Tags.new self
|
118
|
+
end
|
119
|
+
def messages()
|
120
|
+
Messages.new self
|
121
|
+
end
|
122
|
+
def whitelists()
|
123
|
+
Whitelists.new self
|
124
|
+
end
|
125
|
+
def ips()
|
126
|
+
Ips.new self
|
127
|
+
end
|
128
|
+
def internal()
|
129
|
+
Internal.new self
|
130
|
+
end
|
131
|
+
def subaccounts()
|
132
|
+
Subaccounts.new self
|
133
|
+
end
|
134
|
+
def urls()
|
135
|
+
Urls.new self
|
136
|
+
end
|
137
|
+
def webhooks()
|
138
|
+
Webhooks.new self
|
139
|
+
end
|
140
|
+
def senders()
|
141
|
+
Senders.new self
|
142
|
+
end
|
143
|
+
def metadata()
|
144
|
+
Metadata.new self
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mandrill-api-rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mandrill Devs
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-08-24 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.7.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.7.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: excon
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.16.0
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '1.0'
|
37
|
+
type: :runtime
|
38
|
+
prerelease: false
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.16.0
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.0'
|
47
|
+
description: A Ruby API library for the Mandrill email as a service platform.
|
48
|
+
email: community@mandrill.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- lib/mandrill.rb
|
54
|
+
- lib/mandrill/api.rb
|
55
|
+
- lib/mandrill/errors.rb
|
56
|
+
homepage: https://github.com/gajendrajena/mandrill-api-rb/
|
57
|
+
licenses: []
|
58
|
+
metadata: {}
|
59
|
+
post_install_message:
|
60
|
+
rdoc_options: []
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
requirements: []
|
74
|
+
rubygems_version: 3.1.6
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: A Ruby API library for the Mandrill email as a service platform.
|
78
|
+
test_files: []
|