pony 1.6.2 → 1.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +3 -0
- data/lib/pony.rb +20 -1
- data/pony.gemspec +2 -2
- data/spec/pony_spec.rb +80 -62
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce1e07719a6d6f72a10ac2ae08217d85fb3aa5f4
|
4
|
+
data.tar.gz: 9d8e1332919f03c78ab439e2b22b894b3afcc3a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1343e76f77aa91409afbd022495de50580b376fee2e0954bc98b197f787043e58642ed3b216c1b08d9efd3d1e3af2d32ffe85513bc30a95da18b1780e84a7810
|
7
|
+
data.tar.gz: f867a5b22fbbfc411ae524e5020ae09d749f92b14aaeadec1365199891e6bcbcc6b8319814dd5b58dc103e70cef1202efa050831b4cd49cc477c1905e8bae476
|
data/README.rdoc
CHANGED
data/lib/pony.rb
CHANGED
@@ -201,10 +201,29 @@ module Pony
|
|
201
201
|
if mail.multipart? && options[:text_part_charset]
|
202
202
|
mail.text_part.charset = options[:text_part_charset]
|
203
203
|
end
|
204
|
-
|
204
|
+
set_content_type(mail, options[:content_type])
|
205
205
|
mail
|
206
206
|
end
|
207
207
|
|
208
|
+
def self.set_content_type(mail, user_content_type)
|
209
|
+
params = mail.content_type_parameters || {}
|
210
|
+
content_type = case
|
211
|
+
when user_content_type
|
212
|
+
user_content_type
|
213
|
+
when mail.has_attachments?
|
214
|
+
if mail.attachments.detect { |a| a.inline? }
|
215
|
+
["multipart", "related", params]
|
216
|
+
else
|
217
|
+
["multipart", "mixed", params]
|
218
|
+
end
|
219
|
+
when mail.multipart?
|
220
|
+
["multipart", "alternative", params]
|
221
|
+
else
|
222
|
+
false
|
223
|
+
end
|
224
|
+
mail.content_type = content_type if content_type
|
225
|
+
end
|
226
|
+
|
208
227
|
def self.add_attachments(mail, attachments)
|
209
228
|
attachments.each do |name, body|
|
210
229
|
# mime-types wants to send these as "quoted-printable"
|
data/pony.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = 'pony'
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.7"
|
6
6
|
|
7
7
|
s.summary = "Send email in one command: Pony.mail(:to => 'someone@example.com', :body => 'hello')"
|
8
8
|
s.description = s.summary
|
@@ -15,5 +15,5 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
|
16
16
|
s.require_paths = ["lib"]
|
17
17
|
s.add_runtime_dependency 'mail', '>= 2.0'
|
18
|
-
s.add_development_dependency "rspec", ">= 2.
|
18
|
+
s.add_development_dependency "rspec", ">= 2.14"
|
19
19
|
end
|
data/spec/pony_spec.rb
CHANGED
@@ -4,169 +4,169 @@ require File.dirname(__FILE__) + '/base'
|
|
4
4
|
describe Pony do
|
5
5
|
|
6
6
|
before(:each) do
|
7
|
-
Pony.stub
|
7
|
+
Pony.stub(:deliver)
|
8
8
|
end
|
9
9
|
|
10
10
|
it "sends mail" do
|
11
|
-
Pony.
|
12
|
-
mail.to.
|
13
|
-
mail.from.
|
14
|
-
mail.subject.
|
15
|
-
mail.body.
|
11
|
+
expect(Pony).to receive(:deliver) do |mail|
|
12
|
+
expect(mail.to).to eq [ 'joe@example.com' ]
|
13
|
+
expect(mail.from).to eq [ 'sender@example.com' ]
|
14
|
+
expect(mail.subject).to eq 'hi'
|
15
|
+
expect(mail.body).to eq 'Hello, Joe.'
|
16
16
|
end
|
17
17
|
Pony.mail(:to => 'joe@example.com', :from => 'sender@example.com', :subject => 'hi', :body => 'Hello, Joe.')
|
18
18
|
end
|
19
19
|
|
20
20
|
it "requires :to param" do
|
21
|
-
|
21
|
+
expect{ Pony.mail({}) }.to raise_error(ArgumentError)
|
22
22
|
end
|
23
23
|
|
24
24
|
it "doesn't require any other param" do
|
25
|
-
|
25
|
+
expect{ Pony.mail(:to => 'joe@example.com') }.to_not raise_error
|
26
26
|
end
|
27
27
|
|
28
28
|
describe "builds a Mail object with field:" do
|
29
29
|
it "to" do
|
30
|
-
Pony.build_mail(:to => 'joe@example.com').to.
|
30
|
+
expect(Pony.build_mail(:to => 'joe@example.com').to).to eq [ 'joe@example.com' ]
|
31
31
|
end
|
32
32
|
|
33
33
|
it "to with multiple recipients" do
|
34
|
-
Pony.build_mail(:to => 'joe@example.com, friedrich@example.com').to.
|
34
|
+
expect(Pony.build_mail(:to => 'joe@example.com, friedrich@example.com').to).to eq [ 'joe@example.com', 'friedrich@example.com' ]
|
35
35
|
end
|
36
36
|
|
37
37
|
it "to with multiple recipients and names" do
|
38
|
-
Pony.build_mail(:to => 'joe@example.com, "Friedrich Hayek" <friedrich@example.com>').to.
|
38
|
+
expect(Pony.build_mail(:to => 'joe@example.com, "Friedrich Hayek" <friedrich@example.com>').to).to eq [ 'joe@example.com', 'friedrich@example.com' ]
|
39
39
|
end
|
40
40
|
|
41
41
|
it "to with multiple recipients and names in an array" do
|
42
|
-
Pony.build_mail(:to => ['joe@example.com', '"Friedrich Hayek" <friedrich@example.com>']).to.
|
42
|
+
expect(Pony.build_mail(:to => ['joe@example.com', '"Friedrich Hayek" <friedrich@example.com>']).to).to eq [ 'joe@example.com', 'friedrich@example.com' ]
|
43
43
|
end
|
44
44
|
|
45
45
|
it "cc" do
|
46
|
-
Pony.build_mail(:cc => 'joe@example.com').cc.
|
46
|
+
expect(Pony.build_mail(:cc => 'joe@example.com').cc).to eq [ 'joe@example.com' ]
|
47
47
|
end
|
48
48
|
|
49
49
|
it "reply_to" do
|
50
|
-
Pony.build_mail(:reply_to => 'joe@example.com').reply_to.
|
50
|
+
expect(Pony.build_mail(:reply_to => 'joe@example.com').reply_to).to eq [ 'joe@example.com' ]
|
51
51
|
end
|
52
52
|
|
53
53
|
it "cc with multiple recipients" do
|
54
|
-
Pony.build_mail(:cc => 'joe@example.com, friedrich@example.com').cc.
|
54
|
+
expect(Pony.build_mail(:cc => 'joe@example.com, friedrich@example.com').cc).to eq [ 'joe@example.com', 'friedrich@example.com' ]
|
55
55
|
end
|
56
56
|
|
57
57
|
it "from" do
|
58
|
-
Pony.build_mail(:from => 'joe@example.com').from.
|
58
|
+
expect(Pony.build_mail(:from => 'joe@example.com').from).to eq [ 'joe@example.com' ]
|
59
59
|
end
|
60
60
|
|
61
61
|
it "bcc" do
|
62
|
-
Pony.build_mail(:bcc => 'joe@example.com').bcc.
|
62
|
+
expect(Pony.build_mail(:bcc => 'joe@example.com').bcc).to eq [ 'joe@example.com' ]
|
63
63
|
end
|
64
64
|
|
65
65
|
it "bcc with multiple recipients" do
|
66
|
-
Pony.build_mail(:bcc => 'joe@example.com, friedrich@example.com').bcc.
|
66
|
+
expect(Pony.build_mail(:bcc => 'joe@example.com, friedrich@example.com').bcc).to eq [ 'joe@example.com', 'friedrich@example.com' ]
|
67
67
|
end
|
68
68
|
|
69
69
|
it "charset" do
|
70
70
|
mail = Pony.build_mail(:charset => 'UTF-8')
|
71
|
-
mail.charset.
|
71
|
+
expect(mail.charset).to eq 'UTF-8'
|
72
72
|
end
|
73
73
|
|
74
74
|
it "text_part_charset" do
|
75
75
|
mail = Pony.build_mail(:attachments => {"foo.txt" => "content of foo.txt"}, :body => 'test', :text_part_charset => 'ISO-2022-JP')
|
76
|
-
mail.text_part.charset.
|
76
|
+
expect(mail.text_part.charset).to eq 'ISO-2022-JP'
|
77
77
|
end
|
78
78
|
|
79
79
|
it "default charset" do
|
80
|
-
Pony.build_mail(body: 'body').charset.
|
81
|
-
Pony.build_mail(html_body: 'body').charset.
|
80
|
+
expect(Pony.build_mail(body: 'body').charset).to eq 'UTF-8'
|
81
|
+
expect(Pony.build_mail(html_body: 'body').charset).to eq 'UTF-8'
|
82
82
|
end
|
83
83
|
|
84
84
|
it "from (default)" do
|
85
|
-
Pony.build_mail({}).from.
|
85
|
+
expect(Pony.build_mail({}).from).to eq [ 'pony@unknown' ]
|
86
86
|
end
|
87
87
|
|
88
88
|
it "subject" do
|
89
|
-
Pony.build_mail(:subject => 'hello').subject.
|
89
|
+
expect(Pony.build_mail(:subject => 'hello').subject).to eq 'hello'
|
90
90
|
end
|
91
91
|
|
92
92
|
it "body" do
|
93
|
-
Pony.build_mail(body: 'What do you know, Joe?').body
|
94
|
-
eq 'What do you know, Joe?'
|
93
|
+
expect(Pony.build_mail(body: 'What do you know, Joe?').body)
|
94
|
+
.to eq 'What do you know, Joe?'
|
95
95
|
end
|
96
96
|
|
97
97
|
it "html_body" do
|
98
|
-
Pony.build_mail(html_body: 'What do you know, Joe?').parts.first.body
|
99
|
-
eq 'What do you know, Joe?'
|
100
|
-
Pony.build_mail(html_body: 'What do you know, Joe?').parts.first.content_type
|
101
|
-
eq 'text/html; charset=UTF-8'
|
98
|
+
expect(Pony.build_mail(html_body: 'What do you know, Joe?').parts.first.body)
|
99
|
+
.to eq 'What do you know, Joe?'
|
100
|
+
expect(Pony.build_mail(html_body: 'What do you know, Joe?').parts.first.content_type)
|
101
|
+
.to eq 'text/html; charset=UTF-8'
|
102
102
|
end
|
103
103
|
|
104
104
|
it 'content_type' do
|
105
|
-
Pony.build_mail(content_type: 'multipart/related').content_type
|
106
|
-
eq 'multipart/related'
|
105
|
+
expect(Pony.build_mail(content_type: 'multipart/related').content_type)
|
106
|
+
.to eq 'multipart/related'
|
107
107
|
end
|
108
108
|
|
109
109
|
it "date" do
|
110
110
|
now = Time.now
|
111
|
-
Pony.build_mail(:date => now).date.
|
111
|
+
expect(Pony.build_mail(:date => now).date).to eq DateTime.parse(now.to_s)
|
112
112
|
end
|
113
113
|
|
114
114
|
it "message_id" do
|
115
|
-
Pony.build_mail(:message_id => '<abc@def.com>').message_id.
|
115
|
+
expect(Pony.build_mail(:message_id => '<abc@def.com>').message_id).to eq 'abc@def.com'
|
116
116
|
end
|
117
117
|
|
118
118
|
it "custom headers" do
|
119
|
-
Pony.build_mail(:headers => {"List-ID" => "<abc@def.com>"})['List-ID'].to_s.
|
119
|
+
expect(Pony.build_mail(:headers => {"List-ID" => "<abc@def.com>"})['List-ID'].to_s).to eq '<abc@def.com>'
|
120
120
|
end
|
121
121
|
|
122
122
|
it "sender" do
|
123
|
-
Pony.build_mail(:sender => "abc@def.com")['Sender'].to_s.
|
123
|
+
expect(Pony.build_mail(:sender => "abc@def.com")['Sender'].to_s).to eq 'abc@def.com'
|
124
124
|
end
|
125
125
|
|
126
126
|
it "utf-8 encoded subject line" do
|
127
127
|
mail = Pony.build_mail(:to => 'btp@foo', :subject => 'Café', :body => 'body body body')
|
128
|
-
mail['subject'].encoded.
|
128
|
+
expect(mail['subject'].encoded).to match( /^Subject: =\?UTF-8/ )
|
129
129
|
end
|
130
130
|
|
131
131
|
it "attachments" do
|
132
132
|
mail = Pony.build_mail(:attachments => {"foo.txt" => "content of foo.txt"}, :body => 'test')
|
133
|
-
mail.parts.length.
|
134
|
-
mail.parts.first.to_s.
|
135
|
-
mail.attachments.first.content_id.
|
133
|
+
expect(mail.parts.length).to eq 2
|
134
|
+
expect(mail.parts.first.to_s).to match( /Content-Type: text\/plain/ )
|
135
|
+
expect(mail.attachments.first.content_id).to eq "<foo.txt@#{Socket.gethostname}>"
|
136
136
|
end
|
137
137
|
|
138
138
|
it "suggests mime-type" do
|
139
139
|
mail = Pony.build_mail(:attachments => {"foo.pdf" => "content of foo.pdf"})
|
140
|
-
mail.parts.length.
|
141
|
-
mail.parts.first.to_s.
|
142
|
-
mail.parts.first.to_s.
|
143
|
-
mail.parts.first.content_transfer_encoding.to_s.
|
140
|
+
expect(mail.parts.length).to eq 1
|
141
|
+
expect(mail.parts.first.to_s).to match( /Content-Type: application\/pdf/ )
|
142
|
+
expect(mail.parts.first.to_s).to match( /filename=foo.pdf/ )
|
143
|
+
expect(mail.parts.first.content_transfer_encoding.to_s).to eq 'base64'
|
144
144
|
end
|
145
145
|
|
146
146
|
it "encodes xlsx files as base64" do
|
147
147
|
mail = Pony.build_mail(:attachments => {"foo.xlsx" => "content of foo.xlsx"})
|
148
|
-
mail.parts.length.
|
149
|
-
mail.parts.first.to_s.
|
150
|
-
mail.parts.first.to_s.
|
151
|
-
mail.parts.first.content_transfer_encoding.to_s.
|
148
|
+
expect(mail.parts.length).to eq 1
|
149
|
+
expect(mail.parts.first.to_s).to match( /Content-Type: application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet/ )
|
150
|
+
expect(mail.parts.first.to_s).to match( /filename=foo.xlsx/ )
|
151
|
+
expect(mail.parts.first.content_transfer_encoding.to_s).to eq 'base64'
|
152
152
|
end
|
153
153
|
|
154
154
|
it "passes cc and bcc as the list of recipients" do
|
155
155
|
mail = Pony.build_mail(:to => ['to'], :cc => ['cc'], :from => ['from'], :bcc => ['bcc'])
|
156
|
-
mail.destinations.
|
156
|
+
expect(mail.destinations).to eq ['to', 'cc', 'bcc']
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
160
160
|
describe "transport" do
|
161
161
|
it "transports via smtp if no sendmail binary" do
|
162
|
-
Pony.stub
|
163
|
-
Pony.
|
162
|
+
Pony.stub(:sendmail_binary).and_return('/does/not/exist')
|
163
|
+
expect(Pony).to receive(:build_mail).with(hash_including(:via => :smtp))
|
164
164
|
Pony.mail(:to => 'foo@bar')
|
165
165
|
end
|
166
166
|
|
167
167
|
it "defaults to sendmail if no via is specified and sendmail exists" do
|
168
|
-
File.stub
|
169
|
-
Pony.
|
168
|
+
File.stub(:executable?).and_return(true)
|
169
|
+
expect(Pony).to receive(:build_mail).with(hash_including(:via => :sendmail))
|
170
170
|
Pony.mail(:to => 'foo@bar')
|
171
171
|
end
|
172
172
|
|
@@ -174,12 +174,12 @@ describe Pony do
|
|
174
174
|
|
175
175
|
it "defaults to localhost as the SMTP server" do
|
176
176
|
mail = Pony.build_mail(:to => "foo@bar", :enable_starttls_auto => true, :via => :smtp)
|
177
|
-
mail.delivery_method.settings[:address].
|
177
|
+
expect(mail.delivery_method.settings[:address]).to eq 'localhost'
|
178
178
|
end
|
179
179
|
|
180
180
|
it "enable starttls when tls option is true" do
|
181
181
|
mail = Pony.build_mail(:to => "foo@bar", :enable_starttls_auto => true, :via => :smtp)
|
182
|
-
mail.delivery_method.settings[:enable_starttls_auto].
|
182
|
+
expect(mail.delivery_method.settings[:enable_starttls_auto]).to eq true
|
183
183
|
end
|
184
184
|
end
|
185
185
|
end
|
@@ -187,32 +187,32 @@ describe Pony do
|
|
187
187
|
describe ":via option should over-ride the default transport mechanism" do
|
188
188
|
it "should send via sendmail if :via => sendmail" do
|
189
189
|
mail = Pony.build_mail(:to => 'joe@example.com', :via => :sendmail)
|
190
|
-
mail.delivery_method.kind_of?(Mail::Sendmail).
|
190
|
+
expect(mail.delivery_method.kind_of?(Mail::Sendmail)).to eq true
|
191
191
|
end
|
192
192
|
|
193
193
|
it "should send via smtp if :via => smtp" do
|
194
194
|
mail = Pony.build_mail(:to => 'joe@example.com', :via => :smtp)
|
195
|
-
mail.delivery_method.kind_of?(Mail::SMTP).
|
195
|
+
expect(mail.delivery_method.kind_of?(Mail::SMTP)).to eq true
|
196
196
|
end
|
197
197
|
|
198
198
|
end
|
199
199
|
|
200
200
|
describe "sendmail binary location" do
|
201
201
|
it "should default to /usr/sbin/sendmail if not in path" do
|
202
|
-
Pony.stub
|
203
|
-
Pony.sendmail_binary.
|
202
|
+
Pony.stub(:'`').and_return('')
|
203
|
+
expect(Pony.sendmail_binary).to eq '/usr/sbin/sendmail'
|
204
204
|
end
|
205
205
|
end
|
206
206
|
|
207
207
|
describe "default options" do
|
208
208
|
it "should use default options" do
|
209
|
-
Pony.
|
209
|
+
expect(Pony).to receive(:build_mail).with(hash_including(:from => 'noreply@pony'))
|
210
210
|
Pony.options = { :from => 'noreply@pony' }
|
211
211
|
Pony.mail(:to => 'foo@bar')
|
212
212
|
end
|
213
213
|
|
214
214
|
it "should merge default options with options" do
|
215
|
-
Pony.
|
215
|
+
expect(Pony).to receive(:build_mail).with(hash_including(:from => 'override@pony'))
|
216
216
|
Pony.options = { :from => 'noreply@pony' }
|
217
217
|
Pony.mail(:from => 'override@pony', :to => "foo@bar")
|
218
218
|
end
|
@@ -221,7 +221,25 @@ describe Pony do
|
|
221
221
|
input = { :from => 'noreply@pony' }
|
222
222
|
Pony.options = input
|
223
223
|
output = Pony.options
|
224
|
-
output.
|
224
|
+
expect(output).to eq input
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
describe "content type" do
|
229
|
+
context "mail with attachments, html_body and body " do
|
230
|
+
subject(:mail) do
|
231
|
+
Pony.build_mail(
|
232
|
+
:body => 'test',
|
233
|
+
:html_body => 'What do you know, Joe?',
|
234
|
+
:attachments => {"foo.txt" => "content of foo.txt"},
|
235
|
+
)
|
236
|
+
end
|
237
|
+
|
238
|
+
it { expect(mail.parts.length).to eq 3 }
|
239
|
+
it { expect(mail.content_type.to_s).to include( 'multipart/mixed' ) }
|
240
|
+
it { expect(mail.parts[0].to_s).to include( 'Content-Type: text/html' ) }
|
241
|
+
it { expect(mail.parts[1].to_s).to include( 'Content-Type: text/plain' ) }
|
242
|
+
it { expect(mail.parts[2].to_s).to include( 'Content-Type: text/plain' ) }
|
225
243
|
end
|
226
244
|
end
|
227
245
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: '1.7'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Wiggins
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mail
|
@@ -31,14 +31,14 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - '>='
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: 2.
|
34
|
+
version: '2.14'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - '>='
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: 2.
|
41
|
+
version: '2.14'
|
42
42
|
description: 'Send email in one command: Pony.mail(:to => ''someone@example.com'',
|
43
43
|
:body => ''hello'')'
|
44
44
|
email: ben@throwingbones.com
|