rmail 0.17 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS +10 -0
- data/Rakefile +186 -0
- data/TODO +3 -0
- data/lib/rmail/header.rb +3 -9
- data/{tests → test}/addrgrammar.txt +0 -0
- data/{tests → test}/data/mbox.odd +0 -0
- data/{tests → test}/data/mbox.simple +0 -0
- data/{tests → test}/data/multipart/data.1 +0 -0
- data/{tests → test}/data/multipart/data.10 +0 -0
- data/{tests → test}/data/multipart/data.11 +0 -0
- data/{tests → test}/data/multipart/data.12 +0 -0
- data/{tests → test}/data/multipart/data.13 +0 -0
- data/{tests → test}/data/multipart/data.14 +0 -0
- data/{tests → test}/data/multipart/data.15 +0 -0
- data/{tests → test}/data/multipart/data.16 +0 -0
- data/{tests → test}/data/multipart/data.17 +0 -0
- data/{tests → test}/data/multipart/data.2 +0 -0
- data/{tests → test}/data/multipart/data.3 +0 -0
- data/{tests → test}/data/multipart/data.4 +0 -0
- data/{tests → test}/data/multipart/data.5 +0 -0
- data/{tests → test}/data/multipart/data.6 +0 -0
- data/{tests → test}/data/multipart/data.7 +0 -0
- data/{tests → test}/data/multipart/data.8 +0 -0
- data/{tests → test}/data/multipart/data.9 +0 -0
- data/{tests → test}/data/parser.badmime1 +0 -0
- data/{tests → test}/data/parser.badmime2 +0 -0
- data/{tests → test}/data/parser.nested-multipart +0 -0
- data/{tests → test}/data/parser.nested-simple +0 -0
- data/{tests → test}/data/parser.nested-simple2 +0 -0
- data/{tests → test}/data/parser.nested-simple3 +0 -0
- data/{tests → test}/data/parser.rfc822 +0 -0
- data/{tests → test}/data/parser.simple-mime +0 -0
- data/{tests → test}/data/parser/multipart.1 +0 -0
- data/{tests → test}/data/parser/multipart.10 +0 -0
- data/{tests → test}/data/parser/multipart.11 +0 -0
- data/{tests → test}/data/parser/multipart.12 +0 -0
- data/{tests → test}/data/parser/multipart.13 +0 -0
- data/{tests → test}/data/parser/multipart.14 +0 -0
- data/{tests → test}/data/parser/multipart.15 +0 -0
- data/{tests → test}/data/parser/multipart.16 +0 -0
- data/{tests → test}/data/parser/multipart.2 +0 -0
- data/{tests → test}/data/parser/multipart.3 +0 -0
- data/{tests → test}/data/parser/multipart.4 +0 -0
- data/{tests → test}/data/parser/multipart.5 +0 -0
- data/{tests → test}/data/parser/multipart.6 +0 -0
- data/{tests → test}/data/parser/multipart.7 +0 -0
- data/{tests → test}/data/parser/multipart.8 +0 -0
- data/{tests → test}/data/parser/multipart.9 +0 -0
- data/{tests → test}/data/transparency/absolute.1 +0 -0
- data/{tests → test}/data/transparency/absolute.2 +0 -0
- data/{tests → test}/data/transparency/absolute.3 +0 -0
- data/{tests → test}/data/transparency/absolute.4 +0 -0
- data/{tests → test}/data/transparency/absolute.5 +0 -0
- data/{tests → test}/data/transparency/absolute.6 +0 -0
- data/{tests → test}/data/transparency/message.1 +0 -0
- data/{tests → test}/data/transparency/message.2 +0 -0
- data/{tests → test}/data/transparency/message.3 +0 -0
- data/{tests → test}/data/transparency/message.4 +0 -0
- data/{tests → test}/data/transparency/message.5 +0 -0
- data/{tests → test}/data/transparency/message.6 +0 -0
- data/{tests → test}/runtests.rb +1 -1
- data/{tests → test}/testaddress.rb +9 -9
- data/{tests → test}/testbase.rb +9 -12
- data/{tests → test}/testheader.rb +70 -52
- data/{tests → test}/testmailbox.rb +1 -1
- data/{tests → test}/testmboxreader.rb +1 -1
- data/{tests → test}/testmessage.rb +3 -3
- data/{tests → test}/testparser.rb +3 -3
- data/{tests → test}/testparsermultipart.rb +1 -1
- data/{tests → test}/testpushbackreader.rb +2 -2
- data/{tests → test}/testserialize.rb +1 -1
- data/{tests → test}/testtestbase.rb +8 -4
- data/{tests → test}/testtranspparency.rb +3 -3
- data/version +1 -0
- metadata +153 -135
- data/rmail.gemspec +0 -17
data/NEWS
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
= Changes in RubyMail 1.0.0 (released 2008-01-05)
|
2
|
+
|
3
|
+
- This version differs *only* in the changes required for Ruby 1.9
|
4
|
+
support. It is otherwise "bug compatible" with version 0.17. Users
|
5
|
+
of version 0.17 can safely upgrade to 1.0.0. You will lose the
|
6
|
+
ability to run the tests if you are using Ruby 1.6 (but who is doing
|
7
|
+
that these days?).
|
8
|
+
|
9
|
+
- Add a Rakefile. Add a gem hosted on rubyforge.org.
|
10
|
+
|
1
11
|
= Changes in RubyMail 0.17 (released 2004-04-27)
|
2
12
|
|
3
13
|
- Handle parsing addresses with non-ASCII display names. We don't do
|
data/Rakefile
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
#
|
4
|
+
# This is a Ruby file, used by the "rake" make-like program.
|
5
|
+
#
|
6
|
+
|
7
|
+
begin
|
8
|
+
# First, we use a few ruby things...
|
9
|
+
require 'rubygems'
|
10
|
+
require 'rake/gempackagetask'
|
11
|
+
end
|
12
|
+
require 'rake/rdoctask'
|
13
|
+
require 'rake/testtask'
|
14
|
+
require 'shellwords'
|
15
|
+
|
16
|
+
#
|
17
|
+
# The default task is run if rake is given no explicit arguments.
|
18
|
+
#
|
19
|
+
desc "Default Task"
|
20
|
+
task :default => :test
|
21
|
+
|
22
|
+
#
|
23
|
+
# Test tasks
|
24
|
+
#
|
25
|
+
Rake::TestTask.new do |t|
|
26
|
+
t.libs << 'test'
|
27
|
+
t.pattern = 'test/test*.rb'
|
28
|
+
t.verbose = true
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
def unreleasable_reason
|
33
|
+
can_release_package
|
34
|
+
unreleasable_reason
|
35
|
+
end
|
36
|
+
|
37
|
+
def can_release_package
|
38
|
+
reasons = []
|
39
|
+
|
40
|
+
unless news_is_current
|
41
|
+
reasons << 'the NEWS file is not current'
|
42
|
+
end
|
43
|
+
|
44
|
+
unless defined?(Gem)
|
45
|
+
reasons << 'RubyGems is not installed'
|
46
|
+
end
|
47
|
+
|
48
|
+
reason = if reasons.empty?
|
49
|
+
""
|
50
|
+
else
|
51
|
+
last = reasons.pop
|
52
|
+
("Can not release package because " +
|
53
|
+
(reasons.empty? ? "#{last}." :
|
54
|
+
(reasons.join(", ") + " and #{last}.")))
|
55
|
+
end
|
56
|
+
can_release = reason.length == 0
|
57
|
+
|
58
|
+
self.class.module_eval <<-END_OF_CODE
|
59
|
+
def unreleasable_reason
|
60
|
+
\"#{reason}\"
|
61
|
+
end
|
62
|
+
def can_release_package
|
63
|
+
#{can_release.inspect}
|
64
|
+
end
|
65
|
+
END_OF_CODE
|
66
|
+
|
67
|
+
can_release_package
|
68
|
+
end
|
69
|
+
|
70
|
+
# Is the NEWS file current?
|
71
|
+
def news_is_current
|
72
|
+
today = Time.now.strftime('%Y-%m-%d')
|
73
|
+
version = Regexp.new(Regexp.quote(PKG_VERSION))
|
74
|
+
if IO.readlines('NEWS').first =~
|
75
|
+
/= Changes in RubyMail #{PKG_VERSION} \(released #{today}\)$/
|
76
|
+
true
|
77
|
+
else
|
78
|
+
false
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
#
|
84
|
+
# These PKG_ variables are used by Rake's package rule.
|
85
|
+
#
|
86
|
+
PKG_VERSION = begin
|
87
|
+
version= IO.readlines('version').first.chomp
|
88
|
+
if version =~ /^\d+\.\d+\.\d+$/
|
89
|
+
version.untaint
|
90
|
+
else
|
91
|
+
fail "package version is bogus"
|
92
|
+
end
|
93
|
+
version
|
94
|
+
end
|
95
|
+
|
96
|
+
PKG_FILES = FileList.new('test/**/*',
|
97
|
+
'guide/**/*',
|
98
|
+
'lib/**/*',
|
99
|
+
'install.rb',
|
100
|
+
'NEWS',
|
101
|
+
'NOTES',
|
102
|
+
'README',
|
103
|
+
'THANKS',
|
104
|
+
'TODO',
|
105
|
+
'Rakefile',
|
106
|
+
'version')
|
107
|
+
|
108
|
+
#
|
109
|
+
# Teach Rake how to build the RDoc documentation for this package.
|
110
|
+
#
|
111
|
+
rdoc = Rake::RDocTask.new do |rdoc|
|
112
|
+
rdoc.main = 'README'
|
113
|
+
rdoc.rdoc_files.include("README", "NEWS", "THANKS",
|
114
|
+
"TODO", "guide/*.txt", "lib/**/*.rb")
|
115
|
+
rdoc.rdoc_files.exclude(/\bSCCS\b/,
|
116
|
+
"lib/rubymail/parser/*")
|
117
|
+
unreleased = if can_release_package
|
118
|
+
""
|
119
|
+
else
|
120
|
+
" (UNRELEASED!)"
|
121
|
+
end
|
122
|
+
rdoc.title = "RubyMail Documentation (version #{PKG_VERSION})"
|
123
|
+
rdoc.options << '--exclude' << 'SCCS'
|
124
|
+
end
|
125
|
+
|
126
|
+
# Make sure that we don't package anything that hasn't been tagged.
|
127
|
+
task :package => [ :can_release ]
|
128
|
+
|
129
|
+
desc "Check if the package is in a releasable state."
|
130
|
+
task :can_release do
|
131
|
+
unless can_release_package
|
132
|
+
puts unreleasable_reason
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
#
|
137
|
+
# Create a Gem::Specification right in the Rakefile, using some of the
|
138
|
+
# variables we have set up above.
|
139
|
+
#
|
140
|
+
if defined?(Gem)
|
141
|
+
spec = Gem::Specification.new do |s|
|
142
|
+
s.name = 'rmail'
|
143
|
+
s.version = PKG_VERSION + if can_release_package
|
144
|
+
''
|
145
|
+
else
|
146
|
+
'.666'
|
147
|
+
end
|
148
|
+
s.summary = 'A MIME mail parsing and generation library.'
|
149
|
+
s.description = <<-EOF
|
150
|
+
RMail is a lightweight mail library containing various utility classes and
|
151
|
+
modules that allow ruby scripts to parse, modify, and generate MIME mail
|
152
|
+
messages.
|
153
|
+
EOF
|
154
|
+
|
155
|
+
s.files = PKG_FILES.to_a
|
156
|
+
|
157
|
+
s.required_ruby_version = Gem::Version::Requirement.new(">= 1.8.1")
|
158
|
+
|
159
|
+
s.has_rdoc = true
|
160
|
+
s.extra_rdoc_files = rdoc.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
|
161
|
+
s.rdoc_options.concat([ '--title', rdoc.title, '--main', rdoc.main,
|
162
|
+
rdoc.options ].flatten)
|
163
|
+
|
164
|
+
s.test_files = FileList['test/tc_*.rb'].to_a
|
165
|
+
|
166
|
+
s.author = "Matt Armstrong"
|
167
|
+
s.email = "matt@rfc20.org"
|
168
|
+
s.homepage = "http://www.rfc20.org/rubymail"
|
169
|
+
|
170
|
+
s.rubyforge_project = "rubymail"
|
171
|
+
end
|
172
|
+
|
173
|
+
#
|
174
|
+
# Use our Gem::Specification to make some package tasks.
|
175
|
+
#
|
176
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
177
|
+
pkg.need_zip = true
|
178
|
+
pkg.need_tar = true
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
desc "Install RubyMail using the standard install.rb script"
|
183
|
+
task :install do
|
184
|
+
ruby "install.rb"
|
185
|
+
end
|
186
|
+
|
data/TODO
CHANGED
@@ -6,6 +6,9 @@ is missing.
|
|
6
6
|
- StreamHandler should get preamble_begin and preamble_end callbacks.
|
7
7
|
Same for epilogue_begin, epilogue_end.
|
8
8
|
|
9
|
+
- Add a Rakefile rule to run the tests in the super anal way (against
|
10
|
+
multiple versions of Ruby).
|
11
|
+
|
9
12
|
= STOLEN
|
10
13
|
|
11
14
|
- Header continuation issue:
|
data/lib/rmail/header.rb
CHANGED
@@ -263,7 +263,7 @@ module RMail
|
|
263
263
|
|
264
264
|
# Deletes the field at the specified index and returns its value.
|
265
265
|
def delete_at(index)
|
266
|
-
@fields
|
266
|
+
@fields.delete_at(index)
|
267
267
|
self
|
268
268
|
end
|
269
269
|
|
@@ -282,7 +282,7 @@ module RMail
|
|
282
282
|
# Returns self.
|
283
283
|
def each # yields: name, value
|
284
284
|
@fields.each { |i|
|
285
|
-
yield
|
285
|
+
yield [i.name, i.value]
|
286
286
|
}
|
287
287
|
end
|
288
288
|
alias each_pair each
|
@@ -832,15 +832,9 @@ module RMail
|
|
832
832
|
# of this message. This uses the contents of the To, Cc, and Bcc
|
833
833
|
# fields. Duplicate addresses are eliminated.
|
834
834
|
def recipients
|
835
|
-
|
836
|
-
retval.concat(to)
|
837
|
-
retval.concat(cc)
|
838
|
-
retval.concat(bcc)
|
839
|
-
retval.uniq
|
835
|
+
RMail::Address::List.new([ to, cc, bcc ].flatten.uniq)
|
840
836
|
end
|
841
837
|
|
842
|
-
# recipients
|
843
|
-
|
844
838
|
# Retrieve a given field's value as an RMail::Address::List of
|
845
839
|
# RMail::Address objects.
|
846
840
|
#
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/{tests → test}/runtests.rb
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#--
|
3
|
-
# Copyright (C) 2001, 2002, 2003 Matt Armstrong. All rights reserved.
|
3
|
+
# Copyright (C) 2001, 2002, 2003, 2007 Matt Armstrong. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without
|
6
6
|
# modification, are permitted provided that the following conditions are met:
|
@@ -25,7 +25,7 @@
|
|
25
25
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
26
26
|
#
|
27
27
|
|
28
|
-
require '
|
28
|
+
require 'test/testbase'
|
29
29
|
require 'rmail/address'
|
30
30
|
|
31
31
|
class TestRMailAddress < TestBase
|
@@ -44,7 +44,7 @@ class TestRMailAddress < TestBase
|
|
44
44
|
def validate_method(object, method, *args)
|
45
45
|
assert(method_list.include?(method),
|
46
46
|
"#{method.inspect} not in #{method_list.inspect}")
|
47
|
-
assert_respond_to(
|
47
|
+
assert_respond_to(object, method)
|
48
48
|
ret = nil
|
49
49
|
ret = object.send(method, *args)
|
50
50
|
if block_given?
|
@@ -1079,7 +1079,7 @@ class TestRMailAddress < TestBase
|
|
1079
1079
|
end
|
1080
1080
|
}.to_s ]
|
1081
1081
|
strings.each {|string|
|
1082
|
-
|
1082
|
+
assert_nothing_raised("failed for string #{string.inspect}") {
|
1083
1083
|
addrs = RMail::Address.parse(string)
|
1084
1084
|
addrs.each {|address|
|
1085
1085
|
method_list.each {|method|
|
@@ -1117,13 +1117,13 @@ class TestRMailAddress < TestBase
|
|
1117
1117
|
assert_equal(nil, addr.domain)
|
1118
1118
|
assert_equal(nil, addr.local)
|
1119
1119
|
|
1120
|
-
e =
|
1120
|
+
e = assert_raise(ArgumentError) {
|
1121
1121
|
RMail::Address.new(["bob"])
|
1122
1122
|
}
|
1123
|
-
e =
|
1123
|
+
e = assert_raise(ArgumentError) {
|
1124
1124
|
RMail::Address.new(Object.new)
|
1125
1125
|
}
|
1126
|
-
e =
|
1126
|
+
e = assert_raise(ArgumentError) {
|
1127
1127
|
RMail::Address.new(Hash.new)
|
1128
1128
|
}
|
1129
1129
|
end
|
@@ -1176,13 +1176,13 @@ class TestRMailAddress < TestBase
|
|
1176
1176
|
assert(a1.eql?(a2))
|
1177
1177
|
|
1178
1178
|
a1 = RMail::Address.new("Zeus <bob@example.com>")
|
1179
|
-
|
1179
|
+
assert_raise(TypeError) {
|
1180
1180
|
a1.eql?("bob@eaxample.com")
|
1181
1181
|
}
|
1182
1182
|
end
|
1183
1183
|
|
1184
1184
|
def test_rmail_address_hash
|
1185
|
-
|
1185
|
+
assert_nothing_raised {
|
1186
1186
|
RMail::Address.new.hash
|
1187
1187
|
}
|
1188
1188
|
a1 = RMail::Address.new("Zeus <bob@example.com>")
|
data/{tests → test}/testbase.rb
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#--
|
3
|
-
# Copyright (C) 2001, 2002, 2003 Matt Armstrong. All rights reserved.
|
3
|
+
# Copyright (C) 2001, 2002, 2003, 2007 Matt Armstrong. All rights reserved.
|
4
4
|
#
|
5
5
|
# Redistribution and use in source and binary forms, with or without
|
6
6
|
# modification, are permitted provided that the following conditions are met:
|
@@ -27,28 +27,25 @@
|
|
27
27
|
|
28
28
|
# Base for all the test cases, providing a default setup and teardown
|
29
29
|
|
30
|
-
require '
|
30
|
+
require 'test/unit'
|
31
31
|
require 'rbconfig.rb'
|
32
32
|
require 'tempfile'
|
33
33
|
require 'find'
|
34
|
-
require '
|
34
|
+
require 'fileutils'
|
35
35
|
|
36
36
|
begin
|
37
37
|
require 'pp'
|
38
38
|
rescue LoadError
|
39
39
|
end
|
40
40
|
|
41
|
-
class TestBase <
|
41
|
+
class TestBase < Test::Unit::TestCase
|
42
42
|
include Config
|
43
43
|
|
44
44
|
attr_reader :scratch_dir
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
else
|
50
|
-
NameError
|
51
|
-
end
|
46
|
+
def test_nothing
|
47
|
+
assert(true) # Appease Test::Unit
|
48
|
+
end
|
52
49
|
|
53
50
|
# Print a string to a temporary file and return the file opened.
|
54
51
|
# This lets you have some test data in a string, but access it with
|
@@ -107,7 +104,7 @@ class TestBase < RUNIT::TestCase
|
|
107
104
|
|
108
105
|
def setup
|
109
106
|
@scratch_dir = File.join(Dir.getwd, "_scratch_" + name)
|
110
|
-
@data_dir = File.join(Dir.getwd, "
|
107
|
+
@data_dir = File.join(Dir.getwd, "test", "data")
|
111
108
|
@scratch_hash = {}
|
112
109
|
|
113
110
|
cleandir(@scratch_dir)
|
@@ -131,7 +128,7 @@ class TestBase < RUNIT::TestCase
|
|
131
128
|
yield f
|
132
129
|
}
|
133
130
|
rescue Errno::ENOENT
|
134
|
-
|
131
|
+
flunk("data file #{name.inspect} does not exist")
|
135
132
|
end
|
136
133
|
|
137
134
|
def data_as_string(name)
|