Skip to content

Commit d654286

Browse files
committed
Support nested message/rfc822 case
1 parent 09be492 commit d654286

File tree

3 files changed

+69
-2
lines changed

3 files changed

+69
-2
lines changed

lib/chupa-text/decomposers/mail.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,13 @@ def decompose(data)
4646
body.force_encoding(part.charset) if part.charset
4747

4848
part_data = TextData.new(body, :source_data => data)
49-
part_data.uri = "#{data.uri}\##{i}"
49+
uri = data.uri.dup
50+
if uri.fragment
51+
uri.fragment += "-#{i}"
52+
else
53+
uri.fragment = i.to_s
54+
end
55+
part_data.uri = uri
5056
part_data.mime_type = part.mime_type if part.mime_type
5157
part_data[:encoding] = body.encoding.to_s
5258
yield(part_data)

test/fixture/nested-rfc822.eml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
Mime-Version: 1.0
2+
Subject: Hello
3+
From: Sender <[email protected]>
4+
To: Recipient <[email protected]>
5+
Date: Sun, 19 Feb 2017 00:27:55 +0900 (JST)
6+
Content-Type: multipart/alternative;
7+
boundary="++++";
8+
charset=UTF-8
9+
Content-Transfer-Encoding: 8bit
10+
11+
--++++
12+
Content-Type: message/rfc822;
13+
charset=UTF-8
14+
Content-Transfer-Encoding: 8bit
15+
Mime-Version: 1.0
16+
17+
Content-Type: multipart/alternative;
18+
boundary="====";
19+
charset=UTF-8
20+
Content-Transfer-Encoding: 8bit
21+
22+
--====
23+
Content-Type: message/rfc822;
24+
charset=UTF-8
25+
Content-Transfer-Encoding: 8bit
26+
27+
Mime-Version: 1.0
28+
Content-Type: text/plain
29+
Subject: Sub Hello
30+
31+
Sub World
32+
--====
33+
34+
--++++

test/test-mail.rb

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,22 @@ def decompose(path)
8484
data.mime_type = "message/rfc822"
8585

8686
decomposed = []
87-
decomposer.decompose(data) do |decomposed_data|
87+
decompose_data(data) do |decomposed_data|
8888
decomposed << decomposed_data
8989
end
9090
decomposed
9191
end
9292

93+
def decompose_data(data, &block)
94+
decomposer.decompose(data) do |decomposed_data|
95+
if decomposer.target?(decomposed_data)
96+
decompose_data(decomposed_data, &block)
97+
else
98+
yield(decomposed_data)
99+
end
100+
end
101+
end
102+
93103
sub_test_case("attributes") do
94104
def test_subject
95105
assert_equal(["Hello"], decompose("subject"))
@@ -163,5 +173,22 @@ def decompose
163173
super(fixture_path("no-mime.eml"))
164174
end
165175
end
176+
177+
sub_test_case("nested message/rfc822") do
178+
def test_body
179+
assert_equal([
180+
[
181+
fixture_path("nested-rfc822.eml") + "#0-0-0",
182+
"Sub World",
183+
],
184+
],
185+
decompose.collect {|data| [data.uri.to_s, data.body]})
186+
end
187+
188+
private
189+
def decompose
190+
super(fixture_path("nested-rfc822.eml"))
191+
end
192+
end
166193
end
167194
end

0 commit comments

Comments
 (0)