danielsdeleo-teeth 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. data/LICENSE +11 -0
  2. data/README.rdoc +107 -10
  3. data/Rakefile +47 -31
  4. data/VERSION.yml +4 -0
  5. data/doc/classes/String.html +182 -0
  6. data/doc/classes/Teeth/DuplicateDefinitionError.html +113 -0
  7. data/doc/classes/Teeth/DuplicateRuleError.html +113 -0
  8. data/doc/classes/Teeth/InvalidDefaultDefinitionName.html +113 -0
  9. data/doc/classes/Teeth/InvalidExtensionDirectory.html +113 -0
  10. data/doc/classes/Teeth/RuleStatement.html +291 -0
  11. data/doc/classes/Teeth/RuleStatementGroup.html +195 -0
  12. data/doc/classes/Teeth/Scanner.html +535 -0
  13. data/doc/classes/Teeth/ScannerDefinition.html +253 -0
  14. data/doc/classes/Teeth/ScannerDefinitionArgumentError.html +113 -0
  15. data/doc/classes/Teeth/ScannerDefinitionGroup.html +269 -0
  16. data/doc/classes/Teeth/ScannerError.html +111 -0
  17. data/doc/classes/Teeth.html +129 -0
  18. data/doc/created.rid +1 -0
  19. data/doc/files/README_rdoc.html +314 -0
  20. data/doc/files/ext/scan_apache_logs/scan_apache_logs_yy_c.html +101 -0
  21. data/doc/files/ext/scan_rails_logs/scan_rails_logs_yy_c.html +101 -0
  22. data/doc/files/lib/rule_statement_rb.html +101 -0
  23. data/doc/files/lib/scanner_definition_rb.html +101 -0
  24. data/doc/files/lib/scanner_rb.html +108 -0
  25. data/doc/files/lib/teeth_rb.html +111 -0
  26. data/doc/fr_class_index.html +39 -0
  27. data/doc/fr_file_index.html +33 -0
  28. data/doc/fr_method_index.html +60 -0
  29. data/doc/index.html +24 -0
  30. data/doc/rdoc-style.css +208 -0
  31. data/ext/scan_apache_logs/Makefile +158 -0
  32. data/ext/scan_apache_logs/extconf.rb +3 -0
  33. data/ext/scan_apache_logs/scan_apache_logs.yy +267 -0
  34. data/ext/scan_apache_logs/scan_apache_logs.yy.c +8355 -0
  35. data/ext/scan_rails_logs/Makefile +158 -0
  36. data/ext/scan_rails_logs/extconf.rb +3 -0
  37. data/ext/scan_rails_logs/scan_rails_logs.yy +376 -0
  38. data/ext/scan_rails_logs/scan_rails_logs.yy.c +11127 -0
  39. data/lib/rule_statement.rb +61 -0
  40. data/lib/scanner.rb +98 -0
  41. data/lib/scanner_definition.rb +116 -0
  42. data/lib/teeth.rb +5 -1
  43. data/scanners/scan_apache_logs.rb +27 -0
  44. data/scanners/scan_rails_logs.rb +70 -0
  45. data/spec/fixtures/rails_1x.log +59 -0
  46. data/spec/fixtures/rails_22.log +12 -0
  47. data/spec/fixtures/rails_22_cached.log +10 -0
  48. data/spec/fixtures/rails_unordered.log +24 -0
  49. data/spec/playground/show_apache_processing.rb +13 -0
  50. data/spec/spec_helper.rb +6 -1
  51. data/spec/unit/rule_statement_spec.rb +60 -0
  52. data/spec/unit/{tokenize_apache_spec.rb → scan_apache_spec.rb} +16 -11
  53. data/spec/unit/scan_rails_logs_spec.rb +90 -0
  54. data/spec/unit/scaner_definition_spec.rb +65 -0
  55. data/spec/unit/scanner_spec.rb +109 -0
  56. data/teeth.gemspec +31 -0
  57. data/templates/tokenizer.yy.erb +168 -0
  58. metadata +60 -15
  59. data/ext/extconf.rb +0 -4
  60. data/ext/tokenize_apache_logs.yy +0 -215
  61. data/ext/tokenize_apache_logs.yy.c +0 -12067
