thoughtafter-nntp 1.0.0.2 → 1.0.0.3

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.
@@ -0,0 +1,34 @@
1
+ desc 'Release the website and new gem version'
2
+ task :deploy => [:check_version, :website, :release] do
3
+ puts "Remember to create SVN tag:"
4
+ puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
5
+ "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
6
+ puts "Suggested comment:"
7
+ puts "Tagging release #{CHANGES}"
8
+ end
9
+
10
+ desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
11
+ task :local_deploy => [:website_generate, :install_gem]
12
+
13
+ task :check_version do
14
+ unless ENV['VERSION']
15
+ puts 'Must pass a VERSION=x.y.z release version'
16
+ exit
17
+ end
18
+ unless ENV['VERSION'] == VERS
19
+ puts "Please update your version.rb to match the release version, currently #{VERS}"
20
+ exit
21
+ end
22
+ end
23
+
24
+ desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
25
+ task :install_gem_no_doc => [:clean, :package] do
26
+ sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
27
+ end
28
+
29
+ namespace :manifest do
30
+ desc 'Recreate Manifest.txt to include ALL files'
31
+ task :refresh do
32
+ `rake check_manifest | patch -p0 > Manifest.txt`
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ task :ruby_env do
2
+ RUBY_APP = if RUBY_PLATFORM =~ /java/
3
+ "jruby"
4
+ else
5
+ "ruby"
6
+ end unless defined? RUBY_APP
7
+ end
@@ -0,0 +1,17 @@
1
+ desc 'Generate website files'
2
+ task :website_generate => :ruby_env do
3
+ (Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
4
+ sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
5
+ end
6
+ end
7
+
8
+ desc 'Upload website files to rubyforge'
9
+ task :website_upload do
10
+ host = "#{rubyforge_username}@rubyforge.org"
11
+ remote_dir = "/var/www/gforge-projects/#{PATH}/"
12
+ local_dir = 'website'
13
+ sh %{rsync -rlgoDCv #{local_dir}/ #{host}:#{remote_dir}}
14
+ end
15
+
16
+ desc 'Generate and upload website files'
17
+ task :website => [:website_generate, :website_upload, :publish_docs]
@@ -0,0 +1,2 @@
1
+ require 'test/unit'
2
+ require File.dirname(__FILE__) + '/../lib/nntp'
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestNntp < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true
10
+ end
11
+ end
@@ -0,0 +1,254 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
7
+ <title>
8
+ Net::NNTP Client Library
9
+ </title>
10
+ <script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
11
+ <style>
12
+
13
+ </style>
14
+ <script type="text/javascript">
15
+ window.onload = function() {
16
+ settings = {
17
+ tl: { radius: 10 },
18
+ tr: { radius: 10 },
19
+ bl: { radius: 10 },
20
+ br: { radius: 10 },
21
+ antiAlias: true,
22
+ autoPad: true,
23
+ validTags: ["div"]
24
+ }
25
+ var versionBox = new curvyCorners(settings, document.getElementById("version"));
26
+ versionBox.applyCornersToAll();
27
+ }
28
+ </script>
29
+ </head>
30
+ <body>
31
+ <div id="main">
32
+
33
+ <h1>Net::NNTP Client Library</h1>
34
+ <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/nntp"; return false'>
35
+ <p>Get Version</p>
36
+ <a href="http://rubyforge.org/projects/nntp" class="numbers">1.0.0</a>
37
+ </div>
38
+ <h1>&#x2192; &#8216;nntp&#8217;</h1>
39
+
40
+
41
+ <h2>What</h2>
42
+
43
+
44
+ <p>This gem allows you to to retrieve and post Usenet news articles via <span class="caps">NNTP</span>, the Network News Transfer Protocol. For details of <span class="caps">NNTP</span> itself, see <a href="http://www.ietf.org/rfc/rfc977.txt"><span class="caps">RFC977</span></a>.</p>
45
+
46
+
47
+ <p>This library does <span class="caps">NOT</span> provide functions to compose Usenet news articles. You must create and format them yourself per Standard for Interchange of Usenet Messages. See <a href="http://www.ietf.org/rfc/rfc850.txt"><span class="caps">RFC850</span></a>, <a href="http://www.ietf.org/rfc/rfc2047.txt"><span class="caps">RFC2047</span></a>.</p>
48
+
49
+
50
+ <h2>Installing</h2>
51
+
52
+
53
+ <p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">nntp</span></pre></p>
54
+
55
+
56
+ <p>Alternatively, you may download the gem from the <a href="http://rubyforge.org/projects/nntp">project info page</a> and install manually.</p>
57
+
58
+
59
+ <h2>The basics</h2>
60
+
61
+
62
+ <h3>Posting Messages</h3>
63
+
64
+
65
+ <p>You must open a connection to a <span class="caps">NNTP</span> server before posting messages. The first argument is the address of your <span class="caps">NNTP</span> server, and the second argument is the port number. Using <span class="caps">NNTP</span>.start with a block is the simplest way to do this because the <span class="caps">NNTP</span> connection closes automatically after the block executes.</p>
66
+
67
+
68
+ <p><pre class='syntax'>
69
+ <span class="ident">require</span> <span class="punct">'</span><span class="string">rubygems</span><span class="punct">'</span>
70
+ <span class="ident">require</span> <span class="punct">'</span><span class="string">nntp</span><span class="punct">'</span>
71
+ <span class="constant">Net</span><span class="punct">::</span><span class="constant">NNTP</span><span class="punct">.</span><span class="ident">start</span><span class="punct">('</span><span class="string">your.nntp.server</span><span class="punct">',</span> <span class="number">119</span><span class="punct">)</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">nntp</span><span class="punct">|</span>
72
+ <span class="comment"># Use the NNTP object nntp only in this block.</span>
73
+ <span class="keyword">end</span>
74
+ </pre></p>
75
+
76
+
77
+ <p>Replace ‘your.nntp.server’ with your <span class="caps">NNTP</span> server. Normally your systems administrator or internet service provider supplies a server for you.</p>
78
+
79
+
80
+ <p>Then you can post messages.</p>
81
+
82
+
83
+ <p><pre class='syntax'>
84
+ <span class="ident">require</span> <span class="punct">'</span><span class="string">date</span><span class="punct">'</span>
85
+ <span class="ident">date</span> <span class="punct">=</span> <span class="constant">DateTime</span><span class="punct">.</span><span class="ident">now</span><span class="punct">().</span><span class="ident">strftime</span><span class="punct">(</span><span class="ident">fmt</span><span class="punct">='</span><span class="string">%a, %d %b %Y %T %z</span><span class="punct">')</span>
86
+
87
+ <span class="ident">msgstr</span> <span class="punct">=</span> <span class="punct">&lt;&lt;</span><span class="constant">END_OF_MESSAGE</span><span class="string">
88
+ From: Your Name &lt;your@mail.address&gt;
89
+ Newsgroups: news.group.one, news.group.two ...
90
+ Subject: test message
91
+ Date: <span class="expr">#{date}</span>
92
+
93
+ This is a test message.
94
+ END_OF_MESSAGE
95
+
96
+ require 'rubygems'
97
+ require 'nntp'
98
+ Net::NNTP.start('your.nntp.server', 119) do |nntp|
99
+ nntp.post msgstr
100
+ end<span class="normal">
101
+ </span></span></pre></p>
102
+
103
+
104
+ <p><span class="caps">NOTE</span>: The <span class="caps">NNTP</span> message headers such as <code>Date:</code>, <code>Message-ID:</code>, and <code>Path:</code>, if ommited, may automatically be added by your Usenet news server; however, it is best not to rely on this behavior.</p>
105
+
106
+
107
+ <h3>Reading Messages</h3>
108
+
109
+
110
+ <p>This snippet will display all subject lines within a particular news group.</p>
111
+
112
+
113
+ <p><pre class='syntax'>
114
+ <span class="ident">require</span> <span class="punct">'</span><span class="string">rubygems</span><span class="punct">'</span>
115
+ <span class="ident">require</span> <span class="punct">'</span><span class="string">nntp</span><span class="punct">'</span>
116
+
117
+ <span class="ident">newsgroup</span> <span class="punct">=</span> <span class="punct">'</span><span class="string">comp.lang.ruby</span><span class="punct">'</span>
118
+
119
+ <span class="constant">Net</span><span class="punct">::</span><span class="constant">NNTP</span><span class="punct">.</span><span class="ident">start</span><span class="punct">('</span><span class="string">your.nntp.server</span><span class="punct">',</span> <span class="number">119</span><span class="punct">)</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">nntp</span><span class="punct">|</span>
120
+ <span class="ident">message_ids</span> <span class="punct">=</span> <span class="ident">nntp</span><span class="punct">.</span><span class="ident">listgroup</span><span class="punct">(</span><span class="ident">newsgroup</span><span class="punct">)</span>
121
+ <span class="ident">message_ids</span><span class="punct">[</span><span class="number">1</span><span class="punct">].</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">id</span><span class="punct">|</span>
122
+ <span class="ident">nntp</span><span class="punct">.</span><span class="ident">head</span><span class="punct">(</span><span class="ident">id</span><span class="punct">).</span><span class="ident">each</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">header</span><span class="punct">|</span>
123
+ <span class="ident">header</span><span class="punct">.</span><span class="ident">each</span> <span class="punct">{</span> <span class="punct">|</span><span class="ident">line</span><span class="punct">|</span> <span class="ident">puts</span><span class="punct">(</span><span class="ident">line</span><span class="punct">)</span> <span class="keyword">if</span> <span class="ident">line</span><span class="punct">.</span><span class="ident">index</span><span class="punct">('</span><span class="string">Subject:</span><span class="punct">')</span> <span class="punct">}</span>
124
+ <span class="keyword">end</span>
125
+ <span class="keyword">end</span>
126
+ <span class="keyword">end</span>
127
+ </pre></p>
128
+
129
+
130
+ <h3>Closing the Session</h3>
131
+
132
+
133
+ <p>You <span class="caps">MUST</span> close the <span class="caps">NNTP</span> session after posting messages by calling the Net::NNTP#finish method:</p>
134
+
135
+
136
+ <p><pre class='syntax'>
137
+ <span class="comment"># using NNTP#finish</span>
138
+ <span class="ident">nntp</span> <span class="punct">=</span> <span class="constant">Net</span><span class="punct">::</span><span class="constant">NNTP</span><span class="punct">.</span><span class="ident">start</span><span class="punct">('</span><span class="string">your.nntp.server</span><span class="punct">',</span> <span class="number">119</span><span class="punct">)</span>
139
+ <span class="ident">nntp</span><span class="punct">.</span><span class="ident">post</span> <span class="ident">msgstr</span>
140
+ <span class="ident">nntp</span><span class="punct">.</span><span class="ident">finish</span>
141
+ </pre></p>
142
+
143
+
144
+ <p>You can also use the block form of <span class="caps">NNTP</span>.start/NNTP#start. This closes the <span class="caps">NNTP</span> session automatically:</p>
145
+
146
+
147
+ <p><pre class='syntax'>
148
+ <span class="comment"># using block form of NNTP.start</span>
149
+ <span class="constant">Net</span><span class="punct">::</span><span class="constant">NNTP</span><span class="punct">.</span><span class="ident">start</span><span class="punct">('</span><span class="string">your.nntp.server</span><span class="punct">',</span> <span class="number">119</span><span class="punct">)</span> <span class="keyword">do</span> <span class="punct">|</span><span class="ident">nntp</span><span class="punct">|</span>
150
+ <span class="ident">nntp</span><span class="punct">.</span><span class="ident">post</span> <span class="ident">msgstr</span>
151
+ <span class="keyword">end</span>
152
+ </pre></p>
153
+
154
+
155
+ <p>We strongly recommend the latter scheme since it is simpler and more robust.</p>
156
+
157
+
158
+ <h3><span class="caps">NNTP</span> Authentication</h3>
159
+
160
+
161
+ <p>The Net::NNTP class may support various authentication schemes depending on your news server‘s reponse to <span class="caps">CAPABILITIES</span> command. To use <span class="caps">NNTP</span> authentication, pass extra arguments to <span class="caps">NNTP</span>.start/NNTP#start.</p>
162
+
163
+
164
+ <p>See <a href="http://www.ietf.org/internet-drafts/draft-ietf-nntpext-authinfo-07.txt"><span class="caps">NNTP</span> Extension for Authentication</a>.</p>
165
+
166
+
167
+ <p><pre class='syntax'>
168
+ <span class="constant">Net</span><span class="punct">::</span><span class="constant">NNTP</span><span class="punct">.</span><span class="ident">start</span><span class="punct">('</span><span class="string">your.nntp.server</span><span class="punct">',</span> <span class="number">119</span><span class="punct">,</span>
169
+ <span class="punct">'</span><span class="string">YourAccountName</span><span class="punct">',</span> <span class="punct">'</span><span class="string">YourPassword</span><span class="punct">',</span> <span class="symbol">:method</span><span class="punct">)</span>
170
+ </pre></p>
171
+
172
+
173
+ <p>Where <code>:method</code> can be one of ‘gassapi’, ‘digest_md5’, ‘cram_md5’, ‘starttls’, ‘external’, ‘plain’, ‘generic’, ‘simple’ or ‘original’.</p>
174
+
175
+
176
+ <p>In the case of method <code>:generic</code>, arguments should be passed to a format string as follows:</p>
177
+
178
+
179
+ <p><pre class='syntax'>
180
+ <span class="constant">Net</span><span class="punct">::</span><span class="constant">NNTP</span><span class="punct">.</span><span class="ident">start</span><span class="punct">('</span><span class="string">your.nntp.server</span><span class="punct">',</span> <span class="number">119</span><span class="punct">,</span>
181
+ <span class="punct">&quot;</span><span class="string">format</span><span class="punct">&quot;,</span> <span class="punct">*</span><span class="ident">arguments</span><span class="punct">,</span> <span class="symbol">:generic</span><span class="punct">)</span>
182
+ </pre></p>
183
+
184
+
185
+ <p><span class="caps">NOTE</span>: With the exception of <code>:generic</code>, the authentication mechanism will fallback to a less secure scheme if your Usenet server does not support the method you selected.</p>
186
+
187
+
188
+ <h2>How to Submit Patches</h2>
189
+
190
+
191
+ <ul>
192
+ <li>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people&#8217;s code</a>.</li>
193
+ <li>The trunk repository is <code>svn://rubyforge.org/var/svn/nntp/trunk</code> for anonymous access.</li>
194
+ <li>You can upload your patch to the &#8220;Patches&#8221; section of the <a href="http://rubyforge.org/projects/nntp">project info page</a>.</li>
195
+ </ul>
196
+
197
+
198
+ <h2>License</h2>
199
+
200
+
201
+ <p>This code is free to use under the terms of version 2.1 of the <span class="caps">GNU</span> Lesser General Public License.</p>
202
+
203
+
204
+ <h2>Donate</h2>
205
+
206
+
207
+ Any contribution of yours, however small it may be, will highly be appreciated and used for further development of this and other F/LOSS (Free/Libre Open Source Software) Projects.
208
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
209
+ <input type="hidden" name="cmd" value="_xclick" />
210
+ <input type="hidden" name="business" value="bsd@rubyforge.org" />
211
+ <input type="image" src="https://www.paypal.com/en_US/i/logo/PayPal_mark_37x23.gif" style="border:0" name="submit" alt="[ Make payments with PayPal -it's fast, free and secure! ]" title="Please do donate to keep this project alive!" />
212
+ </form>
213
+
214
+ <h2>Documentation</h2>
215
+
216
+
217
+ <p>In addition to this page, you can also view the automatically generated RDocs in the &#8220;DocManager: Project Documentation&#8221;
218
+ section of the <a href="http://rubyforge.org/projects/nntp">project info page</a>. If you elect to install the RI documentation
219
+ when you install the gem, you can afterwards issue the following command for the <span class="caps">API</span> reference:</p>
220
+
221
+
222
+ <code>
223
+ ri Net::NNTP
224
+ </code>
225
+
226
+ <h2>Similar Gems</h2>
227
+
228
+
229
+ <p>Anton Bangratz&#8217;s <a href="http://rubyforge.org/projects/ruby-net-nntp/">ruby-net-nntp</a></p>
230
+
231
+
232
+ <h2>Credits</h2>
233
+
234
+
235
+ <ul>
236
+ <li><a href="http://rubyforge.org/">RubyForge</a> – hosting and project management</li>
237
+ <li><a href="http://newgem.rubyforge.org/">newgem</a> &#8211; new gem generator</li>
238
+ </ul>
239
+
240
+
241
+ <h2>Where to get help</h2>
242
+
243
+
244
+ <p>If you need assistance with this gem, visit the <a href="http://rubyforge.org/projects/nntp">project info page</a> to file a bug, make a support request, or suggest a new feature.</p>
245
+ <p class="coda">
246
+ Albert Vernon, 2nd January 2008<br>
247
+ Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
248
+ </p>
249
+ </div>
250
+
251
+ <!-- insert site tracking codes here, like Google Urchin -->
252
+
253
+ </body>
254
+ </html>
@@ -0,0 +1,163 @@
1
+ h1. Net::NNTP Client Library
2
+
3
+ h1. &#x2192; 'nntp'
4
+
5
+
6
+ h2. What
7
+
8
+ This gem allows you to to retrieve and post Usenet news articles via NNTP, the Network News Transfer Protocol. For details of NNTP itself, see "RFC977":http://www.ietf.org/rfc/rfc977.txt.
9
+
10
+ This library does NOT provide functions to compose Usenet news articles. You must create and format them yourself per Standard for Interchange of Usenet Messages. See "RFC850":http://www.ietf.org/rfc/rfc850.txt, "RFC2047":http://www.ietf.org/rfc/rfc2047.txt.
11
+
12
+ h2. Installing
13
+
14
+ <pre syntax="ruby">sudo gem install nntp</pre>
15
+
16
+ Alternatively, you may download the gem from the "project info page":http://rubyforge.org/projects/nntp and install manually.
17
+
18
+ h2. The basics
19
+
20
+ h3. Posting Messages
21
+
22
+ You must open a connection to a NNTP server before posting messages. The first argument is the address of your NNTP server, and the second argument is the port number. Using NNTP.start with a block is the simplest way to do this because the NNTP connection closes automatically after the block executes.
23
+
24
+ <pre syntax="ruby">
25
+ require 'rubygems'
26
+ require 'nntp'
27
+ Net::NNTP.start('your.nntp.server', 119) do |nntp|
28
+ # Use the NNTP object nntp only in this block.
29
+ end
30
+ </pre>
31
+
32
+ Replace ‘your.nntp.server’ with your NNTP server. Normally your systems administrator or internet service provider supplies a server for you.
33
+
34
+ Then you can post messages.
35
+
36
+ <pre syntax="ruby">
37
+ require 'date'
38
+ date = DateTime.now().strftime(fmt='%a, %d %b %Y %T %z')
39
+
40
+ msgstr = <<END_OF_MESSAGE
41
+ From: Your Name <your@mail.address>
42
+ Newsgroups: news.group.one, news.group.two ...
43
+ Subject: test message
44
+ Date: #{date}
45
+
46
+ This is a test message.
47
+ END_OF_MESSAGE
48
+
49
+ require 'rubygems'
50
+ require 'nntp'
51
+ Net::NNTP.start('your.nntp.server', 119) do |nntp|
52
+ nntp.post msgstr
53
+ end
54
+ </pre>
55
+
56
+ NOTE: The NNTP message headers such as @Date:@, @Message-ID:@, and @Path:@, if ommited, may automatically be added by your Usenet news server; however, it is best not to rely on this behavior.
57
+
58
+ h3. Reading Messages
59
+
60
+ This snippet will display all subject lines within a particular news group.
61
+
62
+ <pre syntax="ruby">
63
+ require 'rubygems'
64
+ require 'nntp'
65
+
66
+ newsgroup = 'comp.lang.ruby'
67
+
68
+ Net::NNTP.start('your.nntp.server', 119) do |nntp|
69
+ message_ids = nntp.listgroup(newsgroup)
70
+ message_ids[1].each do |id|
71
+ nntp.head(id).each do |header|
72
+ header.each { |line| puts(line) if line.index('Subject:') }
73
+ end
74
+ end
75
+ end
76
+ </pre>
77
+
78
+ h3. Closing the Session
79
+
80
+ You MUST close the NNTP session after posting messages by calling the Net::NNTP#finish method:
81
+
82
+ <pre syntax="ruby">
83
+ # using NNTP#finish
84
+ nntp = Net::NNTP.start('your.nntp.server', 119)
85
+ nntp.post msgstr
86
+ nntp.finish
87
+ </pre>
88
+
89
+ You can also use the block form of NNTP.start/NNTP#start. This closes the NNTP session automatically:
90
+
91
+ <pre syntax="ruby">
92
+ # using block form of NNTP.start
93
+ Net::NNTP.start('your.nntp.server', 119) do |nntp|
94
+ nntp.post msgstr
95
+ end
96
+ </pre>
97
+
98
+ We strongly recommend the latter scheme since it is simpler and more robust.
99
+
100
+ h3. NNTP Authentication
101
+
102
+ The Net::NNTP class may support various authentication schemes depending on your news server‘s reponse to CAPABILITIES command. To use NNTP authentication, pass extra arguments to NNTP.start/NNTP#start.
103
+
104
+ See "NNTP Extension for Authentication":http://www.ietf.org/internet-drafts/draft-ietf-nntpext-authinfo-07.txt.
105
+
106
+ <pre syntax="ruby">
107
+ Net::NNTP.start('your.nntp.server', 119,
108
+ 'YourAccountName', 'YourPassword', :method)
109
+ </pre>
110
+
111
+ Where @:method@ can be one of ‘gassapi’, ‘digest_md5’, ‘cram_md5’, ‘starttls’, ‘external’, ‘plain’, ‘generic’, ‘simple’ or ‘original’.
112
+
113
+ In the case of method @:generic@, arguments should be passed to a format string as follows:
114
+
115
+ <pre syntax="ruby">
116
+ Net::NNTP.start('your.nntp.server', 119,
117
+ "format", *arguments, :generic)
118
+ </pre>
119
+
120
+ NOTE: With the exception of @:generic@, the authentication mechanism will fallback to a less secure scheme if your Usenet server does not support the method you selected.
121
+
122
+
123
+ h2. How to Submit Patches
124
+
125
+ * Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/.
126
+ * The trunk repository is <code>svn://rubyforge.org/var/svn/nntp/trunk</code> for anonymous access.
127
+ * You can upload your patch to the "Patches" section of the "project info page":http://rubyforge.org/projects/nntp.
128
+
129
+ h2. License
130
+
131
+ This code is free to use under the terms of version 2.1 of the GNU Lesser General Public License.
132
+
133
+ h2. Donate
134
+
135
+ Any contribution of yours, however small it may be, will highly be appreciated and used for further development of this and other F/LOSS (Free/Libre Open Source Software) Projects.
136
+ <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
137
+ <input type="hidden" name="cmd" value="_xclick" />
138
+ <input type="hidden" name="business" value="bsd@rubyforge.org" />
139
+ <input type="image" src="https://www.paypal.com/en_US/i/logo/PayPal_mark_37x23.gif" style="border:0" name="submit" alt="[ Make payments with PayPal -it's fast, free and secure! ]" title="Please do donate to keep this project alive!" />
140
+ </form>
141
+
142
+ h2. Documentation
143
+
144
+ In addition to this page, you can also view the automatically generated RDocs in the "DocManager: Project Documentation"
145
+ section of the "project info page":http://rubyforge.org/projects/nntp. If you elect to install the RI documentation
146
+ when you install the gem, you can afterwards issue the following command for the API reference:
147
+
148
+ <code>
149
+ ri Net::NNTP
150
+ </code>
151
+
152
+ h2. Similar Gems
153
+
154
+ Anton Bangratz's "ruby-net-nntp":http://rubyforge.org/projects/ruby-net-nntp/
155
+
156
+ h2. Credits
157
+
158
+ * "RubyForge":http://rubyforge.org/ – hosting and project management
159
+ * "newgem":http://newgem.rubyforge.org/ - new gem generator
160
+
161
+ h2. Where to get help
162
+
163
+ If you need assistance with this gem, visit the "project info page":http://rubyforge.org/projects/nntp to file a bug, make a support request, or suggest a new feature.