tomdoc 0.1.0
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/LICENSE +20 -0
- data/README.md +104 -0
- data/Rakefile +80 -0
- data/bin/tomdoc +6 -0
- data/lib/tomdoc.rb +25 -0
- data/lib/tomdoc/arg.rb +14 -0
- data/lib/tomdoc/cli.rb +150 -0
- data/lib/tomdoc/generator.rb +138 -0
- data/lib/tomdoc/generators/console.rb +68 -0
- data/lib/tomdoc/generators/html.rb +42 -0
- data/lib/tomdoc/method.rb +21 -0
- data/lib/tomdoc/scope.rb +46 -0
- data/lib/tomdoc/source_parser.rb +145 -0
- data/lib/tomdoc/tomdoc.rb +133 -0
- data/lib/tomdoc/version.rb +3 -0
- data/man/tomdoc.5 +320 -0
- data/man/tomdoc.5.html +285 -0
- data/man/tomdoc.5.ronn +203 -0
- data/test/console_generator_test.rb +20 -0
- data/test/fixtures/chimney.rb +711 -0
- data/test/fixtures/multiplex.rb +47 -0
- data/test/fixtures/simple.rb +10 -0
- data/test/generator_test.rb +47 -0
- data/test/helper.rb +21 -0
- data/test/html_generator_test.rb +18 -0
- data/test/source_parser_test.rb +66 -0
- data/test/tomdoc_parser_test.rb +127 -0
- metadata +143 -0
data/man/tomdoc.5
ADDED
@@ -0,0 +1,320 @@
|
|
1
|
+
.\" generated with Ronn/v0.5
|
2
|
+
.\" http://github.com/rtomayko/ronn/
|
3
|
+
.
|
4
|
+
.TH "TOMDOC" "5" "May 2010" "MOJOMBO" "TomDoc Manual"
|
5
|
+
.
|
6
|
+
.SH "NAME"
|
7
|
+
\fBtomdoc\fR \-\- TomDoc for Ruby \- Version 0.9.0
|
8
|
+
.
|
9
|
+
.SH "Purpose"
|
10
|
+
TomDoc is a code documentation specification that helps you write precise
|
11
|
+
documentation that is nice to read in plain text, yet structured enough to be
|
12
|
+
automatically extracted and processed by a machine.
|
13
|
+
.
|
14
|
+
.P
|
15
|
+
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
16
|
+
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
17
|
+
interpreted as described in RFC 2119.
|
18
|
+
.
|
19
|
+
.SH "Class/Module Documentation"
|
20
|
+
TomDoc for classes and modules consists of a block of single comment markers
|
21
|
+
(#) that appear directly above the class/module definition. Lines SHOULD be
|
22
|
+
wrapped at 80 characters. Lines that contain text MUST be separated from the
|
23
|
+
comment marker by a single space. Lines that do not contain text SHOULD
|
24
|
+
consist of just a comment marker (no trailing spaces).
|
25
|
+
.
|
26
|
+
.P
|
27
|
+
Code examples SHOULD be indented two spaces (three spaces from the comment
|
28
|
+
marker).
|
29
|
+
.
|
30
|
+
.IP "" 4
|
31
|
+
.
|
32
|
+
.nf
|
33
|
+
|
34
|
+
# Various methods useful for performing mathematical operations. All
|
35
|
+
# methods are module methods and should be called on the Math module.
|
36
|
+
# For example:
|
37
|
+
#
|
38
|
+
# Math.square_root(9)
|
39
|
+
# # => 3
|
40
|
+
#
|
41
|
+
module Math
|
42
|
+
...
|
43
|
+
end
|
44
|
+
.
|
45
|
+
.fi
|
46
|
+
.
|
47
|
+
.IP "" 0
|
48
|
+
.
|
49
|
+
.SH "Method Documentation"
|
50
|
+
A quick example will serve to best illustrate the TomDoc method documentation
|
51
|
+
format:
|
52
|
+
.
|
53
|
+
.IP "" 4
|
54
|
+
.
|
55
|
+
.nf
|
56
|
+
|
57
|
+
# Duplicate some text an abitrary number of times.
|
58
|
+
#
|
59
|
+
# text \- The String to be duplicated.
|
60
|
+
# count \- The Integer number of times to duplicate the text.
|
61
|
+
#
|
62
|
+
# Examples
|
63
|
+
#
|
64
|
+
# multiplex('Tom', 4)
|
65
|
+
# # => 'TomTomTomTom'
|
66
|
+
#
|
67
|
+
# Returns the duplicated String.
|
68
|
+
def multiplex(text, count)
|
69
|
+
text * count
|
70
|
+
end
|
71
|
+
.
|
72
|
+
.fi
|
73
|
+
.
|
74
|
+
.IP "" 0
|
75
|
+
.
|
76
|
+
.P
|
77
|
+
TomDoc for a specific method consists of a block of single comment markers (#)
|
78
|
+
that appears directly above the method. There MUST NOT be a blank line between
|
79
|
+
the comment block and the method definition. A TomDoc method block consists of
|
80
|
+
a description section (required), an arguments section (required if the method
|
81
|
+
takes any arguments), an examples section (optional), and a returns section
|
82
|
+
(required). Lines that contain text MUST be separated from the comment
|
83
|
+
marker by a single space. Lines that do not contain text SHOULD consist of
|
84
|
+
just a comment marker (no trailing spaces).
|
85
|
+
.
|
86
|
+
.SS "The Description Section"
|
87
|
+
The description section SHOULD be in plain sentences. Each sentence SHOULD end
|
88
|
+
with a period. Good descriptions explain what the code does at a high level.
|
89
|
+
Make sure to explain any unexpected behavior that the method may have, or any
|
90
|
+
pitfalls that the user may experience. Lines SHOULD be wrapped at 80
|
91
|
+
characters.
|
92
|
+
.
|
93
|
+
.P
|
94
|
+
If a method's description begins with "Public:" then that method will be
|
95
|
+
considered part of the project's public API. For example:
|
96
|
+
.
|
97
|
+
.IP "" 4
|
98
|
+
.
|
99
|
+
.nf
|
100
|
+
|
101
|
+
# Public: Initialize a new Widget.
|
102
|
+
.
|
103
|
+
.fi
|
104
|
+
.
|
105
|
+
.IP "" 0
|
106
|
+
.
|
107
|
+
.P
|
108
|
+
This annotation is designed to let developers know which methods are
|
109
|
+
considered stable. You SHOULD use this to document the public API of your
|
110
|
+
project. This information can then be used along with \fISemantic
|
111
|
+
Versioning\fR to inform decisions on when major, minor, and
|
112
|
+
patch versions should be incremented.
|
113
|
+
.
|
114
|
+
.P
|
115
|
+
If a method's description begins with "Deprecated:" then that method will be
|
116
|
+
considered as deprecated and users will know that it will be removed in a
|
117
|
+
future version.
|
118
|
+
.
|
119
|
+
.SS "The Arguments Section"
|
120
|
+
The arguments section consists of a list of arguments. Each list item MUST be
|
121
|
+
comprised of the name of the argument, a dash, and an explanation of the
|
122
|
+
argument in plain sentences. The expected type (or types) of each argument
|
123
|
+
SHOULD be clearly indicated in the explanation. When you specify a type, use
|
124
|
+
the proper classname of the type (for instance, use 'String' instead of
|
125
|
+
'string' to refer to a String type). The dashes following each argument name
|
126
|
+
should be lined up in a single column. Lines SHOULD be wrapped at 80 columns.
|
127
|
+
If an explanation is longer than that, additional lines MUST be indented at
|
128
|
+
least two spaces but SHOULD be indented to match the indentation of the
|
129
|
+
explanation. For example:
|
130
|
+
.
|
131
|
+
.IP "" 4
|
132
|
+
.
|
133
|
+
.nf
|
134
|
+
|
135
|
+
# element \- The Symbol representation of the element. The Symbol should
|
136
|
+
# contain only lowercase ASCII alpha characters.
|
137
|
+
.
|
138
|
+
.fi
|
139
|
+
.
|
140
|
+
.IP "" 0
|
141
|
+
.
|
142
|
+
.P
|
143
|
+
All arguments are assumed to be required. If an argument is optional, you MUST
|
144
|
+
specify the default value:
|
145
|
+
.
|
146
|
+
.IP "" 4
|
147
|
+
.
|
148
|
+
.nf
|
149
|
+
|
150
|
+
# host \- The String hostname to bind (default: '0.0.0.0').
|
151
|
+
.
|
152
|
+
.fi
|
153
|
+
.
|
154
|
+
.IP "" 0
|
155
|
+
.
|
156
|
+
.P
|
157
|
+
For hash arguments, you SHOULD enumerate each valid option in a way similar
|
158
|
+
to how normal arguments are defined:
|
159
|
+
.
|
160
|
+
.IP "" 4
|
161
|
+
.
|
162
|
+
.nf
|
163
|
+
|
164
|
+
# options \- The Hash options used to refine the selection (default: {}):
|
165
|
+
# :color \- The String color to restrict by (optional).
|
166
|
+
# :weight \- The Float weight to restrict by. The weight should
|
167
|
+
# be specified in grams (optional).
|
168
|
+
.
|
169
|
+
.fi
|
170
|
+
.
|
171
|
+
.IP "" 0
|
172
|
+
.
|
173
|
+
.SS "The Examples Section"
|
174
|
+
The examples section MUST start with the word "Examples" on a line by
|
175
|
+
itself. The next line SHOULD be blank. The following lines SHOULD be indented
|
176
|
+
by two spaces (three spaces from the initial comment marker) and contain code
|
177
|
+
that shows off how to call the method and (optional) examples of what it
|
178
|
+
returns. Everything under the "Examples" line should be considered code, so
|
179
|
+
make sure you comment out lines that show return values. Separate examples
|
180
|
+
should be separated by a blank line. For example:
|
181
|
+
.
|
182
|
+
.IP "" 4
|
183
|
+
.
|
184
|
+
.nf
|
185
|
+
|
186
|
+
# Examples
|
187
|
+
#
|
188
|
+
# multiplex('x', 4)
|
189
|
+
# # => 'xxxx'
|
190
|
+
#
|
191
|
+
# multiplex('apple', 2)
|
192
|
+
# # => 'appleapple'
|
193
|
+
.
|
194
|
+
.fi
|
195
|
+
.
|
196
|
+
.IP "" 0
|
197
|
+
.
|
198
|
+
.SS "The Returns Section"
|
199
|
+
The returns section should explain in plain sentences what is returned from
|
200
|
+
the method. The line MUST begin with "Returns". If only a single thing is
|
201
|
+
returned, state the nature and type of the value. For example:
|
202
|
+
.
|
203
|
+
.IP "" 4
|
204
|
+
.
|
205
|
+
.nf
|
206
|
+
|
207
|
+
# Returns the duplicated String.
|
208
|
+
.
|
209
|
+
.fi
|
210
|
+
.
|
211
|
+
.IP "" 0
|
212
|
+
.
|
213
|
+
.P
|
214
|
+
If several different types may be returned, list all of them. For example:
|
215
|
+
.
|
216
|
+
.IP "" 4
|
217
|
+
.
|
218
|
+
.nf
|
219
|
+
|
220
|
+
# Returns the given element Symbol or nil if none was found.
|
221
|
+
.
|
222
|
+
.fi
|
223
|
+
.
|
224
|
+
.IP "" 0
|
225
|
+
.
|
226
|
+
.P
|
227
|
+
If the return value of the method is not intended to be used, then you should
|
228
|
+
simply state:
|
229
|
+
.
|
230
|
+
.IP "" 4
|
231
|
+
.
|
232
|
+
.nf
|
233
|
+
|
234
|
+
# Returns nothing.
|
235
|
+
.
|
236
|
+
.fi
|
237
|
+
.
|
238
|
+
.IP "" 0
|
239
|
+
.
|
240
|
+
.P
|
241
|
+
If the method raises exceptions that the caller may be interested in, add
|
242
|
+
additional lines that explain each exception and under what conditions it may
|
243
|
+
be encountered. The lines MUST begin with "Raises". For example:
|
244
|
+
.
|
245
|
+
.IP "" 4
|
246
|
+
.
|
247
|
+
.nf
|
248
|
+
|
249
|
+
# Returns nothing.
|
250
|
+
# Raises Errno::ENOENT if the file cannot be found.
|
251
|
+
# Raises Errno::EACCES if the file cannot be accessed.
|
252
|
+
.
|
253
|
+
.fi
|
254
|
+
.
|
255
|
+
.IP "" 0
|
256
|
+
.
|
257
|
+
.P
|
258
|
+
Lines SHOULD be wrapped at 80 columns. Wrapped lines MUST be indented under
|
259
|
+
the above line by at least two spaces. For example:
|
260
|
+
.
|
261
|
+
.IP "" 4
|
262
|
+
.
|
263
|
+
.nf
|
264
|
+
|
265
|
+
# Returns the atomic mass of the element as a Float. The value is in
|
266
|
+
# unified atomic mass units.
|
267
|
+
.
|
268
|
+
.fi
|
269
|
+
.
|
270
|
+
.IP "" 0
|
271
|
+
.
|
272
|
+
.SH "Special Considerations"
|
273
|
+
.
|
274
|
+
.SS "Attributes"
|
275
|
+
Ruby's built in \fBattr_reader\fR, \fBattr_writer\fR, and \fBattr_accessor\fR require a
|
276
|
+
bit more consideration. With TomDoc you SHOULD NOT use \fBattr_access\fR since it
|
277
|
+
represents two methods with different signatures. Restricting yourself in this
|
278
|
+
way also makes you think more carefully about the read vs. write behavior and
|
279
|
+
whether each should be part of the Public API.
|
280
|
+
.
|
281
|
+
.P
|
282
|
+
Here is an example TomDoc for \fBattr_reader\fR.
|
283
|
+
.
|
284
|
+
.IP "" 4
|
285
|
+
.
|
286
|
+
.nf
|
287
|
+
|
288
|
+
# Public: Get the user's name.
|
289
|
+
#
|
290
|
+
# Returns the String name of the user.
|
291
|
+
attr_reader :name
|
292
|
+
.
|
293
|
+
.fi
|
294
|
+
.
|
295
|
+
.IP "" 0
|
296
|
+
.
|
297
|
+
.P
|
298
|
+
Here is an example TomDoc for \fBattr_writer\fR. The parameter name should be the
|
299
|
+
same as the attribute name.
|
300
|
+
.
|
301
|
+
.IP "" 4
|
302
|
+
.
|
303
|
+
.nf
|
304
|
+
|
305
|
+
# Set the user's name.
|
306
|
+
#
|
307
|
+
# name \- The String name of the user.
|
308
|
+
#
|
309
|
+
# Returns nothing.
|
310
|
+
attr_writer :name
|
311
|
+
.
|
312
|
+
.fi
|
313
|
+
.
|
314
|
+
.IP "" 0
|
315
|
+
.
|
316
|
+
.P
|
317
|
+
While this approach certainly takes up more space than listing dozens of
|
318
|
+
attributes on a single line, it allows for individual documentation of each
|
319
|
+
attribute. Attributes are an extremely important part of a class and should be
|
320
|
+
treated with the same care as any other methods.
|
data/man/tomdoc.5.html
ADDED
@@ -0,0 +1,285 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta http-equiv='content-type' value='text/html;charset=utf8'>
|
5
|
+
<meta name='generator' value='Ronn/v0.5'>
|
6
|
+
<title>tomdoc(5) -- TomDoc for Ruby - Version 0.9.0</title>
|
7
|
+
<style type='text/css'>
|
8
|
+
body {margin:0}
|
9
|
+
#man, #man code, #man pre, #man tt, #man kbd, #man samp {
|
10
|
+
font-family:consolas,monospace;
|
11
|
+
font-size:16px;
|
12
|
+
line-height:1.3;
|
13
|
+
color:#343331;
|
14
|
+
background:#fff; }
|
15
|
+
#man { max-width:89ex; text-align:justify; margin:0 25px 25px 25px }
|
16
|
+
#man h1, #man h2, #man h3 { color:#232221;clear:left }
|
17
|
+
#man h1 { font-size:28px; margin:15px 0 30px 0; text-align:center }
|
18
|
+
#man h2 { font-size:18px; margin-bottom:0; margin-top:10px; line-height:1.3; }
|
19
|
+
#man h3 { font-size:16px; margin:0 0 0 4ex; }
|
20
|
+
#man p, #man ul, #man ol, #man dl, #man pre { margin:0 0 18px 0; }
|
21
|
+
#man pre {
|
22
|
+
color:#333231;
|
23
|
+
background:#edeceb;
|
24
|
+
padding:5px 7px;
|
25
|
+
margin:0px 0 20px 0;
|
26
|
+
border-left:2ex solid #ddd}
|
27
|
+
#man pre + h2, #man pre + h3 {
|
28
|
+
margin-top:22px;
|
29
|
+
}
|
30
|
+
#man h2 + pre, #man h3 + pre {
|
31
|
+
margin-top:5px;
|
32
|
+
}
|
33
|
+
#man > p, #man > ul, #man > ol, #man > dl, #man > pre { margin-left:8ex; }
|
34
|
+
#man dt { margin:0; clear:left }
|
35
|
+
#man dt.flush { float:left; width:8ex }
|
36
|
+
#man dd { margin:0 0 0 9ex }
|
37
|
+
#man code, #man strong, #man b { font-weight:bold; color:#131211; }
|
38
|
+
#man pre code { font-weight:normal; color:#232221; background:inherit }
|
39
|
+
#man em, var, u {
|
40
|
+
font-style:normal; color:#333231; border-bottom:1px solid #999; }
|
41
|
+
#man h1.man-title { display:none; }
|
42
|
+
#man ol.man, #man ol.man li { margin:2px 0 10px 0; padding:0;
|
43
|
+
float:left; width:33%; list-style-type:none;
|
44
|
+
text-transform:uppercase; font-size:18px; color:#999;
|
45
|
+
letter-spacing:1px;}
|
46
|
+
#man ol.man { width:100%; }
|
47
|
+
#man ol.man li.tl { text-align:left }
|
48
|
+
#man ol.man li.tc { text-align:center;letter-spacing:4px }
|
49
|
+
#man ol.man li.tr { text-align:right }
|
50
|
+
#man ol.man a { color:#999 }
|
51
|
+
#man ol.man a:hover { color:#333231 }
|
52
|
+
</style>
|
53
|
+
</head>
|
54
|
+
<body>
|
55
|
+
<div id='man'>
|
56
|
+
|
57
|
+
<h1 class='man-title'>tomdoc(5)</h1>
|
58
|
+
|
59
|
+
<ol class='head man'>
|
60
|
+
<li class='tl'>tomdoc(5)</li>
|
61
|
+
<li class='tc'>TomDoc Manual</li>
|
62
|
+
<li class='tr'>tomdoc(5)</li>
|
63
|
+
</ol>
|
64
|
+
|
65
|
+
<h2 id='NAME'>NAME</h2>
|
66
|
+
<p><code>tomdoc</code> -- TomDoc for Ruby - Version 0.9.0</p>
|
67
|
+
|
68
|
+
<h2>Purpose</h2>
|
69
|
+
|
70
|
+
<p>TomDoc is a code documentation specification that helps you write precise
|
71
|
+
documentation that is nice to read in plain text, yet structured enough to be
|
72
|
+
automatically extracted and processed by a machine.</p>
|
73
|
+
|
74
|
+
<p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
|
75
|
+
"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
|
76
|
+
interpreted as described in RFC 2119.</p>
|
77
|
+
|
78
|
+
<h2>Class/Module Documentation</h2>
|
79
|
+
|
80
|
+
<p>TomDoc for classes and modules consists of a block of single comment markers
|
81
|
+
(#) that appear directly above the class/module definition. Lines SHOULD be
|
82
|
+
wrapped at 80 characters. Lines that contain text MUST be separated from the
|
83
|
+
comment marker by a single space. Lines that do not contain text SHOULD
|
84
|
+
consist of just a comment marker (no trailing spaces).</p>
|
85
|
+
|
86
|
+
<p>Code examples SHOULD be indented two spaces (three spaces from the comment
|
87
|
+
marker).</p>
|
88
|
+
|
89
|
+
<pre><code># Various methods useful for performing mathematical operations. All
|
90
|
+
# methods are module methods and should be called on the Math module.
|
91
|
+
# For example:
|
92
|
+
#
|
93
|
+
# Math.square_root(9)
|
94
|
+
# # => 3
|
95
|
+
#
|
96
|
+
module Math
|
97
|
+
...
|
98
|
+
end
|
99
|
+
</code></pre>
|
100
|
+
|
101
|
+
<h2>Method Documentation</h2>
|
102
|
+
|
103
|
+
<p>A quick example will serve to best illustrate the TomDoc method documentation
|
104
|
+
format:</p>
|
105
|
+
|
106
|
+
<pre><code># Duplicate some text an abitrary number of times.
|
107
|
+
#
|
108
|
+
# text - The String to be duplicated.
|
109
|
+
# count - The Integer number of times to duplicate the text.
|
110
|
+
#
|
111
|
+
# Examples
|
112
|
+
#
|
113
|
+
# multiplex('Tom', 4)
|
114
|
+
# # => 'TomTomTomTom'
|
115
|
+
#
|
116
|
+
# Returns the duplicated String.
|
117
|
+
def multiplex(text, count)
|
118
|
+
text * count
|
119
|
+
end
|
120
|
+
</code></pre>
|
121
|
+
|
122
|
+
<p>TomDoc for a specific method consists of a block of single comment markers (#)
|
123
|
+
that appears directly above the method. There MUST NOT be a blank line between
|
124
|
+
the comment block and the method definition. A TomDoc method block consists of
|
125
|
+
a description section (required), an arguments section (required if the method
|
126
|
+
takes any arguments), an examples section (optional), and a returns section
|
127
|
+
(required). Lines that contain text MUST be separated from the comment
|
128
|
+
marker by a single space. Lines that do not contain text SHOULD consist of
|
129
|
+
just a comment marker (no trailing spaces).</p>
|
130
|
+
|
131
|
+
<h3>The Description Section</h3>
|
132
|
+
|
133
|
+
<p>The description section SHOULD be in plain sentences. Each sentence SHOULD end
|
134
|
+
with a period. Good descriptions explain what the code does at a high level.
|
135
|
+
Make sure to explain any unexpected behavior that the method may have, or any
|
136
|
+
pitfalls that the user may experience. Lines SHOULD be wrapped at 80
|
137
|
+
characters.</p>
|
138
|
+
|
139
|
+
<p>If a method's description begins with "Public:" then that method will be
|
140
|
+
considered part of the project's public API. For example:</p>
|
141
|
+
|
142
|
+
<pre><code># Public: Initialize a new Widget.
|
143
|
+
</code></pre>
|
144
|
+
|
145
|
+
<p>This annotation is designed to let developers know which methods are
|
146
|
+
considered stable. You SHOULD use this to document the public API of your
|
147
|
+
project. This information can then be used along with <a href="http://semver.org">Semantic
|
148
|
+
Versioning</a> to inform decisions on when major, minor, and
|
149
|
+
patch versions should be incremented.</p>
|
150
|
+
|
151
|
+
<p>If a method's description begins with "Deprecated:" then that method will be
|
152
|
+
considered as deprecated and users will know that it will be removed in a
|
153
|
+
future version.</p>
|
154
|
+
|
155
|
+
<h3>The Arguments Section</h3>
|
156
|
+
|
157
|
+
<p>The arguments section consists of a list of arguments. Each list item MUST be
|
158
|
+
comprised of the name of the argument, a dash, and an explanation of the
|
159
|
+
argument in plain sentences. The expected type (or types) of each argument
|
160
|
+
SHOULD be clearly indicated in the explanation. When you specify a type, use
|
161
|
+
the proper classname of the type (for instance, use 'String' instead of
|
162
|
+
'string' to refer to a String type). The dashes following each argument name
|
163
|
+
should be lined up in a single column. Lines SHOULD be wrapped at 80 columns.
|
164
|
+
If an explanation is longer than that, additional lines MUST be indented at
|
165
|
+
least two spaces but SHOULD be indented to match the indentation of the
|
166
|
+
explanation. For example:</p>
|
167
|
+
|
168
|
+
<pre><code># element - The Symbol representation of the element. The Symbol should
|
169
|
+
# contain only lowercase ASCII alpha characters.
|
170
|
+
</code></pre>
|
171
|
+
|
172
|
+
<p>All arguments are assumed to be required. If an argument is optional, you MUST
|
173
|
+
specify the default value:</p>
|
174
|
+
|
175
|
+
<pre><code># host - The String hostname to bind (default: '0.0.0.0').
|
176
|
+
</code></pre>
|
177
|
+
|
178
|
+
<p>For hash arguments, you SHOULD enumerate each valid option in a way similar
|
179
|
+
to how normal arguments are defined:</p>
|
180
|
+
|
181
|
+
<pre><code># options - The Hash options used to refine the selection (default: {}):
|
182
|
+
# :color - The String color to restrict by (optional).
|
183
|
+
# :weight - The Float weight to restrict by. The weight should
|
184
|
+
# be specified in grams (optional).
|
185
|
+
</code></pre>
|
186
|
+
|
187
|
+
<h3>The Examples Section</h3>
|
188
|
+
|
189
|
+
<p>The examples section MUST start with the word "Examples" on a line by
|
190
|
+
itself. The next line SHOULD be blank. The following lines SHOULD be indented
|
191
|
+
by two spaces (three spaces from the initial comment marker) and contain code
|
192
|
+
that shows off how to call the method and (optional) examples of what it
|
193
|
+
returns. Everything under the "Examples" line should be considered code, so
|
194
|
+
make sure you comment out lines that show return values. Separate examples
|
195
|
+
should be separated by a blank line. For example:</p>
|
196
|
+
|
197
|
+
<pre><code># Examples
|
198
|
+
#
|
199
|
+
# multiplex('x', 4)
|
200
|
+
# # => 'xxxx'
|
201
|
+
#
|
202
|
+
# multiplex('apple', 2)
|
203
|
+
# # => 'appleapple'
|
204
|
+
</code></pre>
|
205
|
+
|
206
|
+
<h3>The Returns Section</h3>
|
207
|
+
|
208
|
+
<p>The returns section should explain in plain sentences what is returned from
|
209
|
+
the method. The line MUST begin with "Returns". If only a single thing is
|
210
|
+
returned, state the nature and type of the value. For example:</p>
|
211
|
+
|
212
|
+
<pre><code># Returns the duplicated String.
|
213
|
+
</code></pre>
|
214
|
+
|
215
|
+
<p>If several different types may be returned, list all of them. For example:</p>
|
216
|
+
|
217
|
+
<pre><code># Returns the given element Symbol or nil if none was found.
|
218
|
+
</code></pre>
|
219
|
+
|
220
|
+
<p>If the return value of the method is not intended to be used, then you should
|
221
|
+
simply state:</p>
|
222
|
+
|
223
|
+
<pre><code># Returns nothing.
|
224
|
+
</code></pre>
|
225
|
+
|
226
|
+
<p>If the method raises exceptions that the caller may be interested in, add
|
227
|
+
additional lines that explain each exception and under what conditions it may
|
228
|
+
be encountered. The lines MUST begin with "Raises". For example:</p>
|
229
|
+
|
230
|
+
<pre><code># Returns nothing.
|
231
|
+
# Raises Errno::ENOENT if the file cannot be found.
|
232
|
+
# Raises Errno::EACCES if the file cannot be accessed.
|
233
|
+
</code></pre>
|
234
|
+
|
235
|
+
<p>Lines SHOULD be wrapped at 80 columns. Wrapped lines MUST be indented under
|
236
|
+
the above line by at least two spaces. For example:</p>
|
237
|
+
|
238
|
+
<pre><code># Returns the atomic mass of the element as a Float. The value is in
|
239
|
+
# unified atomic mass units.
|
240
|
+
</code></pre>
|
241
|
+
|
242
|
+
<h2>Special Considerations</h2>
|
243
|
+
|
244
|
+
<h3>Attributes</h3>
|
245
|
+
|
246
|
+
<p>Ruby's built in <code>attr_reader</code>, <code>attr_writer</code>, and <code>attr_accessor</code> require a
|
247
|
+
bit more consideration. With TomDoc you SHOULD NOT use <code>attr_access</code> since it
|
248
|
+
represents two methods with different signatures. Restricting yourself in this
|
249
|
+
way also makes you think more carefully about the read vs. write behavior and
|
250
|
+
whether each should be part of the Public API.</p>
|
251
|
+
|
252
|
+
<p>Here is an example TomDoc for <code>attr_reader</code>.</p>
|
253
|
+
|
254
|
+
<pre><code># Public: Get the user's name.
|
255
|
+
#
|
256
|
+
# Returns the String name of the user.
|
257
|
+
attr_reader :name
|
258
|
+
</code></pre>
|
259
|
+
|
260
|
+
<p>Here is an example TomDoc for <code>attr_writer</code>. The parameter name should be the
|
261
|
+
same as the attribute name.</p>
|
262
|
+
|
263
|
+
<pre><code># Set the user's name.
|
264
|
+
#
|
265
|
+
# name - The String name of the user.
|
266
|
+
#
|
267
|
+
# Returns nothing.
|
268
|
+
attr_writer :name
|
269
|
+
</code></pre>
|
270
|
+
|
271
|
+
<p>While this approach certainly takes up more space than listing dozens of
|
272
|
+
attributes on a single line, it allows for individual documentation of each
|
273
|
+
attribute. Attributes are an extremely important part of a class and should be
|
274
|
+
treated with the same care as any other methods.</p>
|
275
|
+
|
276
|
+
|
277
|
+
<ol class='foot man'>
|
278
|
+
<li class='tl'>MOJOMBO</li>
|
279
|
+
<li class='tc'>May 2010</li>
|
280
|
+
<li class='tr'>tomdoc(5)</li>
|
281
|
+
</ol>
|
282
|
+
|
283
|
+
</div>
|
284
|
+
</body>
|
285
|
+
</html>
|