postageapp 1.3.1 → 1.4.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 +5 -5
- data/.gitignore +6 -0
- data/.travis.yml +9 -40
- data/LICENSE.md +1 -1
- data/README.md +117 -13
- data/Rakefile +15 -4
- data/VERSION +1 -0
- data/app/ingresses/action_mailbox/ingresses/postage_app.rb +2 -0
- data/app/ingresses/action_mailbox/ingresses/postage_app/inbound_emails_controller.rb +50 -0
- data/config/routes.rb +6 -0
- data/exe/postageapp +37 -0
- data/lib/generators/postageapp/postageapp_generator.rb +9 -6
- data/lib/postageapp.rb +53 -35
- data/lib/postageapp/cli.rb +14 -0
- data/lib/postageapp/cli/command.rb +110 -0
- data/lib/postageapp/cli/command/config.rb +74 -0
- data/lib/postageapp/cli/command/create_mailbox.rb +21 -0
- data/lib/postageapp/cli/command/env.rb +58 -0
- data/lib/postageapp/cli/command/get_project_info.rb +3 -0
- data/lib/postageapp/configuration.rb +237 -74
- data/lib/postageapp/engine.rb +9 -0
- data/lib/postageapp/env.rb +9 -0
- data/lib/postageapp/mailer.rb +1 -11
- data/lib/postageapp/mailer/mailer_4.rb +30 -14
- data/lib/postageapp/rails/railtie.rb +1 -3
- data/lib/postageapp/request.rb +6 -1
- data/log/.gitignore +1 -0
- data/postageapp.gemspec +8 -10
- data/script/with +2 -2
- data/test/gemfiles/Gemfile.rails-2.3.x +1 -1
- data/test/gemfiles/Gemfile.rails-3.0.x +1 -1
- data/test/gemfiles/Gemfile.rails-3.1.x +1 -1
- data/test/gemfiles/Gemfile.rails-3.2.x +1 -1
- data/test/gemfiles/Gemfile.rails-4.0.x +1 -1
- data/test/gemfiles/Gemfile.rails-4.1.x +1 -1
- data/test/gemfiles/Gemfile.rails-4.2.x +1 -2
- data/test/gemfiles/Gemfile.rails-5.0.x +2 -3
- data/test/gemfiles/Gemfile.rails-5.2.x +12 -0
- data/test/gemfiles/Gemfile.rails-6.0.x +12 -0
- data/test/gemfiles/Gemfile.rails-6.1.x +12 -0
- data/test/gemfiles/Gemfile.ruby +2 -3
- data/test/helper.rb +3 -3
- data/test/log/.gitignore +1 -0
- data/test/mailer/action_mailer_3/notifier.rb +1 -1
- data/test/tmp/.gitignore +1 -0
- data/test/travis_test.rb +58 -40
- data/test/{configuration_test.rb → unit/configuration_test.rb} +5 -3
- data/test/{failed_request_test.rb → unit/failed_request_test.rb} +6 -6
- data/test/{live_test.rb → unit/live_test.rb} +1 -36
- data/test/{mail_delivery_method_test.rb → unit/mail_delivery_method_test.rb} +1 -1
- data/test/{mailer_4_test.rb → unit/mailer_4_test.rb} +2 -2
- data/test/{mailer_helper_methods_test.rb → unit/mailer_helper_methods_test.rb} +4 -4
- data/test/{postageapp_test.rb → unit/postageapp_test.rb} +7 -1
- data/test/{rails_initialization_test.rb → unit/rails_initialization_test.rb} +2 -2
- data/test/{request_test.rb → unit/request_test.rb} +15 -15
- data/test/{response_test.rb → unit/response_test.rb} +4 -4
- data/test/unit/tmp/.gitignore +1 -0
- data/tmp/.gitignore +1 -0
- metadata +40 -46
- data/lib/postageapp/mailer/mailer_2.rb +0 -140
- data/lib/postageapp/mailer/mailer_3.rb +0 -190
- data/lib/postageapp/version.rb +0 -3
- data/test/mailer/action_mailer_2/notifier.rb +0 -77
- data/test/mailer/action_mailer_2/notifier/with_body_and_attachment.erb +0 -1
- data/test/mailer/action_mailer_2/notifier/with_custom_postage_variables.text.html.erb +0 -1
- data/test/mailer/action_mailer_2/notifier/with_custom_postage_variables.text.plain.erb +0 -1
- data/test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.html.erb +0 -1
- data/test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.plain.erb +0 -1
- data/test/mailer/action_mailer_2/notifier/with_simple_view.erb +0 -1
- data/test/mailer/action_mailer_2/notifier/with_text_only_view.text.plain.erb +0 -1
- data/test/mailer_2_test.rb +0 -95
- data/test/mailer_3_test.rb +0 -118
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b142c061512b3ef0ff5d1d18d436de9796b772793e6ed10d1267d506c0577d54
|
4
|
+
data.tar.gz: 1f028542353d6cb55ca037f431a68ee1f2820833cc7bce8b5b5fd72f46345365
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 615475381e51dfbdb59e6966381e9c09f95c76e2d625c3983c5fbe7955765f42e85ecd76e3e4a2249bd55638ab70a3bd5153e7715fcf6ed2b0607e108ead503e
|
7
|
+
data.tar.gz: 295a8585e182f43e92447188eed75af8f447083d7c0186076a2f425eed22f86a36d7788974095f49ab0a4807191c4d743113d6c25eaa5efe1b65f70cf1aefa28
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -3,46 +3,15 @@ before_install: "WITH_VERBOSE=1 script/with current bootstrap"
|
|
3
3
|
install: "WITH_VERBOSE=1 script/with current bundle install"
|
4
4
|
script: "WITH_VERBOSE=1 script/with current bundle exec rake test"
|
5
5
|
rvm:
|
6
|
-
-
|
7
|
-
- 2.
|
8
|
-
- 2.
|
9
|
-
-
|
10
|
-
-
|
11
|
-
- 2.
|
12
|
-
- jruby-9.1.2.0
|
6
|
+
- 2.5.9
|
7
|
+
- 2.6.7
|
8
|
+
- 2.7.3
|
9
|
+
- 3.0.1
|
10
|
+
- jruby-9.1.17.0
|
11
|
+
- jruby-9.2.17.0
|
13
12
|
gemfile:
|
14
13
|
- test/gemfiles/Gemfile.ruby
|
15
|
-
- test/gemfiles/Gemfile.rails-2.3.x
|
16
|
-
- test/gemfiles/Gemfile.rails-3.0.x
|
17
|
-
- test/gemfiles/Gemfile.rails-3.1.x
|
18
|
-
- test/gemfiles/Gemfile.rails-3.2.x
|
19
|
-
- test/gemfiles/Gemfile.rails-4.0.x
|
20
|
-
- test/gemfiles/Gemfile.rails-4.1.x
|
21
|
-
- test/gemfiles/Gemfile.rails-4.2.x
|
22
14
|
- test/gemfiles/Gemfile.rails-5.0.x
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
gemfile: test/gemfiles/Gemfile.rails-2.3.x
|
27
|
-
- rvm: 2.0.0-p648
|
28
|
-
gemfile: test/gemfiles/Gemfile.rails-2.3.x
|
29
|
-
- rvm: 2.1.10
|
30
|
-
gemfile: test/gemfiles/Gemfile.rails-2.3.x
|
31
|
-
- rvm: 2.2.5
|
32
|
-
gemfile: test/gemfiles/Gemfile.rails-2.3.x
|
33
|
-
- rvm: 2.3.1
|
34
|
-
gemfile: test/gemfiles/Gemfile.rails-2.3.x
|
35
|
-
- rvm: jruby-9.1.2.0
|
36
|
-
gemfile: test/gemfiles/Gemfile.rails-2.3.x
|
37
|
-
- rvm: 1.9.3-p551
|
38
|
-
gemfile: test/gemfiles/Gemfile.rails-4.0.x
|
39
|
-
- rvm: 1.9.3-p551
|
40
|
-
gemfile: test/gemfiles/Gemfile.rails-4.1.x
|
41
|
-
- rvm: 1.9.3-p551
|
42
|
-
gemfile: test/gemfiles/Gemfile.rails-4.2.x
|
43
|
-
- rvm: 1.9.3-p551
|
44
|
-
gemfile: test/gemfiles/Gemfile.rails-5.0.x
|
45
|
-
- rvm: 2.0.0-p648
|
46
|
-
gemfile: test/gemfiles/Gemfile.rails-5.0.x
|
47
|
-
- rvm: 2.1.10
|
48
|
-
gemfile: test/gemfiles/Gemfile.rails-5.0.x
|
15
|
+
- test/gemfiles/Gemfile.rails-5.2.x
|
16
|
+
- test/gemfiles/Gemfile.rails-6.0.x
|
17
|
+
- test/gemfiles/Gemfile.rails-6.1.x
|
data/LICENSE.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2011-
|
1
|
+
Copyright (c) 2011-2019 Scott Tadman, Oleg Khabarov, PostageApp Ltd.
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
data/README.md
CHANGED
@@ -1,13 +1,35 @@
|
|
1
|
-
# [PostageApp](
|
1
|
+
# [PostageApp](https://postageapp.com/) Ruby Gem [](http://travis-ci.org/postageapp/postageapp-ruby)
|
2
2
|
|
3
|
-
This gem is used to integrate Ruby apps with [PostageApp](
|
3
|
+
This gem is used to integrate Ruby apps with [PostageApp](https://postageapp.com/)
|
4
4
|
service. Personalized high-volume email sending can be offloaded to PostageApp
|
5
|
-
via a simple [JSON-based API](
|
5
|
+
via a simple [JSON-based API](https://dev.postageapp.com/api).
|
6
6
|
|
7
|
-
### [API Documentation](
|
7
|
+
### [API Documentation](https://dev.postageapp.com/api/)
|
8
8
|
|
9
9
|
# Installation
|
10
10
|
|
11
|
+
## Rails 5.2 and newer
|
12
|
+
|
13
|
+
Add the `postageapp` gem to your Gemfile:
|
14
|
+
|
15
|
+
gem 'postageapp'
|
16
|
+
|
17
|
+
Then from the Rails project's root run:
|
18
|
+
|
19
|
+
bundle install
|
20
|
+
|
21
|
+
For authentication, add your project's PostageApp credentials to the
|
22
|
+
Rails Encrypted Credentials:
|
23
|
+
|
24
|
+
rails credentials:edit
|
25
|
+
|
26
|
+
The format of this entry should be:
|
27
|
+
|
28
|
+
postageapp:
|
29
|
+
api_key: __PROJECT_API_KEY__
|
30
|
+
|
31
|
+
Where that will be picked up by the plugin when Rails starts.
|
32
|
+
|
11
33
|
## Rails 4.x and newer
|
12
34
|
|
13
35
|
Add the `postageapp` gem to your Gemfile:
|
@@ -26,9 +48,13 @@ Then from the Rails project's root run:
|
|
26
48
|
|
27
49
|
## Sinatra / Rack / Others
|
28
50
|
|
29
|
-
|
51
|
+
Add the `postageapp` gem to your Gemfile:
|
52
|
+
|
53
|
+
gem 'postageapp'
|
54
|
+
|
55
|
+
Then from the project's root run:
|
30
56
|
|
31
|
-
|
57
|
+
bundle install
|
32
58
|
|
33
59
|
The configuration will need to be loaded before executing any API calls:
|
34
60
|
|
@@ -46,7 +72,7 @@ with the appropriate API key will also work.
|
|
46
72
|
# Usage
|
47
73
|
|
48
74
|
Here's an example of sending a message using the
|
49
|
-
[`send_message`](
|
75
|
+
[`send_message`](https://dev.postageapp.com/api/send_message) API call:
|
50
76
|
|
51
77
|
```ruby
|
52
78
|
request = PostageApp::Request.new(
|
@@ -63,7 +89,7 @@ request = PostageApp::Request.new(
|
|
63
89
|
},
|
64
90
|
attachments: {
|
65
91
|
'document.pdf' => {
|
66
|
-
content_type: application/pdf',
|
92
|
+
content_type: 'application/pdf',
|
67
93
|
content: Base64.encode64(File.open('/path/to/document.pdf', 'rb').read)
|
68
94
|
}
|
69
95
|
}
|
@@ -121,7 +147,7 @@ require 'postageapp/mailer'
|
|
121
147
|
There are custom methods that allow setting of `template` and `variables` parts
|
122
148
|
of the API call. They are `postageapp_template` and `postageapp_variables`.
|
123
149
|
Examples how they are used are below. For details what they do please see
|
124
|
-
[documentation](
|
150
|
+
[documentation](https://dev.postageapp.com/api/)
|
125
151
|
|
126
152
|
Please note that `deliver` method will return `PostageApp::Response` object.
|
127
153
|
This way you can immediately check the status of the delivery. For example:
|
@@ -213,11 +239,89 @@ For projects other than Rails you'll need to tell where the `project_root` is:
|
|
213
239
|
|
214
240
|
```ruby
|
215
241
|
PostageApp.configure do |config|
|
216
|
-
config.api_key
|
242
|
+
config.api_key = 'PROJECT_API_KEY'
|
217
243
|
config.project_root = "/path/to/your/project"
|
218
244
|
end
|
219
245
|
```
|
220
246
|
|
221
|
-
#
|
222
|
-
|
223
|
-
|
247
|
+
# Configuration Details
|
248
|
+
|
249
|
+
Configuration can be done either via Ruby code directly, by environment
|
250
|
+
variables, or by a combination of both. Where both are supplied, the
|
251
|
+
Ruby setting will take precedence.
|
252
|
+
|
253
|
+
## Configuration Arguments
|
254
|
+
|
255
|
+
These can all be set with `PostageApp.config`:
|
256
|
+
|
257
|
+
* `api_key`: Project API key to use (required for project API functions)
|
258
|
+
* `account_api_key`: Account API key to use (required for account API functions)
|
259
|
+
* `postback_secret`: Secret to use for validating ActionMailbox requests (optional)
|
260
|
+
* `project_root`: Project root for logging purposes (default: current working directory)
|
261
|
+
* `recipient_override`: Override sender on `send_message` calls (optional)
|
262
|
+
* `logger`: Logger instance to use (optional)
|
263
|
+
* `secure`: Enable verifying TLS connections (default: `true`)
|
264
|
+
* `verify_tls`: Enable TLS certificate verification (default: `true`)
|
265
|
+
* `verify_certificate`: Alias for `verify_tls`
|
266
|
+
* `host`: API host to contact (default: `api.postageapp.com`)
|
267
|
+
* `port`: API port to contact (default: `443`)
|
268
|
+
* `scheme`: HTTP scheme to use (default: `https`)
|
269
|
+
* `protocol`: Alias for `scheme`
|
270
|
+
* `proxy_username`: SOCKS5 proxy username (optional)
|
271
|
+
* `proxy_user`: Alias for `proxy_username`
|
272
|
+
* `proxy_password`: SOCKS5 proxy password (optional)
|
273
|
+
* `proxy_pass`: Alias for `proxy_password`
|
274
|
+
* `proxy_host`: SOCKS5 proxy host (optional)
|
275
|
+
* `proxy_port`: SOCKS5 proxy port (default: `1080`)
|
276
|
+
* `open_timeout`: Timeout in seconds when initiating requests (default: `5`)
|
277
|
+
* `http_open_timeout`: Alias for `open_timeout`
|
278
|
+
* `read_timeout`: Timeout in seconds when awaiting responses (default: `10`)
|
279
|
+
* `http_read_timeout`: Alias for `read_timeout`
|
280
|
+
* `retry_methods`: Which API calls to retry, comma and/or space separated (default: `send_message`)
|
281
|
+
* `requests_to_resend`: Alias for `retry_methods`
|
282
|
+
* `framework`: Framework used (default: `Ruby`)
|
283
|
+
* `environment`: Environment to use (default: `production`)
|
284
|
+
|
285
|
+
A typical configuration involves setting the project API key:
|
286
|
+
|
287
|
+
PostageApp.config do |config|
|
288
|
+
config.api_key = 'PROJECT_API_KEY'
|
289
|
+
end
|
290
|
+
|
291
|
+
Where additional settings can be applied as necessary.
|
292
|
+
|
293
|
+
## Environment Variables
|
294
|
+
|
295
|
+
Most configuration parameters can be set via the environment:
|
296
|
+
|
297
|
+
* `POSTAGEAPP_API_KEY`: Project API key to use (required for project API functions)
|
298
|
+
* `POSTAGEAPP_ACCOUNT_API_KEY`: Account API key to use (required for account API functions)
|
299
|
+
* `POSTAGEAPP_POSTBACK_SECRET`: Secret to use for validating ActionMailbox requests (optional)
|
300
|
+
* `POSTAGEAPP_PROJECT_ROOT`: Project root for logging purposes (default: current working directory)
|
301
|
+
* `POSTAGEAPP_RECIPIENT_OVERRIDE`: Override sender on `send_message` calls (optional)
|
302
|
+
* `POSTAGEAPP_VERIFY_TLS`: (default: `true`)
|
303
|
+
* `POSTAGEAPP_VERIFY_CERTIFICATE`: Alias for `POSTAGEAPP_VERIFY_TLS`
|
304
|
+
* `POSTAGEAPP_HOST`: API host to contact (default: `api.postageapp.com`)
|
305
|
+
* `POSTAGEAPP_PORT`: API port to contact (default: `443`)
|
306
|
+
* `POSTAGEAPP_SCHEME`: HTTP scheme to use (default: `https`)
|
307
|
+
* `POSTAGEAPP_PROTOCOL`: Alias for `POSTAGEAPP_SCHEME`
|
308
|
+
* `POSTAGEAPP_PROXY_USERNAME`: SOCKS5 proxy username (optional)
|
309
|
+
* `POSTAGEAPP_PROXY_USER`: Alias for `POSTAGEAPP_PROXY_USERNAME`
|
310
|
+
* `POSTAGEAPP_PROXY_PASSWORD`: SOCKS5 proxy password (optional)
|
311
|
+
* `POSTAGEAPP_PROXY_PASS`: Alias for `POSTAGEAPP_PROXY_PASSWORD`
|
312
|
+
* `POSTAGEAPP_PROXY_HOST`: SOCKS5 proxy host (optional)
|
313
|
+
* `POSTAGEAPP_PROXY_PORT`: SOCKS5 proxy port (default: `1080`)
|
314
|
+
* `POSTAGEAPP_OPEN_TIMEOUT`: Timeout in seconds when initiating requests (default: `5`)
|
315
|
+
* `POSTAGEAPP_HTTP_OPEN_TIMEOUT`: Alias for `POSTAGEAPP_OPEN_TIMEOUT`
|
316
|
+
* `POSTAGEAPP_READ_TIMEOUT`: Timeout in seconds when awaiting responses (default: `10`)
|
317
|
+
* `POSTAGEAPP_HTTP_READ_TIMEOUT`: Alias for `POSTAGEAPP_READ_TIMEOUT`
|
318
|
+
* `POSTAGEAPP_RETRY_METHODS`: Which API calls to retry, comma and/or space separated (default: `send_message`)
|
319
|
+
* `POSTAGEAPP_REQUESTS_TO_RESEND`: Alias for `POSTAGEAPP_RETRY_METHODS`
|
320
|
+
* `POSTAGEAPP_FRAMEWORK`: Framework used (default: `Ruby`)
|
321
|
+
* `POSTAGEAPP_ENVIRONMENT`: Environment to use (default: `production`)
|
322
|
+
|
323
|
+
# Copyright and Licensing
|
324
|
+
|
325
|
+
(C) 2011-2019 Scott Tadman, Oleg Khabarov, [PostageApp](https://postageapp.com/)
|
326
|
+
|
327
|
+
This is released under the [MIT License](LICENSE.md).
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
# Avoid contaminating ENV with lots of BUNDLER_ variables
|
2
|
+
# require 'bundler/setup'
|
2
3
|
|
3
4
|
require 'rake/testtask'
|
4
5
|
|
@@ -11,17 +12,27 @@ end
|
|
11
12
|
namespace :travis do
|
12
13
|
desc "Run tests across different environments, simulating Travis"
|
13
14
|
task :test do
|
14
|
-
|
15
|
+
require_relative './test/travis_test'
|
15
16
|
|
16
17
|
TravisTest.run!
|
17
18
|
end
|
18
19
|
|
19
20
|
desc "Report on which versions of Ruby are installed"
|
20
21
|
task :versions do
|
21
|
-
|
22
|
+
require_relative './test/travis_test'
|
22
23
|
|
23
24
|
TravisTest.validate_ruby_versions!
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
27
|
-
task :
|
28
|
+
task default: :test
|
29
|
+
|
30
|
+
namespace :test do
|
31
|
+
task :rails do
|
32
|
+
ENV['BUNDLE_GEMFILE'] = File.expand_path('./test/gemfiles/Gemfile.rails-6.1.x', __dir__)
|
33
|
+
|
34
|
+
require 'bundler/setup'
|
35
|
+
|
36
|
+
p Rails
|
37
|
+
end
|
38
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.4.0
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class ActionMailbox::Ingresses::PostageApp::InboundEmailsController < ActionMailbox::BaseController
|
4
|
+
before_action :hmac_authenticate
|
5
|
+
|
6
|
+
def create
|
7
|
+
ActionMailbox::InboundEmail.create_and_extract_message_id!(message_param)
|
8
|
+
|
9
|
+
head(:ok)
|
10
|
+
|
11
|
+
rescue JSON::ParserError => e
|
12
|
+
logger.error(e.message)
|
13
|
+
|
14
|
+
head(:unprocessable_entity)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def message_param
|
19
|
+
params.require(:inbound_email).require(:message)
|
20
|
+
end
|
21
|
+
|
22
|
+
def hmac_authenticate
|
23
|
+
return if (hmac_authenticated?)
|
24
|
+
|
25
|
+
head(:unauthorized)
|
26
|
+
end
|
27
|
+
|
28
|
+
def hmac_authenticated?
|
29
|
+
if (PostageApp.config.postback_secret.present?)
|
30
|
+
ActiveSupport::SecurityUtils.secure_compare(
|
31
|
+
request.headers["X-PostageApp-Signature"],
|
32
|
+
hmac_signature(message_param, PostageApp.config.postback_secret)
|
33
|
+
)
|
34
|
+
else
|
35
|
+
raise ArgumentError, <<~END.squish
|
36
|
+
Missing required PostageApp "postback secret" which can be set as
|
37
|
+
in the Rails Encypted Credentials, as POSTAGEAPP_API_POSTBACK_SECRET
|
38
|
+
in the environment, or via a config/initializer script using the
|
39
|
+
PostageApp.config method.
|
40
|
+
END
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def hmac_signature(*content)
|
46
|
+
Base64.strict_encode64(
|
47
|
+
OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, *content)
|
48
|
+
)
|
49
|
+
end
|
50
|
+
end
|
data/config/routes.rb
ADDED
data/exe/postageapp
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH << File.expand_path('../lib', __dir__)
|
4
|
+
|
5
|
+
require 'postageapp'
|
6
|
+
require 'postageapp/cli'
|
7
|
+
|
8
|
+
exit_code = -1
|
9
|
+
|
10
|
+
begin
|
11
|
+
if (ARGV.length > 0)
|
12
|
+
PostageApp::CLI.parse!(*ARGV)
|
13
|
+
|
14
|
+
exit(0)
|
15
|
+
end
|
16
|
+
|
17
|
+
rescue PostageApp::CLI::Command::MissingArguments
|
18
|
+
exit(-20)
|
19
|
+
rescue PostageApp::CLI::Command::APICallError
|
20
|
+
exit(-30)
|
21
|
+
rescue PostageApp::CLI::UnknownCommand => e
|
22
|
+
$stderr.puts("Error: #{e}")
|
23
|
+
exit_code = -11
|
24
|
+
end
|
25
|
+
|
26
|
+
puts "usage: postageapp command [options]"
|
27
|
+
puts
|
28
|
+
puts "commands:"
|
29
|
+
|
30
|
+
PostageApp::CLI::Command.defined.each do |command, _|
|
31
|
+
puts " #{command}"
|
32
|
+
end
|
33
|
+
|
34
|
+
puts
|
35
|
+
puts "* Documentation: https://dev.postageapp.com/api/"
|
36
|
+
|
37
|
+
exit(exit_code)
|
@@ -10,18 +10,21 @@ class PostageappGenerator < Rails::Generators::Base
|
|
10
10
|
def self.source_root
|
11
11
|
@__source_root ||= File.expand_path(
|
12
12
|
'../../../generators/postageapp/templates',
|
13
|
-
|
13
|
+
__dir__
|
14
14
|
)
|
15
15
|
end
|
16
16
|
|
17
17
|
def install
|
18
|
-
unless (
|
19
|
-
|
18
|
+
unless (PostageApp::Env.rails_with_encrypted_credentials?)
|
19
|
+
unless (options[:api_key])
|
20
|
+
puts 'Must pass --api-key with API key of your PostageApp.com project'
|
20
21
|
|
21
|
-
|
22
|
+
exit(-1)
|
23
|
+
end
|
24
|
+
|
25
|
+
template('initializer.rb', 'config/initializers/postageapp.rb')
|
22
26
|
end
|
23
|
-
|
24
|
-
template('initializer.rb', 'config/initializers/postageapp.rb')
|
27
|
+
|
25
28
|
copy_file('postageapp_tasks.rake', 'lib/tasks/postageapp_tasks.rake')
|
26
29
|
|
27
30
|
puts run('rake postageapp:test')
|
data/lib/postageapp.rb
CHANGED
@@ -9,70 +9,88 @@ require 'base64'
|
|
9
9
|
|
10
10
|
module PostageApp
|
11
11
|
class Error < StandardError ; end
|
12
|
-
|
12
|
+
|
13
13
|
# Call this method to modify your configuration
|
14
14
|
# Example:
|
15
15
|
# PostageApp.configure do |config|
|
16
|
-
# config.api_key
|
17
|
-
#
|
16
|
+
# config.api_key = '1234567890abcdef'
|
17
|
+
#
|
18
|
+
# if Rails.env.staging?
|
19
|
+
# config.recipient_override = 'test@test.test'
|
20
|
+
# end
|
18
21
|
# end
|
19
|
-
#
|
22
|
+
#
|
20
23
|
# If you do not want/need to initialize the gem in this way, you can use the environment
|
21
24
|
# variable POSTAGEAPP_API_KEY to set up your key.
|
22
|
-
|
23
|
-
|
25
|
+
|
26
|
+
VERSION = File.read(File.expand_path('../VERSION', __dir__)).gsub(/\s/, '')
|
27
|
+
|
28
|
+
def self.version
|
29
|
+
VERSION
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.configure(reset: false)
|
24
33
|
if (reset)
|
25
|
-
self.
|
34
|
+
self.config_reset!
|
26
35
|
end
|
27
36
|
|
28
|
-
yield(self.
|
37
|
+
yield(self.config)
|
29
38
|
end
|
30
|
-
|
39
|
+
|
31
40
|
# Accessor for the PostageApp::Configuration object
|
32
41
|
# Example use:
|
33
42
|
# PostageApp.configuration.api_key = '1234567890abcdef'
|
34
|
-
def self.
|
35
|
-
@
|
43
|
+
def self.config
|
44
|
+
@config ||= Configuration.new
|
36
45
|
end
|
37
46
|
|
38
|
-
def self.
|
39
|
-
@
|
47
|
+
def self.config_reset!
|
48
|
+
@config = nil
|
40
49
|
end
|
41
50
|
|
42
51
|
class << self
|
43
|
-
|
52
|
+
alias_method :configuration_reset!, :config_reset!
|
53
|
+
alias_method :configuration, :config
|
44
54
|
end
|
45
|
-
|
55
|
+
|
46
56
|
# Logger for the plugin
|
47
57
|
def self.logger
|
48
58
|
@logger ||= begin
|
49
|
-
|
50
|
-
if (
|
51
|
-
FileUtils.mkdir_p(File.join(File.expand_path(
|
52
|
-
File.join(
|
59
|
+
config.logger || PostageApp::Logger.new(
|
60
|
+
if (config.project_root)
|
61
|
+
FileUtils.mkdir_p(File.join(File.expand_path(config.project_root), 'log'))
|
62
|
+
File.join(config.project_root, "log/postageapp_#{config.environment}.log")
|
53
63
|
else
|
54
|
-
|
64
|
+
$stdout
|
55
65
|
end
|
56
66
|
)
|
57
67
|
end
|
58
68
|
end
|
59
69
|
end
|
60
70
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
require 'postageapp/
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
71
|
+
require_relative './postageapp/env'
|
72
|
+
|
73
|
+
if (PostageApp::Env.rails?)
|
74
|
+
require_relative './postageapp/engine'
|
75
|
+
# require 'postageapp/ingresses/postage_app'
|
76
|
+
end
|
77
|
+
|
78
|
+
require_relative './postageapp/configuration'
|
79
|
+
require_relative './postageapp/diagnostics'
|
80
|
+
require_relative './postageapp/failed_request'
|
81
|
+
require_relative './postageapp/http'
|
82
|
+
require_relative './postageapp/logger'
|
83
|
+
require_relative './postageapp/request'
|
84
|
+
require_relative './postageapp/response'
|
85
|
+
require_relative './postageapp/mail'
|
86
|
+
require_relative './postageapp/mail/delivery_method'
|
87
|
+
require_relative './postageapp/utils'
|
88
|
+
|
89
|
+
if (defined?(Rails::Railtie))
|
90
|
+
require_relative './postageapp/rails/railtie'
|
91
|
+
end
|
92
|
+
|
93
|
+
require_relative './postageapp/mail/extensions'
|
76
94
|
|
77
95
|
if (defined?(::Mail))
|
78
96
|
PostageApp::Mail::Extensions.install!
|