tmail 1.2.0 → 1.2.1
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.
- data/CHANGES +11 -0
- data/NOTES +48 -38
- data/README +3 -2
- data/Rakefile +11 -0
- data/ext/Makefile +8 -8
- data/ext/{mailscanner → tmailscanner}/tmail/MANIFEST +1 -1
- data/ext/tmailscanner/tmail/depend +1 -0
- data/ext/{mailscanner → tmailscanner}/tmail/extconf.rb +1 -1
- data/ext/{mailscanner/tmail/mailscanner.c → tmailscanner/tmail/tmailscanner.c} +10 -10
- data/lib/tmail/address.rb +9 -1
- data/lib/tmail/encode.rb +1 -0
- data/lib/tmail/header.rb +34 -2
- data/lib/tmail/mailbox.rb +3 -3
- data/lib/tmail/quoting.rb +0 -24
- data/lib/tmail/scanner.rb +4 -4
- data/lib/tmail/scanner_r.rb +1 -1
- data/lib/tmail/utils.rb +2 -3
- data/lib/tmail/version.rb +1 -1
- data/log/ChangeLog.txt +22 -0
- data/log/History.txt +1 -1
- data/meta/MANIFEST +18 -8
- data/{script → meta}/config.yaml +1 -1
- data/meta/tmail.roll +3 -0
- data/script/clobber/distclean +1 -1
- data/script/compile +2 -2
- data/script/pack/gem +93 -0
- data/script/pack/tgz +41 -0
- data/script/pack/zip +41 -0
- data/script/prepare +6 -1
- data/script/publish +2 -2
- data/script/rdoc +42 -0
- data/script/release +1 -3
- data/script/stamp +33 -0
- data/script/test +1 -1
- data/test/fixtures/mailbox +13 -0
- data/test/fixtures/mailbox_without_any_from_or_sender +10 -0
- data/test/fixtures/mailbox_without_from +11 -0
- data/test/fixtures/mailbox_without_return_path +12 -0
- data/test/fixtures/raw_email11 +2 -2
- data/test/fixtures/raw_email_with_bad_date +5 -5
- data/test/test_address.rb +32 -2
- data/test/test_attachments.rb +15 -0
- data/test/test_encode.rb +54 -52
- data/test/test_header.rb +57 -0
- data/test/test_helper.rb +1 -0
- data/test/test_mail.rb +49 -1
- data/test/test_mbox.rb +21 -0
- data/test/test_quote.rb +71 -0
- metadata +173 -153
- data/ext/mailscanner/tmail/depend +0 -1
- data/meta/ROLLRC +0 -3
data/log/History.txt
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
* Closed 16025 - TMail scanner.rb would not parse ATOM chars correctly making it fail tests where the C version passed them. Fixed this by updating the Scanner.rb version to be in step with the C version (there was an extra @ symbol in the ATOM CHARS definition that was not in the C version.) (mikel)
|
9
9
|
* Fixed scanner.rb so that it would pass the same tests that the C version does - had a sundry @ symbol inside of the ATOM CHARS
|
10
10
|
* 3 minor enhancements:
|
11
|
-
* Renamed scanner_c.c to
|
11
|
+
* Renamed scanner_c.c to tmailscanner.c (trans)
|
12
12
|
* Changed TMail::Mail#sender to have a default "default" value of nil to be in alignment with all the other interface methods (mikel)
|
13
13
|
* Made base64_decode and base64_encode into ! versions as they are destructive on the mail body (encodes the body to base64 or decodes it), made aliases for base64_decode and base64_encode to point back to the bang versions. Doing this with a view to change base64_encode to a non destructive version (returns the encoded body) in future versions. (mikel)
|
14
14
|
|
data/meta/MANIFEST
CHANGED
@@ -5,12 +5,12 @@ NOTES
|
|
5
5
|
README
|
6
6
|
ext
|
7
7
|
ext/Makefile
|
8
|
-
ext/
|
9
|
-
ext/
|
10
|
-
ext/
|
11
|
-
ext/
|
12
|
-
ext/
|
13
|
-
ext/
|
8
|
+
ext/tmailscanner
|
9
|
+
ext/tmailscanner/tmail
|
10
|
+
ext/tmailscanner/tmail/MANIFEST
|
11
|
+
ext/tmailscanner/tmail/depend
|
12
|
+
ext/tmailscanner/tmail/extconf.rb
|
13
|
+
ext/tmailscanner/tmail/tmailscanner.c
|
14
14
|
lib
|
15
15
|
lib/tmail
|
16
16
|
lib/tmail/Makefile
|
@@ -44,9 +44,10 @@ lib/tmail/version.rb
|
|
44
44
|
lib/tmail.rb
|
45
45
|
meta
|
46
46
|
meta/MANIFEST
|
47
|
-
meta/
|
47
|
+
meta/config.yaml
|
48
48
|
meta/icli.yaml
|
49
49
|
meta/project.yaml
|
50
|
+
meta/tmail.roll
|
50
51
|
sample
|
51
52
|
sample/bench_base64.rb
|
52
53
|
sample/data
|
@@ -67,18 +68,26 @@ script/clobber
|
|
67
68
|
script/clobber/distclean
|
68
69
|
script/clobber/package
|
69
70
|
script/compile
|
70
|
-
script/
|
71
|
+
script/pack
|
72
|
+
script/pack/gem
|
73
|
+
script/pack/tgz
|
74
|
+
script/pack/zip
|
71
75
|
script/prepare
|
72
76
|
script/publish
|
73
77
|
script/rdoc
|
74
78
|
script/release
|
75
79
|
script/setup
|
80
|
+
script/stamp
|
76
81
|
script/stats
|
77
82
|
script/tag
|
78
83
|
script/test
|
79
84
|
test
|
80
85
|
test/extctrl.rb
|
81
86
|
test/fixtures
|
87
|
+
test/fixtures/mailbox
|
88
|
+
test/fixtures/mailbox_without_any_from_or_sender
|
89
|
+
test/fixtures/mailbox_without_from
|
90
|
+
test/fixtures/mailbox_without_return_path
|
82
91
|
test/fixtures/raw_base64_decoded_string
|
83
92
|
test/fixtures/raw_base64_email
|
84
93
|
test/fixtures/raw_base64_encoded_string
|
@@ -114,5 +123,6 @@ test/test_helper.rb
|
|
114
123
|
test/test_mail.rb
|
115
124
|
test/test_mbox.rb
|
116
125
|
test/test_port.rb
|
126
|
+
test/test_quote.rb
|
117
127
|
test/test_scanner.rb
|
118
128
|
test/test_utils.rb
|
data/{script → meta}/config.yaml
RENAMED
data/meta/tmail.roll
ADDED
data/script/clobber/distclean
CHANGED
data/script/compile
CHANGED
@@ -8,11 +8,11 @@ end
|
|
8
8
|
|
9
9
|
task :compile_scanner do
|
10
10
|
file = nil
|
11
|
-
cd("ext/
|
11
|
+
cd("ext/tmailscanner/tmail") do
|
12
12
|
ruby "extconf.rb"
|
13
13
|
make
|
14
14
|
|
15
|
-
#file = glob("
|
15
|
+
#file = glob("tmailscanner.#{dlext}").first
|
16
16
|
#file = File.expand_path(file) if file
|
17
17
|
end
|
18
18
|
|
data/script/pack/gem
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
#!/usr/bin/env ratch
|
2
|
+
|
3
|
+
# generate gem package
|
4
|
+
|
5
|
+
# TODO: Should this use staging too, like zip/tgz?
|
6
|
+
|
7
|
+
begin
|
8
|
+
require 'rubygems/specification'
|
9
|
+
Gem::manage_gems
|
10
|
+
rescue LoadError
|
11
|
+
raise LoadError, "RubyGems is not installed?"
|
12
|
+
end
|
13
|
+
|
14
|
+
# Create a Gem package.
|
15
|
+
|
16
|
+
main 'pack/gem' do
|
17
|
+
status "Creating .gem package"
|
18
|
+
|
19
|
+
config = configuration['pack'] || {}
|
20
|
+
config = config['gem'] || {}
|
21
|
+
|
22
|
+
package = package().clone
|
23
|
+
package.update(config)
|
24
|
+
|
25
|
+
store = config[:store] || 'pkg'
|
26
|
+
|
27
|
+
#dir = Dir.pwd
|
28
|
+
|
29
|
+
file = nil
|
30
|
+
#cd(dir) do
|
31
|
+
#status "vi #{metadata.name}.gemspec"
|
32
|
+
builder = ::Gem::Builder.new(gemspec(package))
|
33
|
+
status "gem build #{package.name}"
|
34
|
+
unless dryrun?
|
35
|
+
file = builder.build
|
36
|
+
file = File.expand_path(file)
|
37
|
+
end
|
38
|
+
#end
|
39
|
+
|
40
|
+
transfer(file, store)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Transfer package file to storage location.
|
44
|
+
|
45
|
+
def transfer(file, store)
|
46
|
+
dest = File.join(store, File.basename(file)) # move to store, unless already there
|
47
|
+
dest = File.expand_path(dest)
|
48
|
+
mv(file, store) unless file == dest
|
49
|
+
end
|
50
|
+
|
51
|
+
# Create Gem::Specification.
|
52
|
+
|
53
|
+
def gemspec(package)
|
54
|
+
distribute = package.filelist
|
55
|
+
#distribute = Dir.multiglob_with_default( '**/*', distribute )
|
56
|
+
|
57
|
+
::Gem::Specification.new do |spec|
|
58
|
+
spec.name = package.name
|
59
|
+
spec.version = package.version
|
60
|
+
spec.summary = package.brief
|
61
|
+
spec.description = package.description
|
62
|
+
spec.author = [package.author].flatten
|
63
|
+
spec.email = package.email
|
64
|
+
spec.rubyforge_project = package.development if /rubyforge.org/ =~ package.development
|
65
|
+
spec.homepage = package.homepage
|
66
|
+
|
67
|
+
# Platform: ruby, mswin32, i586-linux, powerpc-darwin, current
|
68
|
+
spec.platform = 'ruby' # TODO current support!
|
69
|
+
|
70
|
+
spec.require_paths = [package.gem_path].flatten.reverse
|
71
|
+
|
72
|
+
#if package.platform != 'ruby'
|
73
|
+
# spec.require_paths.concat(spec.require_paths.collect{ |d| File.join(d, platform) })
|
74
|
+
#end
|
75
|
+
|
76
|
+
spec.bindir = "bin"
|
77
|
+
spec.executables = package.executables
|
78
|
+
spec.requirements = package.requirements
|
79
|
+
spec.has_rdoc = package.document
|
80
|
+
|
81
|
+
if package.dependencies
|
82
|
+
package.dependencies.each do |d,v|
|
83
|
+
spec.add_dependency(*[d,v].compact)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
spec.extensions = package.compile
|
88
|
+
|
89
|
+
spec.files = distribute
|
90
|
+
|
91
|
+
spec.test_files = distribute.select{ |f| f =~ /^test\// } # TODO make test_files configurable
|
92
|
+
end
|
93
|
+
end
|
data/script/pack/tgz
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ratch
|
2
|
+
|
3
|
+
# generate tar gzip package
|
4
|
+
|
5
|
+
main 'pack/tgz' do
|
6
|
+
status "Creating .tgz package"
|
7
|
+
|
8
|
+
config = configuration['pack'] || {}
|
9
|
+
config = config['tgz'] || {}
|
10
|
+
|
11
|
+
package = package().clone
|
12
|
+
package.update(config)
|
13
|
+
|
14
|
+
store = config[:store] || 'pkg'
|
15
|
+
templ = config[:template]
|
16
|
+
|
17
|
+
name = package.stage_name(templ)
|
18
|
+
stage = File.join(store, name)
|
19
|
+
files = package.filelist
|
20
|
+
|
21
|
+
stage(stage, files)
|
22
|
+
|
23
|
+
if dryrun?
|
24
|
+
status "tar -cxf #{name}.tgz"
|
25
|
+
else
|
26
|
+
file = nil
|
27
|
+
cd(store) do
|
28
|
+
file = tgz(name)
|
29
|
+
end
|
30
|
+
transfer(file, store)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Transfer package file to storage location.
|
35
|
+
|
36
|
+
def transfer(file, store)
|
37
|
+
# move to store, unless already there
|
38
|
+
dest = File.join(store, File.basename(file))
|
39
|
+
dest = File.expand_path(dest)
|
40
|
+
mv(file, store) unless file == dest
|
41
|
+
end
|
data/script/pack/zip
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
#!/usr/bin/env ratch
|
2
|
+
|
3
|
+
# generate zip package
|
4
|
+
|
5
|
+
main 'pack/zip' do
|
6
|
+
status "Creating .zip package"
|
7
|
+
|
8
|
+
config = configuration['pack'] || {}
|
9
|
+
config = config['zip'] || {}
|
10
|
+
|
11
|
+
package = package().clone
|
12
|
+
package.update(config)
|
13
|
+
|
14
|
+
store = config[:store] || 'pkg'
|
15
|
+
templ = config[:template]
|
16
|
+
|
17
|
+
name = package.stage_name(templ)
|
18
|
+
stage = File.join(store, name)
|
19
|
+
files = package.filelist
|
20
|
+
|
21
|
+
stage(stage, files)
|
22
|
+
|
23
|
+
if dryrun?
|
24
|
+
status "tar -cxf #{name}.zip"
|
25
|
+
else
|
26
|
+
file = nil
|
27
|
+
cd(store) do
|
28
|
+
file = zip(name)
|
29
|
+
end
|
30
|
+
transfer(file, store)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Transfer package file to storage location.
|
35
|
+
|
36
|
+
def transfer(file, store)
|
37
|
+
# move to store, unless already there
|
38
|
+
dest = File.join(store, File.basename(file))
|
39
|
+
dest = File.expand_path(dest)
|
40
|
+
mv(file, store) unless file == dest
|
41
|
+
end
|
data/script/prepare
CHANGED
data/script/publish
CHANGED
@@ -16,7 +16,7 @@ main :publish do
|
|
16
16
|
exclude = %w{.svn}
|
17
17
|
|
18
18
|
abort "no project" unless project
|
19
|
-
abort "no username" unless username
|
19
|
+
abort "no username (you can also set RUBYFORGE_USERNAME evironament variable)" unless username
|
20
20
|
|
21
21
|
if subdir
|
22
22
|
destination = File.join(project, subdir)
|
@@ -27,7 +27,7 @@ main :publish do
|
|
27
27
|
dir = source.chomp('/') + '/'
|
28
28
|
url = "#{username}@rubyforge.org:/var/www/gforge-projects/#{destination}"
|
29
29
|
|
30
|
-
op = ['-rLvz', '--delete'] # maybe -p ?
|
30
|
+
op = ['-rLvz', '--delete-after'] # maybe -p ?
|
31
31
|
|
32
32
|
# add filter options. The commandline version didn't seem
|
33
33
|
# to work, so I opted for creating an .rsync_filter file for
|
data/script/rdoc
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
#!/usr/bin/env ratch
|
2
|
+
|
3
|
+
# generate rdocs
|
4
|
+
#
|
5
|
+
# Generate Rdoc documentation. Settings are
|
6
|
+
# the same as the rdoc command's options.
|
7
|
+
|
8
|
+
main :rdoc do
|
9
|
+
# Load rdoc configuration.
|
10
|
+
|
11
|
+
config = configuration['rdoc']
|
12
|
+
|
13
|
+
config['op'] = config.delete('output') if config['output']
|
14
|
+
|
15
|
+
config = {
|
16
|
+
'template' => 'html',
|
17
|
+
'op' => 'doc/rdoc',
|
18
|
+
'merge' => true,
|
19
|
+
'inline-source' => true,
|
20
|
+
'exclude' => %w{MANIFEST, Manifest.txt},
|
21
|
+
'include' => %w{[A-Z]* lib ext}
|
22
|
+
}.update(config)
|
23
|
+
|
24
|
+
output = config['op']
|
25
|
+
|
26
|
+
# Check for parent directory.
|
27
|
+
# (Helps to ensure we're in the right place.)
|
28
|
+
|
29
|
+
dir!(File.dirname(output))
|
30
|
+
|
31
|
+
# Prepare command arguments.
|
32
|
+
|
33
|
+
vector = config.command_vector('include')
|
34
|
+
|
35
|
+
# Remove old rdocs, if any.
|
36
|
+
|
37
|
+
rm_r(output) if File.exist?(output)
|
38
|
+
|
39
|
+
# Document.
|
40
|
+
|
41
|
+
rdoc(*vector)
|
42
|
+
end
|
data/script/release
CHANGED
data/script/stamp
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ratch
|
2
|
+
|
3
|
+
# update version stamps
|
4
|
+
|
5
|
+
# You can change these via the command line.
|
6
|
+
version = commandline['version'] || release.version
|
7
|
+
status = commandline['status'] || release.status
|
8
|
+
|
9
|
+
# Update ROLLRC file.
|
10
|
+
|
11
|
+
main :stamp do
|
12
|
+
if version != release.version or status != release.status
|
13
|
+
build release.file
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
|
19
|
+
file release.file do
|
20
|
+
w = ''
|
21
|
+
w << "#{release.name} #{version} #{status} #{Time.now.strftime('%Y-%m-%d')}"
|
22
|
+
w << " #{release.default}" if release.default
|
23
|
+
w << "\n"
|
24
|
+
w << release.libpath.join("\n")
|
25
|
+
|
26
|
+
if dryrun?
|
27
|
+
puts release.file + ":"
|
28
|
+
puts w
|
29
|
+
else
|
30
|
+
File.open(release.file, 'w'){|f| f << w}
|
31
|
+
puts "#{release.file} updated."
|
32
|
+
end
|
33
|
+
end
|
data/script/test
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
From mike@envelope_sender.com.au
|
2
|
+
Return-Path: <mikel@return_path.com>
|
3
|
+
Received: from mikel091a by oaamta05sl.mx.bigpond.com with SMTP id
|
4
|
+
<20071021093820.JFMT24025.oaamta05sl.mx.bigpond.com@mikel091a> for
|
5
|
+
<mikel@nowhere.com.else>; Sun, 21 Oct 2007 19:38:20 +1000
|
6
|
+
Date: Sun, 21 Oct 2007 19:38:13 +1000
|
7
|
+
From: Mikel Lindsaar <mikel@from_address.com>
|
8
|
+
To: Mikel <mikel@somewhere.com>
|
9
|
+
Message-Id: <009601c813c6$19df3510$0437d30a@mikel091a>
|
10
|
+
Subject: Testing outlook
|
11
|
+
|
12
|
+
Hello Mikel
|
13
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Received: from mikel091a by oaamta05sl.mx.bigpond.com with SMTP id
|
2
|
+
<20071021093820.JFMT24025.oaamta05sl.mx.bigpond.com@mikel091a> for
|
3
|
+
<mikel@nowhere.com.else>; Sun, 21 Oct 2007 19:38:20 +1000
|
4
|
+
Date: Sun, 21 Oct 2007 19:38:13 +1000
|
5
|
+
To: Mikel <mikel@somewhere.com>
|
6
|
+
Message-Id: <009601c813c6$19df3510$0437d30a@mikel091a>
|
7
|
+
Subject: Testing outlook
|
8
|
+
|
9
|
+
Hello Mikel
|
10
|
+
|