mandrill-api 1.0.2

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.
data/lib/mandrill.rb ADDED
@@ -0,0 +1,107 @@
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
+ 'Unknown_Template' => UnknownTemplateError,
58
+ 'Invalid_Tag_Name' => InvalidTagNameError,
59
+ 'Invalid_Reject' => InvalidRejectError,
60
+ 'Unknown_Sender' => UnknownSenderError,
61
+ 'Unknown_Url' => UnknownUrlError,
62
+ 'Invalid_Template' => InvalidTemplateError,
63
+ 'Unknown_Webhook' => UnknownWebhookError
64
+ }
65
+
66
+ begin
67
+ error_info = JSON.parse(body)
68
+ if error_info['status'] != 'error' or not error_info['name']:
69
+ raise Error, "We received an unexpected error: #{body}"
70
+ end
71
+ if error_map[error_info['name']]
72
+ raise error_map[error_info['name']], error_info['message']
73
+ else
74
+ raise Error, error_info['message']
75
+ end
76
+ rescue JSON::ParserError
77
+ raise Error, "We received an unexpected error: #{body}"
78
+ end
79
+ end
80
+
81
+ def templates()
82
+ Templates.new self
83
+ end
84
+ def users()
85
+ Users.new self
86
+ end
87
+ def rejects()
88
+ Rejects.new self
89
+ end
90
+ def tags()
91
+ Tags.new self
92
+ end
93
+ def messages()
94
+ Messages.new self
95
+ end
96
+ def urls()
97
+ Urls.new self
98
+ end
99
+ def webhooks()
100
+ Webhooks.new self
101
+ end
102
+ def senders()
103
+ Senders.new self
104
+ end
105
+ end
106
+ end
107
+
@@ -0,0 +1,204 @@
1
+ module Mandrill
2
+
3
+ class Templates
4
+ attr_accessor :master
5
+
6
+ def initialize(master)
7
+ @master = master
8
+ end
9
+
10
+ def add(name, code, publish=true)
11
+ _params = {:name => name, :code => code, :publish => publish}
12
+ return @master.call 'templates/add', _params
13
+ end
14
+ def info(name)
15
+ _params = {:name => name}
16
+ return @master.call 'templates/info', _params
17
+ end
18
+ def update(name, code, publish=true)
19
+ _params = {:name => name, :code => code, :publish => publish}
20
+ return @master.call 'templates/update', _params
21
+ end
22
+ def publish(name)
23
+ _params = {:name => name}
24
+ return @master.call 'templates/publish', _params
25
+ end
26
+ def delete(name)
27
+ _params = {:name => name}
28
+ return @master.call 'templates/delete', _params
29
+ end
30
+ def list()
31
+ _params = {}
32
+ return @master.call 'templates/list', _params
33
+ end
34
+ def time_series(name)
35
+ _params = {:name => name}
36
+ return @master.call 'templates/time-series', _params
37
+ end
38
+ def render(template_name, template_content, merge_vars=nil)
39
+ _params = {:template_name => template_name, :template_content => template_content, :merge_vars => merge_vars}
40
+ return @master.call 'templates/render', _params
41
+ end
42
+ end
43
+ class Users
44
+ attr_accessor :master
45
+
46
+ def initialize(master)
47
+ @master = master
48
+ end
49
+
50
+ def info()
51
+ _params = {}
52
+ return @master.call 'users/info', _params
53
+ end
54
+ def ping()
55
+ _params = {}
56
+ return @master.call 'users/ping2', _params
57
+ end
58
+ def senders()
59
+ _params = {}
60
+ return @master.call 'users/senders', _params
61
+ end
62
+ end
63
+ class Rejects
64
+ attr_accessor :master
65
+
66
+ def initialize(master)
67
+ @master = master
68
+ end
69
+
70
+ def list(email=nil)
71
+ _params = {:email => email}
72
+ return @master.call 'rejects/list', _params
73
+ end
74
+ def delete(email)
75
+ _params = {:email => email}
76
+ return @master.call 'rejects/delete', _params
77
+ end
78
+ end
79
+ class Tags
80
+ attr_accessor :master
81
+
82
+ def initialize(master)
83
+ @master = master
84
+ end
85
+
86
+ def list()
87
+ _params = {}
88
+ return @master.call 'tags/list', _params
89
+ end
90
+ def info(tag)
91
+ _params = {:tag => tag}
92
+ return @master.call 'tags/info', _params
93
+ end
94
+ def time_series(tag)
95
+ _params = {:tag => tag}
96
+ return @master.call 'tags/time-series', _params
97
+ end
98
+ def all_time_series()
99
+ _params = {}
100
+ return @master.call 'tags/all-time-series', _params
101
+ end
102
+ end
103
+ class Messages
104
+ attr_accessor :master
105
+
106
+ def initialize(master)
107
+ @master = master
108
+ end
109
+
110
+ def send(message)
111
+ _params = {:message => message}
112
+ return @master.call 'messages/send', _params
113
+ end
114
+ def send_template(template_name, template_content, message)
115
+ _params = {:template_name => template_name, :template_content => template_content, :message => message}
116
+ return @master.call 'messages/send-template', _params
117
+ end
118
+ def search(query='*', date_from=nil, date_to=nil, tags=nil, senders=nil, limit=100)
119
+ _params = {:query => query, :date_from => date_from, :date_to => date_to, :tags => tags, :senders => senders, :limit => limit}
120
+ return @master.call 'messages/search', _params
121
+ end
122
+ def parse(raw_message)
123
+ _params = {:raw_message => raw_message}
124
+ return @master.call 'messages/parse', _params
125
+ end
126
+ def send_raw(raw_message, from_email=nil, from_name=nil, to=nil)
127
+ _params = {:raw_message => raw_message, :from_email => from_email, :from_name => from_name, :to => to}
128
+ return @master.call 'messages/send-raw', _params
129
+ end
130
+ end
131
+ class Urls
132
+ attr_accessor :master
133
+
134
+ def initialize(master)
135
+ @master = master
136
+ end
137
+
138
+ def list()
139
+ _params = {}
140
+ return @master.call 'urls/list', _params
141
+ end
142
+ def search(q)
143
+ _params = {:q => q}
144
+ return @master.call 'urls/search', _params
145
+ end
146
+ def time_series(url)
147
+ _params = {:url => url}
148
+ return @master.call 'urls/time-series', _params
149
+ end
150
+ end
151
+ class Webhooks
152
+ attr_accessor :master
153
+
154
+ def initialize(master)
155
+ @master = master
156
+ end
157
+
158
+ def list()
159
+ _params = {}
160
+ return @master.call 'webhooks/list', _params
161
+ end
162
+ def add(url, events=[])
163
+ _params = {:url => url, :events => events}
164
+ return @master.call 'webhooks/add', _params
165
+ end
166
+ def info(id)
167
+ _params = {:id => id}
168
+ return @master.call 'webhooks/info', _params
169
+ end
170
+ def update(id, url, events=[])
171
+ _params = {:id => id, :url => url, :events => events}
172
+ return @master.call 'webhooks/update', _params
173
+ end
174
+ def delete(id)
175
+ _params = {:id => id}
176
+ return @master.call 'webhooks/delete', _params
177
+ end
178
+ end
179
+ class Senders
180
+ attr_accessor :master
181
+
182
+ def initialize(master)
183
+ @master = master
184
+ end
185
+
186
+ def list()
187
+ _params = {}
188
+ return @master.call 'senders/list', _params
189
+ end
190
+ def domains()
191
+ _params = {}
192
+ return @master.call 'senders/domains', _params
193
+ end
194
+ def info(address)
195
+ _params = {:address => address}
196
+ return @master.call 'senders/info', _params
197
+ end
198
+ def time_series(address)
199
+ _params = {:address => address}
200
+ return @master.call 'senders/time-series', _params
201
+ end
202
+ end
203
+ end
204
+
@@ -0,0 +1,23 @@
1
+ module Mandrill
2
+ class Error < Exception
3
+ end
4
+ class ValidationError < Error
5
+ end
6
+ class InvalidKeyError < Error
7
+ end
8
+ class UnknownTemplateError < Error
9
+ end
10
+ class InvalidTagNameError < Error
11
+ end
12
+ class InvalidRejectError < Error
13
+ end
14
+ class UnknownSenderError < Error
15
+ end
16
+ class UnknownUrlError < Error
17
+ end
18
+ class InvalidTemplateError < Error
19
+ end
20
+ class UnknownWebhookError < Error
21
+ end
22
+ end
23
+
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mandrill-api
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 2
10
+ version: 1.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Mandrill Devs
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-07-31 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: json
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 1
31
+ - 7
32
+ - 4
33
+ version: 1.7.4
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: excon
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 43
45
+ segments:
46
+ - 0
47
+ - 15
48
+ - 4
49
+ version: 0.15.4
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ description: A Ruby API library for the Mandrill email as a service platform.
53
+ email: community@mandrill.com
54
+ executables: []
55
+
56
+ extensions: []
57
+
58
+ extra_rdoc_files: []
59
+
60
+ files:
61
+ - lib/mandrill.rb
62
+ - lib/mandrill/api.rb
63
+ - lib/mandrill/errors.rb
64
+ homepage: https://bitbucket.org/mailchimp/mandrill-api-ruby/
65
+ licenses: []
66
+
67
+ post_install_message:
68
+ rdoc_options: []
69
+
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ hash: 3
78
+ segments:
79
+ - 0
80
+ version: "0"
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project:
93
+ rubygems_version: 1.8.24
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: A Ruby API library for the Mandrill email as a service platform.
97
+ test_files: []
98
+