tmail 1.2.3.1 → 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
}
|