postageapp 1.3.0 → 1.4.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.
- checksums.yaml +5 -5
- data/.gitignore +6 -0
- data/.travis.yml +9 -39
- data/{LICENSE → 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/inbound_emails_controller.rb +52 -0
- data/app/ingresses/action_mailbox/ingresses/postage_app.rb +4 -0
- data/config/routes.rb +8 -0
- data/exe/postageapp +37 -0
- data/lib/generators/postageapp/postageapp_generator.rb +9 -6
- 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/cli/command.rb +110 -0
- data/lib/postageapp/cli.rb +14 -0
- data/lib/postageapp/configuration.rb +237 -74
- data/lib/postageapp/engine.rb +11 -0
- data/lib/postageapp/env.rb +9 -0
- data/lib/postageapp/mailer/mailer_4.rb +30 -14
- data/lib/postageapp/mailer.rb +1 -11
- data/lib/postageapp/rails/railtie.rb +1 -3
- data/lib/postageapp/request.rb +6 -1
- data/lib/postageapp.rb +53 -35
- data/log/.gitignore +1 -0
- data/postageapp.gemspec +7 -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 +5 -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} +18 -12
- data/test/{failed_request_test.rb → unit/failed_request_test.rb} +6 -6
- data/test/{live_test.rb → unit/live_test.rb} +4 -39
- 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} +18 -17
- data/test/{response_test.rb → unit/response_test.rb} +4 -4
- data/test/unit/tmp/.gitignore +1 -0
- data/tmp/.gitignore +1 -0
- metadata +41 -48
- 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/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/action_mailer_2/notifier.rb +0 -77
- data/test/mailer_2_test.rb +0 -95
- data/test/mailer_3_test.rb +0 -118
@@ -1,12 +1,12 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative '../helper'
|
2
2
|
|
3
3
|
class ResponseTest < MiniTest::Test
|
4
4
|
def test_initialization
|
5
5
|
object = stub(
|
6
|
-
:
|
6
|
+
body: {
|
7
7
|
'response' => {
|
8
|
-
'uid'
|
9
|
-
'status'
|
8
|
+
'uid' => 'md5_hash_uid',
|
9
|
+
'status' => 'ok',
|
10
10
|
'message' => 'api reply message'
|
11
11
|
},
|
12
12
|
'data' => {
|
@@ -0,0 +1 @@
|
|
1
|
+
*
|
data/tmp/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*
|
metadata
CHANGED
@@ -1,31 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: postageapp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Tadman
|
8
8
|
- Oleg Khabarov
|
9
|
-
-
|
10
|
-
autorequire:
|
9
|
+
- PostageApp Ltd.
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2021-08-23 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: json
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
requirements:
|
19
|
-
- - "~>"
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '1.8'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
requirements:
|
26
|
-
- - "~>"
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
version: '1.8'
|
29
15
|
- !ruby/object:Gem::Dependency
|
30
16
|
name: mail
|
31
17
|
requirement: !ruby/object:Gem::Requirement
|
@@ -51,18 +37,31 @@ files:
|
|
51
37
|
- ".gitignore"
|
52
38
|
- ".travis.yml"
|
53
39
|
- Gemfile
|
54
|
-
- LICENSE
|
40
|
+
- LICENSE.md
|
55
41
|
- README.md
|
56
42
|
- Rakefile
|
43
|
+
- VERSION
|
44
|
+
- app/ingresses/action_mailbox/ingresses/postage_app.rb
|
45
|
+
- app/ingresses/action_mailbox/ingresses/postage_app/inbound_emails_controller.rb
|
46
|
+
- config/routes.rb
|
57
47
|
- doc/RAILS2.md
|
58
48
|
- doc/RAILS3.md
|
49
|
+
- exe/postageapp
|
59
50
|
- generators/postageapp/postageapp_generator.rb
|
60
51
|
- generators/postageapp/templates/initializer.rb
|
61
52
|
- generators/postageapp/templates/postageapp_tasks.rake
|
62
53
|
- lib/generators/postageapp/postageapp_generator.rb
|
63
54
|
- lib/postageapp.rb
|
55
|
+
- lib/postageapp/cli.rb
|
56
|
+
- lib/postageapp/cli/command.rb
|
57
|
+
- lib/postageapp/cli/command/config.rb
|
58
|
+
- lib/postageapp/cli/command/create_mailbox.rb
|
59
|
+
- lib/postageapp/cli/command/env.rb
|
60
|
+
- lib/postageapp/cli/command/get_project_info.rb
|
64
61
|
- lib/postageapp/configuration.rb
|
65
62
|
- lib/postageapp/diagnostics.rb
|
63
|
+
- lib/postageapp/engine.rb
|
64
|
+
- lib/postageapp/env.rb
|
66
65
|
- lib/postageapp/failed_request.rb
|
67
66
|
- lib/postageapp/http.rb
|
68
67
|
- lib/postageapp/logger.rb
|
@@ -71,20 +70,16 @@ files:
|
|
71
70
|
- lib/postageapp/mail/delivery_method.rb
|
72
71
|
- lib/postageapp/mail/extensions.rb
|
73
72
|
- lib/postageapp/mailer.rb
|
74
|
-
- lib/postageapp/mailer/mailer_2.rb
|
75
|
-
- lib/postageapp/mailer/mailer_3.rb
|
76
73
|
- lib/postageapp/mailer/mailer_4.rb
|
77
74
|
- lib/postageapp/rails/rails.rb
|
78
75
|
- lib/postageapp/rails/railtie.rb
|
79
76
|
- lib/postageapp/request.rb
|
80
77
|
- lib/postageapp/response.rb
|
81
78
|
- lib/postageapp/utils.rb
|
82
|
-
-
|
79
|
+
- log/.gitignore
|
83
80
|
- postageapp.gemspec
|
84
81
|
- rails/init.rb
|
85
82
|
- script/with
|
86
|
-
- test/configuration_test.rb
|
87
|
-
- test/failed_request_test.rb
|
88
83
|
- test/gemfiles/Gemfile.rails-2.3.x
|
89
84
|
- test/gemfiles/Gemfile.rails-3.0.x
|
90
85
|
- test/gemfiles/Gemfile.rails-3.1.x
|
@@ -93,18 +88,12 @@ files:
|
|
93
88
|
- test/gemfiles/Gemfile.rails-4.1.x
|
94
89
|
- test/gemfiles/Gemfile.rails-4.2.x
|
95
90
|
- test/gemfiles/Gemfile.rails-5.0.x
|
91
|
+
- test/gemfiles/Gemfile.rails-5.2.x
|
92
|
+
- test/gemfiles/Gemfile.rails-6.0.x
|
93
|
+
- test/gemfiles/Gemfile.rails-6.1.x
|
96
94
|
- test/gemfiles/Gemfile.ruby
|
97
95
|
- test/helper.rb
|
98
|
-
- test/
|
99
|
-
- test/mail_delivery_method_test.rb
|
100
|
-
- test/mailer/action_mailer_2/notifier.rb
|
101
|
-
- test/mailer/action_mailer_2/notifier/with_body_and_attachment.erb
|
102
|
-
- test/mailer/action_mailer_2/notifier/with_custom_postage_variables.text.html.erb
|
103
|
-
- test/mailer/action_mailer_2/notifier/with_custom_postage_variables.text.plain.erb
|
104
|
-
- test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.html.erb
|
105
|
-
- test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.plain.erb
|
106
|
-
- test/mailer/action_mailer_2/notifier/with_simple_view.erb
|
107
|
-
- test/mailer/action_mailer_2/notifier/with_text_only_view.text.plain.erb
|
96
|
+
- test/log/.gitignore
|
108
97
|
- test/mailer/action_mailer_3/layouts/notifier.html.erb
|
109
98
|
- test/mailer/action_mailer_3/notifier.rb
|
110
99
|
- test/mailer/action_mailer_3/notifier/with_custom_postage_variables.html.erb
|
@@ -115,21 +104,26 @@ files:
|
|
115
104
|
- test/mailer/action_mailer_3/notifier/with_old_api.text.erb
|
116
105
|
- test/mailer/action_mailer_3/notifier/with_simple_view.erb
|
117
106
|
- test/mailer/action_mailer_3/notifier/with_text_only_view.text.erb
|
118
|
-
- test/
|
119
|
-
- test/mailer_3_test.rb
|
120
|
-
- test/mailer_4_test.rb
|
121
|
-
- test/mailer_helper_methods_test.rb
|
122
|
-
- test/postageapp_test.rb
|
123
|
-
- test/rails_initialization_test.rb
|
124
|
-
- test/request_test.rb
|
125
|
-
- test/response_test.rb
|
107
|
+
- test/tmp/.gitignore
|
126
108
|
- test/travis_test.rb
|
109
|
+
- test/unit/configuration_test.rb
|
110
|
+
- test/unit/failed_request_test.rb
|
111
|
+
- test/unit/live_test.rb
|
112
|
+
- test/unit/mail_delivery_method_test.rb
|
113
|
+
- test/unit/mailer_4_test.rb
|
114
|
+
- test/unit/mailer_helper_methods_test.rb
|
115
|
+
- test/unit/postageapp_test.rb
|
116
|
+
- test/unit/rails_initialization_test.rb
|
117
|
+
- test/unit/request_test.rb
|
118
|
+
- test/unit/response_test.rb
|
119
|
+
- test/unit/tmp/.gitignore
|
127
120
|
- test/with_environment.rb
|
128
|
-
|
121
|
+
- tmp/.gitignore
|
122
|
+
homepage: https://github.com/postageapp/postageapp-ruby
|
129
123
|
licenses:
|
130
124
|
- MIT
|
131
125
|
metadata: {}
|
132
|
-
post_install_message:
|
126
|
+
post_install_message:
|
133
127
|
rdoc_options: []
|
134
128
|
require_paths:
|
135
129
|
- lib
|
@@ -137,16 +131,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
137
131
|
requirements:
|
138
132
|
- - ">="
|
139
133
|
- !ruby/object:Gem::Version
|
140
|
-
version:
|
134
|
+
version: 2.5.0
|
141
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
142
136
|
requirements:
|
143
137
|
- - ">="
|
144
138
|
- !ruby/object:Gem::Version
|
145
139
|
version: '0'
|
146
140
|
requirements: []
|
147
|
-
|
148
|
-
|
149
|
-
signing_key:
|
141
|
+
rubygems_version: 3.2.15
|
142
|
+
signing_key:
|
150
143
|
specification_version: 4
|
151
144
|
summary: Client library for PostageApp Email API
|
152
145
|
test_files: []
|
@@ -1,140 +0,0 @@
|
|
1
|
-
# Postage::Mailer allows you to use/re-use existing mailers set up using
|
2
|
-
# ActionMailer. The only catch is to change inheritance from ActionMailer::Base
|
3
|
-
# to PostageApp::Mailer. Also don't forget to require 'postageapp/mailer'
|
4
|
-
#
|
5
|
-
# Here's an example of a valid PostageApp::Mailer class
|
6
|
-
#
|
7
|
-
# require 'postageapp/mailer'
|
8
|
-
#
|
9
|
-
# class Notifier < PostageApp::Mailer
|
10
|
-
# def signup_notification(recipient)
|
11
|
-
# recipients recipient.email_address
|
12
|
-
# from 'system@example.com'
|
13
|
-
# subject 'New Account Information'
|
14
|
-
# end
|
15
|
-
# end
|
16
|
-
#
|
17
|
-
# Postage::Mailer introduces a few mailer methods specific to Postage:
|
18
|
-
#
|
19
|
-
# * template - template name that is defined in your PostageApp project
|
20
|
-
# * variables - extra variables you want to send along with the message
|
21
|
-
#
|
22
|
-
# Sending email
|
23
|
-
#
|
24
|
-
# Notifier.deliver_signup_notification(user) # attempts to deliver to PostageApp (depending on env)
|
25
|
-
# request = Notifier.create_signup_notification(user) # creates PostageApp::Request object
|
26
|
-
#
|
27
|
-
class PostageApp::Mailer < ActionMailer::Base
|
28
|
-
# Using :test as a delivery method if set somewhere else
|
29
|
-
unless (self.delivery_method == :test)
|
30
|
-
self.delivery_method = :postage
|
31
|
-
end
|
32
|
-
|
33
|
-
adv_attr_accessor :postageapp_uid
|
34
|
-
adv_attr_accessor :postageapp_api_key
|
35
|
-
adv_attr_accessor :postageapp_template
|
36
|
-
adv_attr_accessor :postageapp_variables
|
37
|
-
|
38
|
-
def perform_delivery_postage(mail)
|
39
|
-
mail.send
|
40
|
-
end
|
41
|
-
|
42
|
-
def deliver!(mail = @mail)
|
43
|
-
unless (mail)
|
44
|
-
raise 'PostageApp::Request object not present, cannot deliver'
|
45
|
-
end
|
46
|
-
|
47
|
-
if (perform_deliveries)
|
48
|
-
__send__("perform_delivery_#{delivery_method}", mail)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Creating a Postage::Request object unlike TMail one in ActionMailer::Base
|
53
|
-
def create_mail
|
54
|
-
params = { }
|
55
|
-
|
56
|
-
unless (self.recipients.blank?)
|
57
|
-
params['recipients'] = self.recipients
|
58
|
-
end
|
59
|
-
|
60
|
-
params['headers'] = { }
|
61
|
-
|
62
|
-
unless (self.subject.blank?)
|
63
|
-
params['headers']['subject'] = self.subject
|
64
|
-
end
|
65
|
-
|
66
|
-
unless (self.subject.blank?)
|
67
|
-
params['headers']['from'] = self.from
|
68
|
-
end
|
69
|
-
|
70
|
-
unless (self.headers.blank?)
|
71
|
-
params['headers'].merge!(self.headers)
|
72
|
-
end
|
73
|
-
|
74
|
-
params['content'] = { }
|
75
|
-
params['attachments'] = { }
|
76
|
-
|
77
|
-
if (@parts.empty?)
|
78
|
-
unless (self.body.blank?)
|
79
|
-
params['content'][self.content_type] = self.body
|
80
|
-
end
|
81
|
-
else
|
82
|
-
self.parts.each do |part|
|
83
|
-
case (part.content_disposition)
|
84
|
-
when 'inline'
|
85
|
-
if (part.content_type.blank? && String === part.body)
|
86
|
-
part.content_type = 'text/plain'
|
87
|
-
end
|
88
|
-
|
89
|
-
params['content'][part.content_type] = part.body
|
90
|
-
when 'attachment'
|
91
|
-
params['attachments'][part.filename] = {
|
92
|
-
'content_type' => part.content_type,
|
93
|
-
'content' => Base64.encode64(part.body)
|
94
|
-
}
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
unless (self.postageapp_template.blank?)
|
100
|
-
params['template'] = self.postageapp_template
|
101
|
-
end
|
102
|
-
|
103
|
-
unless (self.postageapp_variables.blank?)
|
104
|
-
params['variables'] = self.postageapp_variables
|
105
|
-
end
|
106
|
-
|
107
|
-
if (params['headers'].blank?)
|
108
|
-
params.delete('headers')
|
109
|
-
end
|
110
|
-
|
111
|
-
if (params['content'].blank?)
|
112
|
-
params.delete('content')
|
113
|
-
end
|
114
|
-
|
115
|
-
if (params['attachments'].blank?)
|
116
|
-
params.delete('attachments')
|
117
|
-
end
|
118
|
-
|
119
|
-
@mail = PostageApp::Request.new('send_message', params)
|
120
|
-
|
121
|
-
unless (self.postageapp_uid.blank?)
|
122
|
-
@mail.uid = self.postageapp_uid
|
123
|
-
end
|
124
|
-
|
125
|
-
unless (self.postageapp_api_key.blank?)
|
126
|
-
@mail.api_key = self.postageapp_api_key
|
127
|
-
end
|
128
|
-
|
129
|
-
@mail
|
130
|
-
end
|
131
|
-
|
132
|
-
# Not insisting rendering a view if it's not there. PostageApp gem can send blank content
|
133
|
-
# provided that the template is defined.
|
134
|
-
def render(opts)
|
135
|
-
super(opts)
|
136
|
-
|
137
|
-
rescue ActionView::MissingTemplate
|
138
|
-
# do nothing
|
139
|
-
end
|
140
|
-
end
|
@@ -1,190 +0,0 @@
|
|
1
|
-
# Postage::Mailer allows you to use/re-use existing mailers set up using
|
2
|
-
# ActionMailer. The only catch is to change inheritance from ActionMailer::Base
|
3
|
-
# to PostageApp::Mailer. Also don't forget to require 'postageapp/mailer'
|
4
|
-
#
|
5
|
-
# Here's an example of a valid PostageApp::Mailer class
|
6
|
-
#
|
7
|
-
# require 'postageapp/mailer'
|
8
|
-
#
|
9
|
-
# class Notifier < PostageApp::Mailer
|
10
|
-
# def signup_notification(recipient)
|
11
|
-
# mail(
|
12
|
-
# :to => recipient.email,
|
13
|
-
# :from => 'sender@test.test',
|
14
|
-
# :subject => 'Test Message'
|
15
|
-
# )
|
16
|
-
# end
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
# Postage::Mailer introduces a few mailer methods specific to Postage:
|
20
|
-
#
|
21
|
-
# * postageapp_template - template name that is defined in your PostageApp project
|
22
|
-
# * postageapp_variables - extra variables you want to send along with the message
|
23
|
-
#
|
24
|
-
# Sending email
|
25
|
-
#
|
26
|
-
# request = Notifier.signup_notification(user) # creates PostageApp::Request object
|
27
|
-
# response = request.deliver # attempts to deliver the message and creates a PostageApp::Response
|
28
|
-
|
29
|
-
class PostageApp::Mailer < ActionMailer::Base
|
30
|
-
# Wrapper for creating attachments
|
31
|
-
# Attachments sent to PostageApp are in the following format:
|
32
|
-
# 'filename.ext' => {
|
33
|
-
# 'content_type' => 'content/type',
|
34
|
-
# 'content' => 'base64_encoded_content'
|
35
|
-
# }
|
36
|
-
|
37
|
-
class Attachments < Hash
|
38
|
-
def initialize(message)
|
39
|
-
@_message = message
|
40
|
-
|
41
|
-
message.arguments['attachments'] ||= { }
|
42
|
-
end
|
43
|
-
|
44
|
-
def []=(filename, attachment)
|
45
|
-
default_content_type = MIME::Types.type_for(filename).first.content_type rescue ''
|
46
|
-
|
47
|
-
case (attachment)
|
48
|
-
when Hash
|
49
|
-
content_type = attachment[:content_type] || default_content_type
|
50
|
-
content = Base64.encode64(attachment[:body])
|
51
|
-
else
|
52
|
-
content_type = default_content_type
|
53
|
-
content = Base64.encode64(attachment)
|
54
|
-
end
|
55
|
-
|
56
|
-
@_message.arguments['attachments'][filename] = {
|
57
|
-
'content_type' => content_type,
|
58
|
-
'content' => content
|
59
|
-
}
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Instead of initializing Mail object, we prepare PostageApp::Request
|
64
|
-
def initialize(method_name = nil, *args)
|
65
|
-
super()
|
66
|
-
|
67
|
-
@_message = PostageApp::Request.new(:send_message)
|
68
|
-
|
69
|
-
if method_name
|
70
|
-
process(method_name, *args)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
# Possible to define custom uid. Should be sufficiently unique
|
75
|
-
def postageapp_uid(value = nil)
|
76
|
-
value ? @_message.uid = value : @_message.uid
|
77
|
-
end
|
78
|
-
|
79
|
-
def postageapp_api_key(value = nil)
|
80
|
-
value ? @_message.api_key = value : @_message.api_key
|
81
|
-
end
|
82
|
-
|
83
|
-
# In API call we can specify PostageApp template that will be used
|
84
|
-
# to generate content of the message
|
85
|
-
def postageapp_template(value = nil)
|
86
|
-
if (value)
|
87
|
-
@_message.arguments['template'] = value
|
88
|
-
else
|
89
|
-
@_message.arguments['template']
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# Hash of variables that will be used to inject into the content
|
94
|
-
def postageapp_variables(value = nil)
|
95
|
-
if (value)
|
96
|
-
@_message.arguments['variables'] = value
|
97
|
-
else
|
98
|
-
@_message.arguments['variables']
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def attachments
|
103
|
-
@_attachments ||= Attachments.new(@_message)
|
104
|
-
end
|
105
|
-
|
106
|
-
# Override for headers assignment
|
107
|
-
def headers(args = nil)
|
108
|
-
@_message.headers(args)
|
109
|
-
end
|
110
|
-
|
111
|
-
# Overriding method that prepares Mail object. This time we'll be
|
112
|
-
# contructing PostageApp::Request payload.
|
113
|
-
def mail(headers = { }, &block)
|
114
|
-
# Guard flag to prevent both the old and the new API from firing
|
115
|
-
# Should be removed when old API is removed
|
116
|
-
@mail_was_called = true
|
117
|
-
m = @_message
|
118
|
-
|
119
|
-
# At the beginning, do not consider class default for parts order neither content_type
|
120
|
-
content_type = headers[:content_type]
|
121
|
-
parts_order = headers[:parts_order]
|
122
|
-
|
123
|
-
# Call all the procs (if any)
|
124
|
-
default_values = self.class.default.merge(self.class.default) do |k,v|
|
125
|
-
if (v.respond_to?(:call))
|
126
|
-
v.bind(self).call
|
127
|
-
else
|
128
|
-
v
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
# Handle defaults
|
133
|
-
headers = headers.reverse_merge(default_values)
|
134
|
-
|
135
|
-
# Set configure delivery behavior
|
136
|
-
wrap_delivery_behavior!(headers.delete(:delivery_method))
|
137
|
-
|
138
|
-
# Assigning recipients
|
139
|
-
m.arguments['recipients'] = headers.delete(:to)
|
140
|
-
|
141
|
-
# Assign all headers except parts_order, content_type and body
|
142
|
-
assignable = headers.except(:parts_order, :content_type, :body, :template_name, :template_path)
|
143
|
-
m.headers.merge!(assignable)
|
144
|
-
|
145
|
-
# Render the templates and blocks
|
146
|
-
responses, explicit_order = collect_responses_and_parts_order(headers, &block)
|
147
|
-
create_parts_from_responses(m, responses)
|
148
|
-
|
149
|
-
m
|
150
|
-
end
|
151
|
-
|
152
|
-
protected
|
153
|
-
def create_parts_from_responses(m, responses) #:nodoc:
|
154
|
-
content = m.arguments['content'] ||= { }
|
155
|
-
|
156
|
-
responses.each do |part|
|
157
|
-
content[part[:content_type]] = part[:body]
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
# A set of methods that are useful when request needs to behave as Mail
|
163
|
-
class PostageApp::Request
|
164
|
-
attr_accessor :delivery_handler
|
165
|
-
attr_accessor :perform_deliveries
|
166
|
-
attr_accessor :raise_delivery_errors
|
167
|
-
|
168
|
-
def inform_interceptors
|
169
|
-
Mail.inform_interceptors(self)
|
170
|
-
end
|
171
|
-
|
172
|
-
# Either doing an actual send, or passing it along to Mail::TestMailer
|
173
|
-
# Probably not the best way as we're skipping way too many intermediate methods
|
174
|
-
def deliver
|
175
|
-
inform_interceptors
|
176
|
-
|
177
|
-
if (perform_deliveries)
|
178
|
-
if (@delivery_method == Mail::TestMailer)
|
179
|
-
@delivery_method.deliveries << self
|
180
|
-
else
|
181
|
-
self.send
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
# Not 100% on this, but I need to assign this so I can properly handle deliver method
|
187
|
-
def delivery_method(method = nil, settings = { })
|
188
|
-
@delivery_method = method
|
189
|
-
end
|
190
|
-
end
|