@@ -0,0 +1,535 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Teeth::Scanner</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Teeth::Scanner</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/scanner_rb.html">
59
+ lib/scanner.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ Object
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+
81
+
82
+
83
+ </div>
84
+
85
+ <div id="method-list">
86
+ <h3 class="section-bar">Methods</h3>
87
+
88
+ <div class="name-list">
89
+ <a href="#M000011">define</a>&nbsp;&nbsp;
90
+ <a href="#M000012">definitions</a>&nbsp;&nbsp;
91
+ <a href="#M000008">entry_point</a>&nbsp;&nbsp;
92
+ <a href="#M000009">extconf</a>&nbsp;&nbsp;
93
+ <a href="#M000007">function_prefix</a>&nbsp;&nbsp;
94
+ <a href="#M000016">generate</a>&nbsp;&nbsp;
95
+ <a href="#M000006">init_function_name</a>&nbsp;&nbsp;
96
+ <a href="#M000013">load_default_definitions_for</a>&nbsp;&nbsp;
97
+ <a href="#M000005">main_function_name</a>&nbsp;&nbsp;
98
+ <a href="#M000003">new</a>&nbsp;&nbsp;
99
+ <a href="#M000010">rdoc=</a>&nbsp;&nbsp;
100
+ <a href="#M000014">rule</a>&nbsp;&nbsp;
101
+ <a href="#M000015">rules</a>&nbsp;&nbsp;
102
+ <a href="#M000004">scanner_name</a>&nbsp;&nbsp;
103
+ <a href="#M000017">write!</a>&nbsp;&nbsp;
104
+ </div>
105
+ </div>
106
+
107
+ </div>
108
+
109
+
110
+ <!-- if includes -->
111
+
112
+ <div id="section">
113
+
114
+
115
+ <div id="constants-list">
116
+ <h3 class="section-bar">Constants</h3>
117
+
118
+ <div class="name-list">
119
+ <table summary="Constants">
120
+ <tr class="top-aligned-row context-row">
121
+ <td class="context-item-name">TEMPLATE</td>
122
+ <td>=</td>
123
+ <td class="context-item-value">File.dirname(__FILE__) + &quot;/../templates/tokenizer.yy.erb&quot;</td>
124
+ </tr>
125
+ </table>
126
+ </div>
127
+ </div>
128
+
129
+
130
+
131
+ <div id="attribute-list">
132
+ <h3 class="section-bar">Attributes</h3>
133
+
134
+ <div class="name-list">
135
+ <table>
136
+ <tr class="top-aligned-row context-row">
137
+ <td class="context-item-name">rdoc</td>
138
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
139
+ <td class="context-item-desc"></td>
140
+ </tr>
141
+ <tr class="top-aligned-row context-row">
142
+ <td class="context-item-name">scanner_defns</td>
143
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
144
+ <td class="context-item-desc"></td>
145
+ </tr>
146
+ <tr class="top-aligned-row context-row">
147
+ <td class="context-item-name">scanner_rules</td>
148
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
149
+ <td class="context-item-desc"></td>
150
+ </tr>
151
+ </table>
152
+ </div>
153
+ </div>
154
+
155
+
156
+
157
+ <!-- if method_list -->
158
+ <div id="methods">
159
+ <h3 class="section-bar">Public Class methods</h3>
160
+
161
+ <div id="method-M000003" class="method-detail">
162
+ <a name="M000003"></a>
163
+
164
+ <div class="method-heading">
165
+ <a href="#M000003" class="method-signature">
166
+ <span class="method-name">new</span><span class="method-args">(name, ext_dir=nil)</span>
167
+ </a>
168
+ </div>
169
+
170
+ <div class="method-description">
171
+ <p><a class="source-toggle" href="#"
172
+ onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
173
+ <div class="method-source-code" id="M000003-source">
174
+ <pre>
175
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 13</span>
176
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">ext_dir</span>=<span class="ruby-keyword kw">nil</span>)
177
+ <span class="ruby-ivar">@scanner_base_name</span>, <span class="ruby-ivar">@ext_dir</span> = <span class="ruby-identifier">name</span>, <span class="ruby-identifier">ext_dir</span>
178
+ <span class="ruby-ivar">@scanner_defns</span>, <span class="ruby-ivar">@scanner_rules</span> = <span class="ruby-constant">ScannerDefinitionGroup</span>.<span class="ruby-identifier">new</span>, <span class="ruby-constant">RuleStatementGroup</span>.<span class="ruby-identifier">new</span>
179
+ <span class="ruby-identifier">ensure_ext_dir_exists</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ext_dir</span>
180
+ <span class="ruby-keyword kw">end</span>
181
+ </pre>
182
+ </div>
183
+ </div>
184
+ </div>
185
+
186
+ <h3 class="section-bar">Public Instance methods</h3>
187
+
188
+ <div id="method-M000011" class="method-detail">
189
+ <a name="M000011"></a>
190
+
191
+ <div class="method-heading">
192
+ <a href="#M000011" class="method-signature">
193
+ <span class="method-name">define</span><span class="method-args">(*args)</span>
194
+ </a>
195
+ </div>
196
+
197
+ <div class="method-description">
198
+ <p><a class="source-toggle" href="#"
199
+ onclick="toggleCode('M000011-source');return false;">[Source]</a></p>
200
+ <div class="method-source-code" id="M000011-source">
201
+ <pre>
202
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 51</span>
203
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">define</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
204
+ <span class="ruby-ivar">@scanner_defns</span>.<span class="ruby-identifier">add</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
205
+ <span class="ruby-keyword kw">end</span>
206
+ </pre>
207
+ </div>
208
+ </div>
209
+ </div>
210
+
211
+ <div id="method-M000012" class="method-detail">
212
+ <a name="M000012"></a>
213
+
214
+ <div class="method-heading">
215
+ <a href="#M000012" class="method-signature">
216
+ <span class="method-name">definitions</span><span class="method-args">() {|@scanner_defns| ...}</span>
217
+ </a>
218
+ </div>
219
+
220
+ <div class="method-description">
221
+ <p><a class="source-toggle" href="#"
222
+ onclick="toggleCode('M000012-source');return false;">[Source]</a></p>
223
+ <div class="method-source-code" id="M000012-source">
224
+ <pre>
225
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 55</span>
226
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">definitions</span>
227
+ <span class="ruby-keyword kw">yield</span> <span class="ruby-ivar">@scanner_defns</span>
228
+ <span class="ruby-keyword kw">end</span>
229
+ </pre>
230
+ </div>
231
+ </div>
232
+ </div>
233
+
234
+ <div id="method-M000008" class="method-detail">
235
+ <a name="M000008"></a>
236
+
237
+ <div class="method-heading">
238
+ <a href="#M000008" class="method-signature">
239
+ <span class="method-name">entry_point</span><span class="method-args">()</span>
240
+ </a>
241
+ </div>
242
+
243
+ <div class="method-description">
244
+ <p><a class="source-toggle" href="#"
245
+ onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
246
+ <div class="method-source-code" id="M000008-source">
247
+ <pre>
248
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 35</span>
249
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">entry_point</span>
250
+ <span class="ruby-value str">&quot;scan_&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@scanner_base_name</span>.<span class="ruby-identifier">to_s</span>
251
+ <span class="ruby-keyword kw">end</span>
252
+ </pre>
253
+ </div>
254
+ </div>
255
+ </div>
256
+
257
+ <div id="method-M000009" class="method-detail">
258
+ <a name="M000009"></a>
259
+
260
+ <div class="method-heading">
261
+ <a href="#M000009" class="method-signature">
262
+ <span class="method-name">extconf</span><span class="method-args">()</span>
263
+ </a>
264
+ </div>
265
+
266
+ <div class="method-description">
267
+ <p><a class="source-toggle" href="#"
268
+ onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
269
+ <div class="method-source-code" id="M000009-source">
270
+ <pre>
271
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 39</span>
272
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">extconf</span>
273
+ <span class="ruby-value str">'require &quot;mkmf&quot;'</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'$CFLAGS += &quot; -Wall&quot;'</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;\n&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;create_makefile &quot;</span> <span class="ruby-operator">+</span>
274
+ <span class="ruby-node">%Q|&quot;teeth/#{scanner_name}&quot;, &quot;./&quot;\n|</span>
275
+ <span class="ruby-keyword kw">end</span>
276
+ </pre>
277
+ </div>
278
+ </div>
279
+ </div>
280
+
281
+ <div id="method-M000007" class="method-detail">
282
+ <a name="M000007"></a>
283
+
284
+ <div class="method-heading">
285
+ <a href="#M000007" class="method-signature">
286
+ <span class="method-name">function_prefix</span><span class="method-args">()</span>
287
+ </a>
288
+ </div>
289
+
290
+ <div class="method-description">
291
+ <p><a class="source-toggle" href="#"
292
+ onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
293
+ <div class="method-source-code" id="M000007-source">
294
+ <pre>
295
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 31</span>
296
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">function_prefix</span>
297
+ <span class="ruby-ivar">@scanner_base_name</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;_yy&quot;</span>
298
+ <span class="ruby-keyword kw">end</span>
299
+ </pre>
300
+ </div>
301
+ </div>
302
+ </div>
303
+
304
+ <div id="method-M000016" class="method-detail">
305
+ <a name="M000016"></a>
306
+
307
+ <div class="method-heading">
308
+ <a href="#M000016" class="method-signature">
309
+ <span class="method-name">generate</span><span class="method-args">()</span>
310
+ </a>
311
+ </div>
312
+
313
+ <div class="method-description">
314
+ <p><a class="source-toggle" href="#"
315
+ onclick="toggleCode('M000016-source');return false;">[Source]</a></p>
316
+ <div class="method-source-code" id="M000016-source">
317
+ <pre>
318
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 71</span>
319
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">generate</span>
320
+ <span class="ruby-identifier">template</span> = <span class="ruby-constant">ERB</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">IO</span>.<span class="ruby-identifier">read</span>(<span class="ruby-constant">TEMPLATE</span>))
321
+ <span class="ruby-identifier">scanner</span> = <span class="ruby-keyword kw">self</span>
322
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">binding</span>
323
+ <span class="ruby-identifier">template</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">b</span>)
324
+ <span class="ruby-keyword kw">end</span>
325
+ </pre>
326
+ </div>
327
+ </div>
328
+ </div>
329
+
330
+ <div id="method-M000006" class="method-detail">
331
+ <a name="M000006"></a>
332
+
333
+ <div class="method-heading">
334
+ <a href="#M000006" class="method-signature">
335
+ <span class="method-name">init_function_name</span><span class="method-args">()</span>
336
+ </a>
337
+ </div>
338
+
339
+ <div class="method-description">
340
+ <p><a class="source-toggle" href="#"
341
+ onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
342
+ <div class="method-source-code" id="M000006-source">
343
+ <pre>
344
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 27</span>
345
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">init_function_name</span>
346
+ <span class="ruby-value str">&quot;Init_&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">scanner_name</span>
347
+ <span class="ruby-keyword kw">end</span>
348
+ </pre>
349
+ </div>
350
+ </div>
351
+ </div>
352
+
353
+ <div id="method-M000013" class="method-detail">
354
+ <a name="M000013"></a>
355
+
356
+ <div class="method-heading">
357
+ <a href="#M000013" class="method-signature">
358
+ <span class="method-name">load_default_definitions_for</span><span class="method-args">(*defn_types)</span>
359
+ </a>
360
+ </div>
361
+
362
+ <div class="method-description">
363
+ <p><a class="source-toggle" href="#"
364
+ onclick="toggleCode('M000013-source');return false;">[Source]</a></p>
365
+ <div class="method-source-code" id="M000013-source">
366
+ <pre>
367
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 59</span>
368
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load_default_definitions_for</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">defn_types</span>)
369
+ <span class="ruby-ivar">@scanner_defns</span>.<span class="ruby-identifier">defaults_for</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">defn_types</span>)
370
+ <span class="ruby-keyword kw">end</span>
371
+ </pre>
372
+ </div>
373
+ </div>
374
+ </div>
375
+
376
+ <div id="method-M000005" class="method-detail">
377
+ <a name="M000005"></a>
378
+
379
+ <div class="method-heading">
380
+ <a href="#M000005" class="method-signature">
381
+ <span class="method-name">main_function_name</span><span class="method-args">()</span>
382
+ </a>
383
+ </div>
384
+
385
+ <div class="method-description">
386
+ <p><a class="source-toggle" href="#"
387
+ onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
388
+ <div class="method-source-code" id="M000005-source">
389
+ <pre>
390
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 23</span>
391
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">main_function_name</span>
392
+ <span class="ruby-value str">&quot;t_&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">scanner_name</span>
393
+ <span class="ruby-keyword kw">end</span>
394
+ </pre>
395
+ </div>
396
+ </div>
397
+ </div>
398
+
399
+ <div id="method-M000010" class="method-detail">
400
+ <a name="M000010"></a>
401
+
402
+ <div class="method-heading">
403
+ <a href="#M000010" class="method-signature">
404
+ <span class="method-name">rdoc=</span><span class="method-args">(rdoc_text)</span>
405
+ </a>
406
+ </div>
407
+
408
+ <div class="method-description">
409
+ <p><a class="source-toggle" href="#"
410
+ onclick="toggleCode('M000010-source');return false;">[Source]</a></p>
411
+ <div class="method-source-code" id="M000010-source">
412
+ <pre>
413
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 44</span>
414
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rdoc=</span>(<span class="ruby-identifier">rdoc_text</span>)
415
+ <span class="ruby-identifier">lines_of_rdoc_text</span> = <span class="ruby-identifier">rdoc_text</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;\n&quot;</span>).<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span> <span class="ruby-value str">&quot; * &quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip</span>}
416
+ <span class="ruby-identifier">lines_of_rdoc_text</span>.<span class="ruby-identifier">first</span>[<span class="ruby-value">0</span>] = <span class="ruby-value str">&quot;/&quot;</span>
417
+ <span class="ruby-identifier">lines_of_rdoc_text</span>[<span class="ruby-value">-1</span>] = <span class="ruby-identifier">lines_of_rdoc_text</span>.<span class="ruby-identifier">last</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot; */&quot;</span>
418
+ <span class="ruby-ivar">@rdoc</span> = <span class="ruby-identifier">lines_of_rdoc_text</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
419
+ <span class="ruby-keyword kw">end</span>
420
+ </pre>
421
+ </div>
422
+ </div>
423
+ </div>
424
+
425
+ <div id="method-M000014" class="method-detail">
426
+ <a name="M000014"></a>
427
+
428
+ <div class="method-heading">
429
+ <a href="#M000014" class="method-signature">
430
+ <span class="method-name">rule</span><span class="method-args">(*args)</span>
431
+ </a>
432
+ </div>
433
+
434
+ <div class="method-description">
435
+ <p><a class="source-toggle" href="#"
436
+ onclick="toggleCode('M000014-source');return false;">[Source]</a></p>
437
+ <div class="method-source-code" id="M000014-source">
438
+ <pre>
439
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 63</span>
440
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rule</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
441
+ <span class="ruby-identifier">scanner_rules</span>.<span class="ruby-identifier">add</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">args</span>)
442
+ <span class="ruby-keyword kw">end</span>
443
+ </pre>
444
+ </div>
445
+ </div>
446
+ </div>
447
+
448
+ <div id="method-M000015" class="method-detail">
449
+ <a name="M000015"></a>
450
+
451
+ <div class="method-heading">
452
+ <a href="#M000015" class="method-signature">
453
+ <span class="method-name">rules</span><span class="method-args">() {|scanner_rules| ...}</span>
454
+ </a>
455
+ </div>
456
+
457
+ <div class="method-description">
458
+ <p><a class="source-toggle" href="#"
459
+ onclick="toggleCode('M000015-source');return false;">[Source]</a></p>
460
+ <div class="method-source-code" id="M000015-source">
461
+ <pre>
462
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 67</span>
463
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">rules</span>
464
+ <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">scanner_rules</span>
465
+ <span class="ruby-keyword kw">end</span>
466
+ </pre>
467
+ </div>
468
+ </div>
469
+ </div>
470
+
471
+ <div id="method-M000004" class="method-detail">
472
+ <a name="M000004"></a>
473
+
474
+ <div class="method-heading">
475
+ <a href="#M000004" class="method-signature">
476
+ <span class="method-name">scanner_name</span><span class="method-args">()</span>
477
+ </a>
478
+ </div>
479
+
480
+ <div class="method-description">
481
+ <p><a class="source-toggle" href="#"
482
+ onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
483
+ <div class="method-source-code" id="M000004-source">
484
+ <pre>
485
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 19</span>
486
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">scanner_name</span>
487
+ <span class="ruby-value str">&quot;scan_&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@scanner_base_name</span>.<span class="ruby-identifier">to_s</span>
488
+ <span class="ruby-keyword kw">end</span>
489
+ </pre>
490
+ </div>
491
+ </div>
492
+ </div>
493
+
494
+ <div id="method-M000017" class="method-detail">
495
+ <a name="M000017"></a>
496
+
497
+ <div class="method-heading">
498
+ <a href="#M000017" class="method-signature">
499
+ <span class="method-name">write!</span><span class="method-args">()</span>
500
+ </a>
501
+ </div>
502
+
503
+ <div class="method-description">
504
+ <p><a class="source-toggle" href="#"
505
+ onclick="toggleCode('M000017-source');return false;">[Source]</a></p>
506
+ <div class="method-source-code" id="M000017-source">
507
+ <pre>
508
+ <span class="ruby-comment cmt"># File lib/scanner.rb, line 78</span>
509
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">write!</span>
510
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">InvalidExtensionDirectory</span>, <span class="ruby-value str">&quot;no extension directory specified&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@ext_dir</span>
511
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@ext_dir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;/extconf.rb&quot;</span>, <span class="ruby-value str">&quot;w&quot;</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">extconf_rb</span><span class="ruby-operator">|</span>
512
+ <span class="ruby-identifier">extconf_rb</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">extconf</span>
513
+ <span class="ruby-keyword kw">end</span>
514
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-ivar">@ext_dir</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">scanner_name</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;.yy&quot;</span>, <span class="ruby-value str">&quot;w&quot;</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">scanner</span><span class="ruby-operator">|</span>
515
+ <span class="ruby-identifier">scanner</span>.<span class="ruby-identifier">write</span> <span class="ruby-identifier">generate</span>
516
+ <span class="ruby-keyword kw">end</span>
517
+ <span class="ruby-keyword kw">end</span>
518
+ </pre>
519
+ </div>
520
+ </div>
521
+ </div>
522
+
523
+
524
+ </div>
525
+
526
+
527
+ </div>
528
+
529
+
530
+ <div id="validator-badges">
531
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
532
+ </div>
533
+
534
+ </body>
535
+ </html>