yagni 1.2

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,554 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
7
+
8
+ <title>Class: Yell::Hash</title>
9
+
10
+ <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="../js/jquery.js" type="text/javascript"
13
+ charset="utf-8"></script>
14
+ <script src="../js/thickbox-compressed.js" type="text/javascript"
15
+ charset="utf-8"></script>
16
+ <script src="../js/quicksearch.js" type="text/javascript"
17
+ charset="utf-8"></script>
18
+ <script src="../js/darkfish.js" type="text/javascript"
19
+ charset="utf-8"></script>
20
+
21
+ </head>
22
+ <body class="class">
23
+
24
+ <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="../index.html">Home</a>
29
+ <a href="../index.html#classes">Classes</a>
30
+ <a href="../index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="file-metadata">
36
+ <div id="file-list-section" class="section">
37
+ <h3 class="section-header">In Files</h3>
38
+ <div class="section-body">
39
+ <ul>
40
+
41
+ <li><a href="../lib/yell/hash_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
42
+ class="thickbox" title="lib/yell/hash.rb">lib/yell/hash.rb</a></li>
43
+
44
+ </ul>
45
+ </div>
46
+ </div>
47
+
48
+
49
+ </div>
50
+
51
+ <div id="class-metadata">
52
+
53
+ <!-- Parent Class -->
54
+
55
+ <div id="parent-class-section" class="section">
56
+ <h3 class="section-header">Parent</h3>
57
+
58
+ <p class="link">Object</p>
59
+
60
+ </div>
61
+
62
+
63
+ <!-- Namespace Contents -->
64
+
65
+
66
+ <!-- Method Quickref -->
67
+
68
+ <div id="method-list-section" class="section">
69
+ <h3 class="section-header">Methods</h3>
70
+ <ul class="link-list">
71
+
72
+ <li><a href="#method-c-new">::new</a></li>
73
+
74
+ <li><a href="#method-i-change_context_to">#change_context_to</a></li>
75
+
76
+ <li><a href="#method-i-define_key_methods">#define_key_methods</a></li>
77
+
78
+ <li><a href="#method-i-load_data_from">#load_data_from</a></li>
79
+
80
+ <li><a href="#method-i-method_missing">#method_missing</a></li>
81
+
82
+ <li><a href="#method-i-respond_to%3F">#respond_to?</a></li>
83
+
84
+ <li><a href="#method-i-singleton_class">#singleton_class</a></li>
85
+
86
+ <li><a href="#method-i-symbolize_keys%21">#symbolize_keys!</a></li>
87
+
88
+ </ul>
89
+ </div>
90
+
91
+
92
+ <!-- Included Modules -->
93
+
94
+ </div>
95
+
96
+ <div id="project-metadata">
97
+
98
+
99
+ <div id="fileindex-section" class="section project-section">
100
+ <h3 class="section-header">Files</h3>
101
+ <ul>
102
+
103
+ <li class="file"><a href="../README_rdoc.html">README.rdoc</a></li>
104
+
105
+ </ul>
106
+ </div>
107
+
108
+
109
+ <div id="classindex-section" class="section project-section">
110
+ <h3 class="section-header">Class Index
111
+ <span class="search-toggle"><img src="../images/find.png"
112
+ height="16" width="16" alt="[+]"
113
+ title="show/hide quicksearch" /></span></h3>
114
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
115
+ <fieldset>
116
+ <legend>Quicksearch</legend>
117
+ <input type="text" name="quicksearch" value=""
118
+ class="quicksearch-field" />
119
+ </fieldset>
120
+ </form>
121
+
122
+ <ul class="link-list">
123
+
124
+ <li><a href="../Yell/Hash.html">Yell::Hash</a></li>
125
+
126
+ </ul>
127
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
128
+ </div>
129
+
130
+
131
+ </div>
132
+ </div>
133
+
134
+ <div id="documentation">
135
+ <h1 class="class">Yell::Hash</h1>
136
+
137
+ <div id="description">
138
+ <p>
139
+ <a href="Hash.html">Yell::Hash</a> is a class that provides easy access to
140
+ members, in a method-like syntax.
141
+ </p>
142
+ <p>
143
+ Usage:
144
+ </p>
145
+ <pre>
146
+ h = Yell::Hash.new({ :my =&gt; 'hash',
147
+ :is =&gt; { :just =&gt; 'awesome!' }
148
+ })
149
+
150
+ h.my #=&gt; &quot;hash&quot;
151
+ h.is.just #=&gt; &quot;awesome!&quot;
152
+ </pre>
153
+ <p>
154
+ You can also pass an arbitrary file with your data, as long as you have a
155
+ class which responds to the class method <tt>parse</tt> that will take a
156
+ string with the file content and make it a hash. For example, the
157
+ <tt>JSON</tt> class is a perfect example (as it has a method <tt>parse</tt>
158
+ that takes a json string and returns the corresponding hash)
159
+ </p>
160
+ <pre>
161
+ # File: data.json
162
+
163
+ {
164
+ &quot;my&quot;: &quot;json&quot;,
165
+
166
+ &quot;is&quot;: {
167
+ &quot;just&quot;: &quot;awesome!&quot;
168
+ }
169
+ }
170
+
171
+ # File: test.rb
172
+ require 'json'
173
+ require 'yell'
174
+ y = Yell::Hash.new('data.json', JSON)
175
+ y.my #=&gt; &quot;json&quot;
176
+ y.is.just #=&gt; &quot;awesome!&quot;</pre>
177
+
178
+ </div>
179
+
180
+ <!-- Constants -->
181
+
182
+
183
+ <!-- Attributes -->
184
+
185
+
186
+ <!-- Methods -->
187
+
188
+ <div id="public-class-method-details" class="method-section section">
189
+ <h3 class="section-header">Public Class Methods</h3>
190
+
191
+
192
+ <div id="new-method" class="method-detail ">
193
+ <a name="method-c-new"></a>
194
+
195
+ <div class="method-heading">
196
+
197
+ <span class="method-name">new</span><span
198
+ class="method-args">(data, parser=nil)</span>
199
+ <span class="method-click-advice">click to toggle source</span>
200
+
201
+ </div>
202
+
203
+ <div class="method-description">
204
+
205
+ <p>
206
+ Creates a new <a href="Hash.html">Yell::Hash</a> object. You can pass it a
207
+ hash directly, or a file name (containing your data) with a parser class
208
+ which responds to the class level method <tt>parse</tt> taking a string
209
+ with the file content and returns the corresponding hash of your data.
210
+ </p>
211
+
212
+
213
+
214
+ <div class="method-source-code"
215
+ id="new-source">
216
+ <pre>
217
+ <span class="ruby-comment cmt"># File lib/yell/hash.rb, line 46</span>
218
+ 46: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">parser</span>=<span class="ruby-keyword kw">nil</span>)
219
+ 47: <span class="ruby-ivar">@data</span> = <span class="ruby-ivar">@context</span> = {}
220
+ 48: <span class="ruby-ivar">@parser</span> = <span class="ruby-identifier">parser</span>
221
+ 49:
222
+ 50: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">data</span>
223
+ 51: <span class="ruby-keyword kw">when</span> <span class="ruby-constant">Object</span><span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>
224
+ 52: <span class="ruby-ivar">@data</span> = <span class="ruby-identifier">data</span>
225
+ 53:
226
+ 54: <span class="ruby-keyword kw">when</span> <span class="ruby-constant">String</span>
227
+ 55: <span class="ruby-identifier">load_data_from</span>(<span class="ruby-identifier">data</span>)
228
+ 56: <span class="ruby-keyword kw">end</span>
229
+ 57:
230
+ 58: <span class="ruby-identifier">symbolize_keys!</span> <span class="ruby-ivar">@data</span>
231
+ 59: <span class="ruby-ivar">@context</span> = <span class="ruby-ivar">@data</span>
232
+ 60:
233
+ 61: <span class="ruby-identifier">define_key_methods</span>
234
+ 62: <span class="ruby-keyword kw">end</span></pre>
235
+ </div>
236
+
237
+ </div>
238
+
239
+
240
+
241
+
242
+ </div>
243
+
244
+
245
+ </div>
246
+
247
+ <div id="public-instance-method-details" class="method-section section">
248
+ <h3 class="section-header">Public Instance Methods</h3>
249
+
250
+
251
+ <div id="load-data-from-method" class="method-detail ">
252
+ <a name="method-i-load_data_from"></a>
253
+
254
+ <div class="method-heading">
255
+
256
+ <span class="method-name">load_data_from</span><span
257
+ class="method-args">(file)</span>
258
+ <span class="method-click-advice">click to toggle source</span>
259
+
260
+ </div>
261
+
262
+ <div class="method-description">
263
+
264
+ <p>
265
+ Loads the data in the given file and calls the method <tt>parse</tt> on the
266
+ given parser class
267
+ </p>
268
+
269
+
270
+
271
+ <div class="method-source-code"
272
+ id="load-data-from-source">
273
+ <pre>
274
+ <span class="ruby-comment cmt"># File lib/yell/hash.rb, line 66</span>
275
+ 66: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load_data_from</span>(<span class="ruby-identifier">file</span>)
276
+ 67: <span class="ruby-identifier">file_content</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">file</span>)
277
+ 68: <span class="ruby-ivar">@data</span> = <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">parse</span> <span class="ruby-identifier">file_content</span>
278
+ 69: <span class="ruby-keyword kw">end</span></pre>
279
+ </div>
280
+
281
+ </div>
282
+
283
+
284
+
285
+
286
+ </div>
287
+
288
+
289
+ <div id="method-missing-method" class="method-detail ">
290
+ <a name="method-i-method_missing"></a>
291
+
292
+ <div class="method-heading">
293
+
294
+ <span class="method-name">method_missing</span><span
295
+ class="method-args">(meth, *args, &block)</span>
296
+ <span class="method-click-advice">click to toggle source</span>
297
+
298
+ </div>
299
+
300
+ <div class="method-description">
301
+
302
+ <p>
303
+ If the method called is in the current context, we return the value (if it
304
+ is not another <tt>Hash</tt>); or <tt>self</tt>, allowing key chaining
305
+ </p>
306
+
307
+
308
+
309
+ <div class="method-source-code"
310
+ id="method-missing-source">
311
+ <pre>
312
+ <span class="ruby-comment cmt"># File lib/yell/hash.rb, line 74</span>
313
+ 74: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">method_missing</span>(<span class="ruby-identifier">meth</span>, *<span class="ruby-identifier">args</span>, &amp;<span class="ruby-identifier">block</span>)
314
+ 75: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">meth</span>)
315
+ 76: <span class="ruby-identifier">change_context_to</span> <span class="ruby-identifier">meth</span>
316
+ 77: <span class="ruby-keyword kw">else</span>
317
+ 78: <span class="ruby-keyword kw">super</span>
318
+ 79: <span class="ruby-keyword kw">end</span>
319
+ 80: <span class="ruby-keyword kw">end</span></pre>
320
+ </div>
321
+
322
+ </div>
323
+
324
+
325
+
326
+
327
+ </div>
328
+
329
+
330
+ <div id="respond-to--method" class="method-detail ">
331
+ <a name="method-i-respond_to%3F"></a>
332
+
333
+ <div class="method-heading">
334
+
335
+ <span class="method-name">respond_to?</span><span
336
+ class="method-args">(meth)</span>
337
+ <span class="method-click-advice">click to toggle source</span>
338
+
339
+ </div>
340
+
341
+ <div class="method-description">
342
+
343
+ <p>
344
+ Updates <tt>respond_to</tt>, so that it will return true for method names
345
+ for which there is a corresponding key
346
+ </p>
347
+
348
+
349
+
350
+ <div class="method-source-code"
351
+ id="respond-to--source">
352
+ <pre>
353
+ <span class="ruby-comment cmt"># File lib/yell/hash.rb, line 84</span>
354
+ 84: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">meth</span>)
355
+ 85: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">meth</span>
356
+ 86: <span class="ruby-keyword kw">true</span>
357
+ 87: <span class="ruby-keyword kw">else</span>
358
+ 88: <span class="ruby-keyword kw">super</span>
359
+ 89: <span class="ruby-keyword kw">end</span>
360
+ 90: <span class="ruby-keyword kw">end</span></pre>
361
+ </div>
362
+
363
+ </div>
364
+
365
+
366
+
367
+
368
+ </div>
369
+
370
+
371
+ <div id="symbolize-keys--method" class="method-detail ">
372
+ <a name="method-i-symbolize_keys%21"></a>
373
+
374
+ <div class="method-heading">
375
+
376
+ <span class="method-name">symbolize_keys!</span><span
377
+ class="method-args">(hash)</span>
378
+ <span class="method-click-advice">click to toggle source</span>
379
+
380
+ </div>
381
+
382
+ <div class="method-description">
383
+
384
+ <p>
385
+ Makes all keys symbols, avoiding comparison problems
386
+ </p>
387
+
388
+
389
+
390
+ <div class="method-source-code"
391
+ id="symbolize-keys--source">
392
+ <pre>
393
+ <span class="ruby-comment cmt"># File lib/yell/hash.rb, line 93</span>
394
+ 93: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">symbolize_keys!</span>(<span class="ruby-identifier">hash</span>)
395
+ 94: <span class="ruby-identifier">hash</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span>
396
+ 95: <span class="ruby-identifier">hash</span>[<span class="ruby-identifier">key</span>.<span class="ruby-identifier">to_sym</span>] = <span class="ruby-identifier">hash</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">key</span>)
397
+ 96: <span class="ruby-keyword kw">end</span>
398
+ 97:
399
+ 98: <span class="ruby-identifier">hash</span>
400
+ 99: <span class="ruby-keyword kw">end</span></pre>
401
+ </div>
402
+
403
+ </div>
404
+
405
+
406
+
407
+
408
+ </div>
409
+
410
+
411
+ </div>
412
+
413
+ <div id="private-instance-method-details" class="method-section section">
414
+ <h3 class="section-header">Private Instance Methods</h3>
415
+
416
+
417
+ <div id="change-context-to-method" class="method-detail ">
418
+ <a name="method-i-change_context_to"></a>
419
+
420
+ <div class="method-heading">
421
+
422
+ <span class="method-name">change_context_to</span><span
423
+ class="method-args">(key)</span>
424
+ <span class="method-click-advice">click to toggle source</span>
425
+
426
+ </div>
427
+
428
+ <div class="method-description">
429
+
430
+
431
+
432
+
433
+
434
+ <div class="method-source-code"
435
+ id="change-context-to-source">
436
+ <pre>
437
+ <span class="ruby-comment cmt"># File lib/yell/hash.rb, line 119</span>
438
+ 119: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">change_context_to</span>(<span class="ruby-identifier">key</span>)
439
+ 120: <span class="ruby-ivar">@context</span> = <span class="ruby-ivar">@context</span>[<span class="ruby-identifier">key</span>]
440
+ 121:
441
+ 122: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@context</span>.<span class="ruby-identifier">kind_of?</span> <span class="ruby-constant">Object</span><span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>
442
+ 123: <span class="ruby-identifier">symbolize_keys!</span> <span class="ruby-ivar">@context</span>
443
+ 124: <span class="ruby-keyword kw">self</span>
444
+ 125: <span class="ruby-keyword kw">else</span>
445
+ 126: <span class="ruby-ivar">@context</span>
446
+ 127: <span class="ruby-keyword kw">end</span>
447
+ 128: <span class="ruby-keyword kw">end</span></pre>
448
+ </div>
449
+
450
+ </div>
451
+
452
+
453
+
454
+
455
+ </div>
456
+
457
+
458
+ <div id="define-key-methods-method" class="method-detail ">
459
+ <a name="method-i-define_key_methods"></a>
460
+
461
+ <div class="method-heading">
462
+
463
+ <span class="method-name">define_key_methods</span><span
464
+ class="method-args">()</span>
465
+ <span class="method-click-advice">click to toggle source</span>
466
+
467
+ </div>
468
+
469
+ <div class="method-description">
470
+
471
+ <p>
472
+ Defines methods for every key in the @data variable. If a key is simple
473
+ (its value is not another <tt>Hash</tt>), then the value itself is
474
+ returned; otherwise, we return <tt>self</tt> so that keys can be chained.
475
+ </p>
476
+
477
+
478
+
479
+ <div class="method-source-code"
480
+ id="define-key-methods-source">
481
+ <pre>
482
+ <span class="ruby-comment cmt"># File lib/yell/hash.rb, line 111</span>
483
+ 111: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">define_key_methods</span>
484
+ 112: <span class="ruby-ivar">@data</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
485
+ 113: <span class="ruby-identifier">singleton_class</span>.<span class="ruby-identifier">send</span>(<span class="ruby-value">:define_method</span>, <span class="ruby-identifier">k</span>) <span class="ruby-keyword kw">do</span>
486
+ 114: <span class="ruby-identifier">change_context_to</span> <span class="ruby-identifier">k</span>
487
+ 115: <span class="ruby-keyword kw">end</span>
488
+ 116: <span class="ruby-keyword kw">end</span>
489
+ 117: <span class="ruby-keyword kw">end</span></pre>
490
+ </div>
491
+
492
+ </div>
493
+
494
+
495
+
496
+
497
+ </div>
498
+
499
+
500
+ <div id="singleton-class-method" class="method-detail ">
501
+ <a name="method-i-singleton_class"></a>
502
+
503
+ <div class="method-heading">
504
+
505
+ <span class="method-name">singleton_class</span><span
506
+ class="method-args">()</span>
507
+ <span class="method-click-advice">click to toggle source</span>
508
+
509
+ </div>
510
+
511
+ <div class="method-description">
512
+
513
+
514
+
515
+
516
+
517
+ <div class="method-source-code"
518
+ id="singleton-class-source">
519
+ <pre>
520
+ <span class="ruby-comment cmt"># File lib/yell/hash.rb, line 103</span>
521
+ 103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">singleton_class</span>
522
+ 104: <span class="ruby-keyword kw">class</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">self</span>; <span class="ruby-keyword kw">self</span>; <span class="ruby-keyword kw">end</span>
523
+ 105: <span class="ruby-keyword kw">end</span></pre>
524
+ </div>
525
+
526
+ </div>
527
+
528
+
529
+
530
+
531
+ </div>
532
+
533
+
534
+ </div>
535
+
536
+
537
+ </div>
538
+
539
+
540
+ <div id="rdoc-debugging-section-dump" class="debugging-section">
541
+
542
+ <p>Disabled; run with --debug to generate this.</p>
543
+
544
+ </div>
545
+
546
+ <div id="validator-badges">
547
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
548
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
549
+ Rdoc Generator</a> 1.1.6</small>.</p>
550
+ </div>
551
+
552
+ </body>
553
+ </html>
554
+