decoration_mail 0.3.2 → 0.3.3
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b04b9978b9c7fa7cda09b212f30f61c6529c283
|
4
|
+
data.tar.gz: 6ff9ac2fd21e687d405845f05fd5f5dd1836400c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 343b7877015138a6114f69694ebd54316ad99941061500a32fb36a8d46e4be8768003bb89cc2a413ae81b3e5fc9592b934b7f73ee77ade7a81f4a527ac3f3273
|
7
|
+
data.tar.gz: 5d473d0a78811792ed800754665e6a52260810b7293f5f053d63a4edf67d8f3b0593a0ea0c0f5ed136ab093ed710f6578f170ff6543d6be8e004d144d141e105
|
data/lib/decoration_mail/html.rb
CHANGED
@@ -4,6 +4,7 @@ module DecorationMail
|
|
4
4
|
class HTML
|
5
5
|
def initialize(str)
|
6
6
|
@tree = Nokogiri.HTML(str)
|
7
|
+
@unresolved_references = @tree.css('img').map{|img| img['src'] }
|
7
8
|
raise ArgumentError, 'invalid HTML' if @tree.search("body").empty?
|
8
9
|
|
9
10
|
convert_font_color_to_css
|
@@ -26,6 +27,7 @@ module DecorationMail
|
|
26
27
|
end
|
27
28
|
|
28
29
|
def update_img_src(from, to)
|
30
|
+
@unresolved_references.delete(from)
|
29
31
|
@tree.css("img[src=\"#{from}\"]").each do |e|
|
30
32
|
if to
|
31
33
|
e['src'] = to
|
@@ -36,6 +38,7 @@ module DecorationMail
|
|
36
38
|
end
|
37
39
|
|
38
40
|
def to_s
|
41
|
+
remove_invalid_references
|
39
42
|
to_div.to_html
|
40
43
|
end
|
41
44
|
|
@@ -119,5 +122,19 @@ module DecorationMail
|
|
119
122
|
end
|
120
123
|
end
|
121
124
|
end
|
125
|
+
|
126
|
+
def invalid_references
|
127
|
+
@unresolved_references.reject do |src|
|
128
|
+
%w(http https data).include? URI.parse(src).scheme
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def remove_invalid_references
|
133
|
+
invalid_references.each do |src|
|
134
|
+
@tree.css("img[src=\"#{src}\"]").each do |e|
|
135
|
+
e.remove
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
122
139
|
end
|
123
140
|
end
|
@@ -283,4 +283,18 @@ describe DecorationMail::Base do
|
|
283
283
|
end
|
284
284
|
end
|
285
285
|
end
|
286
|
+
|
287
|
+
context "with imcomplete HTML mail(contains img tag but image part is omitted)" do
|
288
|
+
subject do
|
289
|
+
Mail.read(File.expand_path('../../resources/incomplete_decoration.eml', __FILE__)).decoration
|
290
|
+
end
|
291
|
+
|
292
|
+
it "has no images" do
|
293
|
+
expect(subject.images).to be_empty
|
294
|
+
end
|
295
|
+
|
296
|
+
it "omits img tag in returned HTML" do
|
297
|
+
expect(subject.save{}).not_to match '<img'
|
298
|
+
end
|
299
|
+
end
|
286
300
|
end
|
@@ -59,14 +59,14 @@ describe DecorationMail::HTML do
|
|
59
59
|
|
60
60
|
it "changes img's src to new one" do
|
61
61
|
subject.update_img_src('cid:hoge', 'http://example.com/img.gif')
|
62
|
-
subject.to_s.should == %(<div>ほげほげ<img src="http://example.com/img.gif"
|
62
|
+
subject.to_s.should == %(<div>ほげほげ<img src="http://example.com/img.gif">\n</div>)
|
63
63
|
end
|
64
64
|
|
65
65
|
context "when src is nil" do
|
66
66
|
before{ subject.update_img_src('cid:hoge', nil) }
|
67
67
|
|
68
68
|
it "deletes the img tag" do
|
69
|
-
subject.to_s.should == %(<div
|
69
|
+
subject.to_s.should == %(<div>ほげほげ</div>)
|
70
70
|
end
|
71
71
|
end
|
72
72
|
end
|
@@ -89,6 +89,52 @@ describe DecorationMail::HTML do
|
|
89
89
|
should be_converted_to '<div>ほげほげ</div>'
|
90
90
|
end
|
91
91
|
end
|
92
|
+
|
93
|
+
context "when the html contains cid reference which is not resloved by #update_img_src" do
|
94
|
+
subject{ DecorationMail::HTML.new('<body>ほげほげ<img src="cid:hoge"><img src="cid:fuga"></body>') }
|
95
|
+
before do
|
96
|
+
subject.update_img_src('cid:hoge', 'hoge.gif')
|
97
|
+
end
|
98
|
+
|
99
|
+
it "removes the img tag" do
|
100
|
+
subject.to_s.should == %(<div>ほげほげ<img src="hoge.gif">\n</div>)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "when the html contains img tag whose src is relative path" do
|
105
|
+
it "removes the img tag" do
|
106
|
+
'<body>ほげほげ<img src="../hoge.gif" /></body>'.
|
107
|
+
should be_converted_to '<div>ほげほげ</div>'
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "when the html contains img tag whose src is absolute URI with file scheme" do
|
112
|
+
it "removes the img tag" do
|
113
|
+
'<body>ほげほげ<img src="file:///hoge.gif" /></body>'.
|
114
|
+
should be_converted_to '<div>ほげほげ</div>'
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "when the html contains img tag whose src is absolute URI with http scheme" do
|
119
|
+
it "keeps the img tag" do
|
120
|
+
'<body>ほげほげ<img src="http://example.com/hoge.gif" /></body>'.
|
121
|
+
should be_converted_to %(<div>ほげほげ<img src="http://example.com/hoge.gif">\n</div>)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context "when the html contains img tag whose src is absolute URI with https scheme" do
|
126
|
+
it "keeps the img tag" do
|
127
|
+
'<body>ほげほげ<img src="https://example.com/hoge.gif" /></body>'.
|
128
|
+
should be_converted_to %(<div>ほげほげ<img src="https://example.com/hoge.gif">\n</div>)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
context "when the html contains img tag whose src is URI with data scheme" do
|
133
|
+
it "keeps the img tag" do
|
134
|
+
'<body>ほげほげ<img src="data:image/gif;base64,R0lG" /></body>'.
|
135
|
+
should be_converted_to %(<div>ほげほげ<img src="data:image/gif;base64,R0lG">\n</div>)
|
136
|
+
end
|
137
|
+
end
|
92
138
|
end
|
93
139
|
|
94
140
|
describe "#convert_font_color_to_css" do
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Return-Path: <example@gmail.com>
|
2
|
+
X-Original-To: example@green-bell.jp
|
3
|
+
Delivered-To: example@green-bell.jp
|
4
|
+
MIME-Version: 1.0
|
5
|
+
Date: Wed, 14 Jan 2015 17:33:44 +0900
|
6
|
+
Message-ID: <CAAbqp33jRwy6MW_njv6Qd=kzygGcXD_qYiv-qqvRBaZCbtY+pA@mail.gmail.com>
|
7
|
+
Subject: =?UTF-8?B?5LiN5a6M5YWo44Gq44OH44Kz44Oh?=
|
8
|
+
From: <example@gmail.com>
|
9
|
+
To: example@green-bell.jp
|
10
|
+
Content-Type: multipart/related; boundary=001a11c23564f9bc19050c98980b
|
11
|
+
|
12
|
+
--001a11c23564f9bc19050c98980b
|
13
|
+
Content-Type: multipart/alternative; boundary=001a11c23564f9bc16050c98980a
|
14
|
+
|
15
|
+
--001a11c23564f9bc16050c98980a
|
16
|
+
Content-Type: text/plain; charset=UTF-8
|
17
|
+
Content-Transfer-Encoding: base64
|
18
|
+
|
19
|
+
Q29udGVudC1JROOBruWPgueFp+OBruOBv+OBp+OAgQ0KDQrigIsNCueUu+WDj+acrOS9k+OBjOa3
|
20
|
+
u+S7mOOBleOCjOOBpuOBhOOBquOBhOODoeODvOODq+OBp+OBmeOAgg0K
|
21
|
+
--001a11c23564f9bc16050c98980a
|
22
|
+
Content-Type: text/html; charset=UTF-8
|
23
|
+
Content-Transfer-Encoding: base64
|
24
|
+
|
25
|
+
PGRpdiBkaXI9Imx0ciI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4Ij5Db250ZW50LUlE44Gu
|
26
|
+
5Y+C54Wn44Gu44G/44Gn44CBPC9zcGFuPjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxNHB4
|
27
|
+
Ij48aW1nIHNyYz0iY2lkOmlpX2k0d2diaHV1MF8xNGFlNzkzODA1NTU5ZTU4IiB3aWR0aD0iMSIg
|
28
|
+
aGVpZ2h0PSIxIj48YnI+4oCLPGJyPjwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250
|
29
|
+
LXNpemU6MTRweCI+55S75YOP5pys5L2T44GM5re75LuY44GV44KM44Gm44GE44Gq44GE44Oh44O8
|
30
|
+
44Or44Gn44GZ44CCPC9zcGFuPjxicj48L2Rpdj48L2Rpdj4NCg==
|
31
|
+
--001a11c23564f9bc16050c98980a--
|
32
|
+
--001a11c23564f9bc19050c98980b--
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: decoration_mail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dai Akatsuka
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-01-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mail
|
@@ -108,6 +108,7 @@ files:
|
|
108
108
|
- spec/resources/au_decoration_with_attachment.eml
|
109
109
|
- spec/resources/docomo_decoration.eml
|
110
110
|
- spec/resources/docomo_decoration_with_attachment.eml
|
111
|
+
- spec/resources/incomplete_decoration.eml
|
111
112
|
- spec/resources/other_decoration.eml
|
112
113
|
- spec/resources/softbank_decoration.eml
|
113
114
|
- spec/resources/softbank_decoration_with_attachment.eml
|
@@ -144,6 +145,7 @@ test_files:
|
|
144
145
|
- spec/resources/au_decoration_with_attachment.eml
|
145
146
|
- spec/resources/docomo_decoration.eml
|
146
147
|
- spec/resources/docomo_decoration_with_attachment.eml
|
148
|
+
- spec/resources/incomplete_decoration.eml
|
147
149
|
- spec/resources/other_decoration.eml
|
148
150
|
- spec/resources/softbank_decoration.eml
|
149
151
|
- spec/resources/softbank_decoration_with_attachment.eml
|