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.
@@ -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: []