tmail 1.2.3.1 → 1.2.6
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/README +10 -0
- data/ext/tmailscanner/tmail/tmailscanner.c +39 -8
- data/lib/tmail.rb +1 -0
- data/lib/tmail/address.rb +6 -40
- data/lib/tmail/attachments.rb +41 -22
- data/lib/tmail/encode.rb +9 -0
- data/lib/tmail/header.rb +5 -3
- data/lib/tmail/interface.rb +40 -3
- data/lib/tmail/mail.rb +3 -3
- data/lib/tmail/mailbox.rb +3 -2
- data/lib/tmail/net.rb +3 -1
- data/lib/tmail/parser.rb +204 -620
- data/lib/tmail/parser.y +38 -3
- data/lib/tmail/quoting.rb +38 -1
- data/lib/tmail/utils.rb +28 -4
- data/lib/tmail/vendor/rchardet-1.3/COPYING +504 -0
- data/lib/tmail/vendor/rchardet-1.3/README +12 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet.rb +67 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/big5freq.rb +927 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/big5prober.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/chardistribution.rb +237 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/charsetgroupprober.rb +112 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/charsetprober.rb +75 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/codingstatemachine.rb +64 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/constants.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/escprober.rb +90 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/escsm.rb +244 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/eucjpprober.rb +88 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/euckrfreq.rb +596 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/euckrprober.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/euctwfreq.rb +430 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/euctwprober.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/gb2312freq.rb +474 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/gb2312prober.rb +42 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/hebrewprober.rb +289 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/jisfreq.rb +570 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/jpcntx.rb +229 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langbulgarianmodel.rb +229 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langcyrillicmodel.rb +330 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langgreekmodel.rb +227 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langhebrewmodel.rb +202 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langhungarianmodel.rb +226 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/langthaimodel.rb +201 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/latin1prober.rb +147 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/mbcharsetprober.rb +89 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/mbcsgroupprober.rb +47 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/mbcssm.rb +542 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/sbcharsetprober.rb +124 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/sbcsgroupprober.rb +58 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/sjisprober.rb +88 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/universaldetector.rb +166 -0
- data/lib/tmail/vendor/rchardet-1.3/lib/rchardet/utf8prober.rb +87 -0
- data/lib/tmail/version.rb +1 -1
- data/setup.rb +2 -2
- data/test/fixtures/apple_unquoted_content_type +44 -0
- data/test/fixtures/inline_attachment.txt +2095 -0
- data/test/fixtures/iso_8859_1_email_without_encoding_and_message_id.txt +16 -0
- data/test/fixtures/mailbox.zip +0 -0
- data/test/fixtures/marked_as_iso_8859_1_but_it_is_utf_8.txt +33 -0
- data/test/fixtures/marked_as_utf_8_but_it_is_iso_8859_1.txt +56 -0
- data/test/fixtures/raw_email_bad_time +62 -0
- data/test/fixtures/raw_email_double_at_in_header +14 -0
- data/test/fixtures/raw_email_only_attachment +17 -0
- data/test/fixtures/raw_email_string_in_date_field +17 -0
- data/test/fixtures/raw_email_trailing_dot +21 -0
- data/test/fixtures/raw_email_with_quoted_attachment_filename +60 -0
- data/test/fixtures/raw_email_with_wrong_splitted_multibyte_encoded_word_subject +15 -0
- data/test/fixtures/the_only_part_is_a_word_document.txt +425 -0
- data/test/fixtures/unquoted_filename_in_attachment +177 -0
- data/test/test_address.rb +114 -92
- data/test/test_attachments.rb +84 -1
- data/test/test_encode.rb +54 -0
- data/test/test_header.rb +60 -2
- data/test/test_mail.rb +22 -15
- data/test/test_mbox.rb +12 -3
- data/test/test_port.rb +13 -9
- data/test/test_quote.rb +9 -0
- data/tmail.gemspec +34 -0
- metadata +68 -167
- data/MANIFEST +0 -191
- data/log/BugTrackingLog.txt +0 -1231
- data/log/Changelog.txt +0 -534
- data/log/Fixme.txt +0 -6
- data/log/Testlog.txt +0 -2340
- data/log/Todo.txt +0 -30
- data/log/fixme.rdoc +0 -6
- data/meta/MANIFEST +0 -128
- data/meta/VERSION +0 -1
- data/meta/project.yaml +0 -30
- data/meta/unixname +0 -1
- data/sample/bench_base64.rb +0 -48
- data/sample/data/multipart +0 -23
- data/sample/data/normal +0 -29
- data/sample/data/sendtest +0 -5
- data/sample/data/simple +0 -14
- data/sample/data/test +0 -27
- data/sample/extract-attachements.rb +0 -33
- data/sample/from-check.rb +0 -26
- data/sample/multipart.rb +0 -26
- data/sample/parse-bench.rb +0 -68
- data/sample/parse-test.rb +0 -19
- data/sample/sendmail.rb +0 -94
- data/site/contributing/index.html +0 -183
- data/site/css/clean.css +0 -27
- data/site/css/layout.css +0 -31
- data/site/css/style.css +0 -60
- data/site/download/index.html +0 -61
- data/site/img/envelope.jpg +0 -0
- data/site/img/mailman.gif +0 -0
- data/site/img/stamp-sm.jpg +0 -0
- data/site/img/stamp.jpg +0 -0
- data/site/img/stampborder.jpg +0 -0
- data/site/img/tfire.jpg +0 -0
- data/site/img/tmail.png +0 -0
- data/site/index.html +0 -270
- data/site/js/jquery.js +0 -31
- data/site/log/Changelog.xsl +0 -33
- data/site/log/changelog.xml +0 -1677
- data/site/outdated/BUGS +0 -3
- data/site/outdated/DEPENDS +0 -1
- data/site/outdated/Incompatibilities +0 -89
- data/site/outdated/Incompatibilities.ja +0 -102
- data/site/outdated/NEWS +0 -9
- data/site/outdated/README.ja +0 -73
- data/site/outdated/doc.ja/address.html +0 -275
- data/site/outdated/doc.ja/basics.html +0 -405
- data/site/outdated/doc.ja/config.html +0 -49
- data/site/outdated/doc.ja/details.html +0 -146
- data/site/outdated/doc.ja/index.html +0 -39
- data/site/outdated/doc.ja/mail.html +0 -793
- data/site/outdated/doc.ja/mailbox.html +0 -265
- data/site/outdated/doc.ja/port.html +0 -95
- data/site/outdated/doc.ja/tmail.html +0 -58
- data/site/outdated/doc.ja/usage.html +0 -202
- data/site/outdated/rdd/address.rrd.m +0 -229
- data/site/outdated/rdd/basics.rd.m +0 -275
- data/site/outdated/rdd/config.rrd.m +0 -26
- data/site/outdated/rdd/details.rd.m +0 -117
- data/site/outdated/rdd/index.rhtml.m +0 -54
- data/site/outdated/rdd/mail.rrd.m +0 -701
- data/site/outdated/rdd/mailbox.rrd.m +0 -228
- data/site/outdated/rdd/port.rrd.m +0 -69
- data/site/outdated/rdd/tmail.rrd.m +0 -33
- data/site/outdated/rdd/usage.rd.m +0 -247
- data/site/quickstart/index.html +0 -69
- data/site/quickstart/quickstart.html +0 -52
- data/site/quickstart/usage.html +0 -193
- data/site/reference/address.html +0 -247
- data/site/reference/config.html +0 -30
- data/site/reference/index.html +0 -101
- data/site/reference/mail.html +0 -726
- data/site/reference/mailbox.html +0 -245
- data/site/reference/port.html +0 -75
- data/site/reference/tmail.html +0 -35
- data/work/script/make +0 -26
- data/work/script/rdoc +0 -39
- data/work/script/setup +0 -1616
- data/work/script/test +0 -30
data/sample/parse-bench.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# parser benchmark
|
3
|
-
#
|
4
|
-
|
5
|
-
require 'tmail'
|
6
|
-
|
7
|
-
|
8
|
-
if ARGV.empty? then
|
9
|
-
$stderr.puts "usage: #{$0} <mhdir> <mhdir>..."
|
10
|
-
exit 0
|
11
|
-
end
|
12
|
-
ARGV.each do |dname|
|
13
|
-
unless File.directory? dname then
|
14
|
-
$stderr.puts "not directory: #{dname}"
|
15
|
-
exit 1
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
$stdout.sync = true
|
20
|
-
|
21
|
-
$count = 0
|
22
|
-
$failnum = 0
|
23
|
-
$dirfail = 0
|
24
|
-
$fieldname = ''
|
25
|
-
$dirname = ''
|
26
|
-
$port = nil
|
27
|
-
|
28
|
-
begin
|
29
|
-
ARGV.each do |dirname|
|
30
|
-
$dirname = dirname
|
31
|
-
|
32
|
-
TMail::MhLoader.new( dirname ).each do |port|
|
33
|
-
begin
|
34
|
-
t = TMail::Mail.new( port )
|
35
|
-
$port = port
|
36
|
-
|
37
|
-
t.each_header do |key, field|
|
38
|
-
$fieldname = key
|
39
|
-
next if /received/i === key
|
40
|
-
if ::TMail::StructH === field then
|
41
|
-
field.instance_eval { parse unless @parsed }
|
42
|
-
end
|
43
|
-
end
|
44
|
-
rescue TMail::SyntaxError
|
45
|
-
$stderr.puts "fail in #{$count+1}, field #{$fieldname}"
|
46
|
-
$stderr.puts $!.to_s
|
47
|
-
$failnum += 1
|
48
|
-
$dirfail += 1
|
49
|
-
|
50
|
-
if $failnum % 10 == 0 then
|
51
|
-
puts 'fail = ' + $failnum.to_s
|
52
|
-
#raise
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
$count += 1
|
57
|
-
puts "end #{$count}" if $count % 50 == 0
|
58
|
-
end
|
59
|
-
|
60
|
-
puts "directory #{dirname} end, fail=#{$dirfail}"
|
61
|
-
$dirfail = 0
|
62
|
-
end
|
63
|
-
rescue
|
64
|
-
puts "at #{$port.inspect}, non ParseError raised"
|
65
|
-
raise
|
66
|
-
end
|
67
|
-
|
68
|
-
puts "parse #{$count} files, fail=#{$failnum}"
|
data/sample/parse-test.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# parser test
|
3
|
-
#
|
4
|
-
|
5
|
-
require 'tmail'
|
6
|
-
|
7
|
-
puts "testing parser --------------------------------"
|
8
|
-
puts
|
9
|
-
|
10
|
-
TMail::Mail.load( 'data/normal' ).each_header do |key, field|
|
11
|
-
if field.respond_to? :parse, true then
|
12
|
-
field.instance_eval {
|
13
|
-
parse
|
14
|
-
@written = true
|
15
|
-
}
|
16
|
-
end
|
17
|
-
printf "%s ok\n", field.name
|
18
|
-
# puts field.decoded
|
19
|
-
end
|
data/sample/sendmail.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# sendmail.rb
|
3
|
-
#
|
4
|
-
|
5
|
-
require 'tmail'
|
6
|
-
require 'net/smtp'
|
7
|
-
require 'nkf'
|
8
|
-
require 'etc'
|
9
|
-
require 'socket'
|
10
|
-
require 'getopts'
|
11
|
-
|
12
|
-
|
13
|
-
def usage( status, msg = nil )
|
14
|
-
output = (status == 0 ? $stdout : $stderr)
|
15
|
-
output.puts msg if msg
|
16
|
-
output.print(<<EOS)
|
17
|
-
Usage: cat msg | #{File.basename $0} [-j|--ja] [-s <subject>] [-f <from>] <to>
|
18
|
-
|
19
|
-
-h,--host=addr SMTP server address. (default=localhost)
|
20
|
-
-s,--subject=sbj subject of the message. (default=(none))
|
21
|
-
-f,--from=from from address.
|
22
|
-
-j,--ja handle japanese message. (default=off)
|
23
|
-
|
24
|
-
EOS
|
25
|
-
exit status
|
26
|
-
end
|
27
|
-
|
28
|
-
def main
|
29
|
-
getopts('j', 'ja', 'h:', 'host:',
|
30
|
-
's:', 'subject:', 'f:', 'from:',
|
31
|
-
'help') or usage(1)
|
32
|
-
|
33
|
-
smtphost = $OPT_host || $OPT_h || 'localhost'
|
34
|
-
subject = $OPT_subject || $OPT_s
|
35
|
-
from = $OPT_from || $OPT_f || guess_from_address()
|
36
|
-
usage(1, 'Sender address not given') unless from
|
37
|
-
to = ARGV
|
38
|
-
usage(1, 'Receipt address(es) not given') if to.empty?
|
39
|
-
ja_locale = $OPT_ja || $OPT_j
|
40
|
-
|
41
|
-
send_mail smtphost, setup_mail(from, to, subject, $stdin.read, ja_locale)
|
42
|
-
end
|
43
|
-
|
44
|
-
def setup_mail( from, to, subject, body, ja_locale )
|
45
|
-
mail = TMail::Mail.new
|
46
|
-
mail.date = Time.now
|
47
|
-
mail.from = from
|
48
|
-
mail.to = to
|
49
|
-
mail.subject = subject if subject
|
50
|
-
mail.mime_version = '1.0'
|
51
|
-
if ja_locale
|
52
|
-
mail.body = NKF.nkf('-j', body)
|
53
|
-
mail.set_content_type 'text', 'plain', 'charset' => 'iso-2022-jp'
|
54
|
-
else
|
55
|
-
mail.body = body
|
56
|
-
mail.set_content_type 'text', 'plain'
|
57
|
-
end
|
58
|
-
mail
|
59
|
-
end
|
60
|
-
|
61
|
-
def send_mail( host, mail )
|
62
|
-
msg = mail.encoded
|
63
|
-
$stderr.print msg if $DEBUG
|
64
|
-
|
65
|
-
smtp = Net::SMTP.new(host, 25)
|
66
|
-
smtp.set_debug_output $stderr if $DEBUG
|
67
|
-
smtp.start {
|
68
|
-
smtp.send_mail msg, mail.from_address, mail.destinations
|
69
|
-
}
|
70
|
-
end
|
71
|
-
|
72
|
-
def guess_from_address
|
73
|
-
user = getlogin()
|
74
|
-
unless user
|
75
|
-
$stderr.puts 'cannot get user account; abort.'
|
76
|
-
exit 1
|
77
|
-
end
|
78
|
-
if domain = (Socket.gethostname || ENV['HOSTNAME'] || ENV['HOST'])
|
79
|
-
user + '@' + domain
|
80
|
-
else
|
81
|
-
user
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def getlogin
|
86
|
-
begin
|
87
|
-
require 'etc'
|
88
|
-
Etc.getlogin
|
89
|
-
rescue LoadError
|
90
|
-
ENV['LOGNAME'] || ENV['USER']
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
main
|
@@ -1,183 +0,0 @@
|
|
1
|
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
2
|
-
<html lang="en">
|
3
|
-
<head>
|
4
|
-
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
|
5
|
-
<meta http-equiv="Content-Language" content="en">
|
6
|
-
|
7
|
-
<link rel="stylesheet" href="../css/clean.css" type="text/css" media="screen, projection, print"/>
|
8
|
-
<link rel="stylesheet" href="../css/layout.css" type="text/css" media="screen, projection, print"/>
|
9
|
-
<link rel="stylesheet" href="../css/style.css" type="text/css" media="screen, projection, print"/>
|
10
|
-
|
11
|
-
<link rel="icon" href="../img/tfire.jpg" type="image/x-icon"/>
|
12
|
-
|
13
|
-
<title>TMail — Contributing to the best Ruby email handler ever!</title>
|
14
|
-
|
15
|
-
<script type="text/javascript" src="../js/jquery.js"></script>
|
16
|
-
|
17
|
-
</head>
|
18
|
-
<body>
|
19
|
-
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
|
20
|
-
</script>
|
21
|
-
<script type="text/javascript">
|
22
|
-
_uacct = "UA-2871747-1";
|
23
|
-
urchinTracker();
|
24
|
-
</script>
|
25
|
-
|
26
|
-
<div class="container">
|
27
|
-
|
28
|
-
<div class="logo">
|
29
|
-
<img src="../img/stamp-sm.jpg"/>
|
30
|
-
</div>
|
31
|
-
|
32
|
-
<div class="title">
|
33
|
-
<h1>TMail</h1>
|
34
|
-
<h2>Ruby on Mail</h2>
|
35
|
-
</div>
|
36
|
-
|
37
|
-
<div class="menu">
|
38
|
-
|
39
|
-
<a href="../index.html">Home</a>
|
40
|
-
<a href="../quickstart/index.html">Quickstart</a>
|
41
|
-
<a href="http://lindsaar.net/tmail/" onClick="javascript:urchinTracker('/outgoing/rubyforge.org/blog_page');">Blog</a>
|
42
|
-
<a href="http://rubyforge.org/frs/?group_id=4512" onClick="javascript:urchinTracker('/outgoing/rubyforge.org/download_page');">Download</a>
|
43
|
-
<a href="http://rubyforge.org/mailman/listinfo/tmail-talk">Mailing List</a>
|
44
|
-
<a href="../reference/index.html">Reference</a>
|
45
|
-
<a href="../rdoc/index.html">RDocs</a>
|
46
|
-
<a href="http://rubyforge.org/projects/tmail/" onClick="javascript:urchinTracker('/outgoing/rubyforge.org/project_page');">Project</a>
|
47
|
-
<a href="../contributing/index.html">Contributing</a>
|
48
|
-
</div>
|
49
|
-
|
50
|
-
<div class="main">
|
51
|
-
<h1>Contributing to TMail</h1>
|
52
|
-
|
53
|
-
<p>
|
54
|
-
Here is a blunt truth, TMail is what we (that is you and me) make it.
|
55
|
-
</p>
|
56
|
-
|
57
|
-
<p>
|
58
|
-
I have had a few people asking how to contribute to TMail, so I thought I
|
59
|
-
would quickly do a write up on how to go about it.
|
60
|
-
</p>
|
61
|
-
|
62
|
-
<p>
|
63
|
-
First things first, go to the <a href="http://rubyforge.org/mailman/listinfo/tmail-talk"
|
64
|
-
title="Tmail-talk Info Page">TMail Mailing list</a> and subscribe and let us
|
65
|
-
know what you want to attack, while this is definitely not a requirement to
|
66
|
-
writing a patch, maybe someone else has the same problem and / or is mid
|
67
|
-
fixing it, plus, we're basically a nice bunch of people ;)
|
68
|
-
</p>
|
69
|
-
|
70
|
-
<p>
|
71
|
-
Then, if you are new to this sort of thing you should go and read this great write up
|
72
|
-
by <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/"
|
73
|
-
title="Dr Nic » 8 steps for fixing other people’s code">Dr Nic</a>
|
74
|
-
which covers the basic steps on how to check out, patch and submit fixes to
|
75
|
-
code. This also applied very well to TMail.
|
76
|
-
</p>
|
77
|
-
|
78
|
-
<p>
|
79
|
-
Then, you need to get a copy of the latest TMail trunk code. You do this like so:
|
80
|
-
</p>
|
81
|
-
|
82
|
-
<pre class="shell">
|
83
|
-
baci:~ mikel$ svn checkout http://tmail.rubyforge.org/svn/trunk tmail
|
84
|
-
</pre>
|
85
|
-
|
86
|
-
<p>
|
87
|
-
This will check out the most recent version of TMail from the source tree at
|
88
|
-
RubyForge. Once you have this, the first thing you should do is run the test
|
89
|
-
suite. There are over 4000 assertions run by the test suite to make sure all
|
90
|
-
is OK. This also gives you a stable datum of "When I got it, it was working
|
91
|
-
so I just have to make sure it stays working...". To run the tests, do this:
|
92
|
-
</p>
|
93
|
-
|
94
|
-
|
95
|
-
<pre class="shell">
|
96
|
-
baci:~ mikel$ cd tmail
|
97
|
-
baci:~/tmail mikel$ rake test
|
98
|
-
(in /Users/mikel/tmail)
|
99
|
-
/usr/local/bin/ruby -Ilib:test ((SNIP))
|
100
|
-
Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake/rake_test_loader
|
101
|
-
Started
|
102
|
-
........................................................................
|
103
|
-
........................................................................
|
104
|
-
............................................................
|
105
|
-
Finished in 0.456426 seconds.
|
106
|
-
|
107
|
-
204 tests, 4014 assertions, 0 failures, 0 errors
|
108
|
-
</pre>
|
109
|
-
|
110
|
-
<p>
|
111
|
-
If you get any errors at this point, post to the TMail Mailing list and let us
|
112
|
-
know, tell us what version of Ruby you are running, and what platform you are on
|
113
|
-
as well as any error output from the tests. If you can fix it, go ahead!
|
114
|
-
</p>
|
115
|
-
|
116
|
-
<p>
|
117
|
-
Now that you have the trunk version, you need to write your patch and submit it.
|
118
|
-
If you are making a code change, you should write a test driven change, if you
|
119
|
-
are new to this, you can find a great screen cast by James Edward Gray II on
|
120
|
-
<a href="http://macromates.com/screencast/ruby_quiz_screencast.mov">TDD with Textmate.</a>
|
121
|
-
This will give you the basics of what a test drive change is and how to go about it.
|
122
|
-
For all you RSpec fans, I am seriously considering moving the testing framework over
|
123
|
-
to BDD and RSpec, if you want to get on board and help out, that would be great!
|
124
|
-
</p>
|
125
|
-
|
126
|
-
<p>
|
127
|
-
Once you have written your test, run rake test again and watch it fail. This is a
|
128
|
-
key part of Test Driven Development. Then write your change in the code.
|
129
|
-
</p>
|
130
|
-
|
131
|
-
<p>
|
132
|
-
Once you have written your code, run rake test again, and your test should now pass
|
133
|
-
and every OTHER test should also pass. If this is the case, then well done! You
|
134
|
-
have just made a test driven change to the TMail library.
|
135
|
-
</p>
|
136
|
-
|
137
|
-
<p>
|
138
|
-
Now you need to make the diff file of what you have done against the library. You
|
139
|
-
do this using the svn diff command. First however, you should update your code, just
|
140
|
-
in case someone else has updated the source tree between you checking it out and
|
141
|
-
writing your patch. So, you do both like this:
|
142
|
-
</p>
|
143
|
-
|
144
|
-
<pre class="shell">
|
145
|
-
baci:~/tmail mikel$ svn up
|
146
|
-
At revision 206.
|
147
|
-
baci:~/tmail mikel$ svn diff > my_well_named_patch_file.diff
|
148
|
-
baci:~/tmail mikel$
|
149
|
-
</pre>
|
150
|
-
|
151
|
-
<p>
|
152
|
-
Note: If while doing the SVN UP anything was updated, you should re-run your
|
153
|
-
tests using rake test to make sure your patch didn't just go stale :)
|
154
|
-
</p>
|
155
|
-
|
156
|
-
<p>
|
157
|
-
Next step is peer review. Go open a patch ticket on the
|
158
|
-
<a href="http://rubyforge.org/tracker/?group_id=4512" title="RubyForge: TMail:">
|
159
|
-
RubyForge tracker</a>, in it, select the right category and group for the patch
|
160
|
-
you have made (if there isn't one that matches, leave it as none and then mention
|
161
|
-
this in the description field). Give your ticket a name, and then attach your file.
|
162
|
-
</p>
|
163
|
-
|
164
|
-
<p>
|
165
|
-
It is a good idea to then go to the TMail Talk list and let everyone know about your
|
166
|
-
patch. Then we can check it out, suggest changes or commit it if all is good.
|
167
|
-
</p>
|
168
|
-
|
169
|
-
<p>
|
170
|
-
That's it! Easy hey? Once you have submitted patches, it gets easier and you get
|
171
|
-
to bask in the glory of being a committer to Ruby's most popular mail handling
|
172
|
-
library.
|
173
|
-
</p>
|
174
|
-
|
175
|
-
</div>
|
176
|
-
|
177
|
-
<div class="footer">
|
178
|
-
Copyright (c) 2007 TMail Project ® All Rights Reserved
|
179
|
-
</div>
|
180
|
-
|
181
|
-
</div>
|
182
|
-
</body>
|
183
|
-
</html>
|
data/site/css/clean.css
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
* {
|
2
|
-
background: transparent;
|
3
|
-
}
|
4
|
-
|
5
|
-
body {
|
6
|
-
margin: 0;
|
7
|
-
padding: 0;
|
8
|
-
font-size: 12px;
|
9
|
-
color: #333333;
|
10
|
-
}
|
11
|
-
|
12
|
-
div {
|
13
|
-
font-size: 15px;
|
14
|
-
}
|
15
|
-
|
16
|
-
p {
|
17
|
-
font-size: 15px;
|
18
|
-
line-height: 19px;
|
19
|
-
}
|
20
|
-
|
21
|
-
pre {
|
22
|
-
font-size: 13px;
|
23
|
-
font-family: Courier, sans-serif;
|
24
|
-
background-color: #EEE;
|
25
|
-
display: block;
|
26
|
-
border: 1px solid #999;
|
27
|
-
}
|
data/site/css/layout.css
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
|
2
|
-
.container{
|
3
|
-
width: 800px;
|
4
|
-
margin: 0 auto;
|
5
|
-
padding: 10px 20px 10px 20px;
|
6
|
-
}
|
7
|
-
|
8
|
-
.logo {
|
9
|
-
float: right;
|
10
|
-
width: 150px;
|
11
|
-
padding: 0 0 10px 0;
|
12
|
-
text-align: right;
|
13
|
-
}
|
14
|
-
|
15
|
-
.menu {
|
16
|
-
margin-top: 30px;
|
17
|
-
width: 650px;
|
18
|
-
}
|
19
|
-
|
20
|
-
.menu a {
|
21
|
-
text-decoration: none;
|
22
|
-
}
|
23
|
-
|
24
|
-
.main {
|
25
|
-
clear: both;
|
26
|
-
padding: 10px 20px;
|
27
|
-
}
|
28
|
-
|
29
|
-
.footer {
|
30
|
-
margin: 30px 0 10px 0;
|
31
|
-
}
|
data/site/css/style.css
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
background: #FFFFFF;
|
3
|
-
}
|
4
|
-
|
5
|
-
.container {
|
6
|
-
background: white;
|
7
|
-
}
|
8
|
-
|
9
|
-
.title h1 {
|
10
|
-
color: red;
|
11
|
-
font-size: 72px;
|
12
|
-
font-family: Times New Roman;
|
13
|
-
font-weight: bold;
|
14
|
-
margin: 0;
|
15
|
-
padding: 0px;
|
16
|
-
}
|
17
|
-
|
18
|
-
.title h2 {
|
19
|
-
color: #cc5500;
|
20
|
-
font-size: 16px;
|
21
|
-
font-family: Times New Roman;
|
22
|
-
font-weight: bold;
|
23
|
-
margin: 0;
|
24
|
-
padding: 0 12px;
|
25
|
-
letter-spacing: 8px;
|
26
|
-
}
|
27
|
-
|
28
|
-
.menu {
|
29
|
-
text-align: left;
|
30
|
-
color: red;
|
31
|
-
font-size: 14px;
|
32
|
-
}
|
33
|
-
|
34
|
-
.main {
|
35
|
-
border: 1px solid orange;
|
36
|
-
}
|
37
|
-
|
38
|
-
.footer {
|
39
|
-
color: gray;
|
40
|
-
font-size: .9em;
|
41
|
-
}
|
42
|
-
|
43
|
-
pre {
|
44
|
-
border: 1px solid #dddddd;
|
45
|
-
font-family: monospace;
|
46
|
-
font-size: 0.8em;
|
47
|
-
line-height: 1.6em;
|
48
|
-
}
|
49
|
-
|
50
|
-
pre.ruby {
|
51
|
-
color: red;
|
52
|
-
background: #eeeeee;
|
53
|
-
padding: 10px;
|
54
|
-
}
|
55
|
-
|
56
|
-
pre.shell {
|
57
|
-
color: green;
|
58
|
-
background: #eeeeee;
|
59
|
-
padding: 10px;
|
60
|
-
}
|