decoration_mail 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
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
|