kdict 0.1.1

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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/.yardopts +3 -0
  6. data/CODE_OF_CONDUCT.md +74 -0
  7. data/Gemfile +6 -0
  8. data/Gemfile.lock +43 -0
  9. data/LICENSE.txt +21 -0
  10. data/README.md +301 -0
  11. data/Rakefile +8 -0
  12. data/bin/console +14 -0
  13. data/bin/setup +8 -0
  14. data/docs/Between.html +302 -0
  15. data/docs/Bool.html +121 -0
  16. data/docs/Example1.md +195 -0
  17. data/docs/FalseClass.html +143 -0
  18. data/docs/KDict/Error.html +135 -0
  19. data/docs/KDict.html +128 -0
  20. data/docs/Kdict/Error.html +135 -0
  21. data/docs/Kdict.html +157 -0
  22. data/docs/Kdict_.html +143 -0
  23. data/docs/KwargDict.html +697 -0
  24. data/docs/KwargModel.html +638 -0
  25. data/docs/KwargTypes.html +988 -0
  26. data/docs/Numeric.html +148 -0
  27. data/docs/TrueClass.html +143 -0
  28. data/docs/_index.html +184 -0
  29. data/docs/class_list.html +51 -0
  30. data/docs/css/common.css +1 -0
  31. data/docs/css/full_list.css +58 -0
  32. data/docs/css/style.css +496 -0
  33. data/docs/file.Example1.html +240 -0
  34. data/docs/file.README.html +370 -0
  35. data/docs/file_list.html +61 -0
  36. data/docs/frames.html +17 -0
  37. data/docs/index.html +370 -0
  38. data/docs/js/app.js +303 -0
  39. data/docs/js/full_list.js +216 -0
  40. data/docs/js/jquery.js +4 -0
  41. data/docs/method_list.html +187 -0
  42. data/docs/top-level-namespace.html +112 -0
  43. data/examples/example1.rb +90 -0
  44. data/kdict.gemspec +39 -0
  45. data/lib/kdict/kwargdict/kwargtypes/bool.rb +9 -0
  46. data/lib/kdict/kwargdict/kwargtypes.rb +196 -0
  47. data/lib/kdict/kwargdict.rb +75 -0
  48. data/lib/kdict/kwargmodel.rb +40 -0
  49. data/lib/kdict/version.rb +5 -0
  50. data/lib/kdict.rb +19 -0
  51. data/ndoc/checksums +6 -0
  52. data/ndoc/complete +0 -0
  53. data/ndoc/object_types +0 -0
  54. data/ndoc/objects/root.dat +0 -0
  55. data/ndoc/proxy_types +0 -0
  56. metadata +150 -0
@@ -0,0 +1,240 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>
7
+ File: Example1
8
+
9
+ &mdash; Documentation by YARD 0.9.19
10
+
11
+ </title>
12
+
13
+ <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
+
15
+ <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
+
17
+ <script type="text/javascript" charset="utf-8">
18
+ pathId = "Example1";
19
+ relpath = '';
20
+ </script>
21
+
22
+
23
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
+
25
+ <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
+
27
+
28
+ </head>
29
+ <body>
30
+ <div class="nav_wrap">
31
+ <iframe id="nav" src="file_list.html?1"></iframe>
32
+ <div id="resizer"></div>
33
+ </div>
34
+
35
+ <div id="main" tabindex="-1">
36
+ <div id="header">
37
+ <div id="menu">
38
+
39
+ <a href="_index.html">Index</a> &raquo;
40
+ <span class="title">File: Example1</span>
41
+
42
+ </div>
43
+
44
+ <div id="search">
45
+
46
+ <a class="full_list_link" id="class_list_link"
47
+ href="class_list.html">
48
+
49
+ <svg width="24" height="24">
50
+ <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
51
+ <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
52
+ <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
53
+ </svg>
54
+ </a>
55
+
56
+ </div>
57
+ <div class="clear"></div>
58
+ </div>
59
+
60
+ <div id="content"><div id='filecontents'>
61
+ <h1 id="label-A+Hilariously+Contrieved+Though+Functional+Example">A Hilariously Contrieved Though Functional Example</h1>
62
+
63
+ <p>I&#39;ll just state outright that this demonstration is merely to show the usefulness of KDict in a larger example.</p>
64
+
65
+ <p>Before the code, let&#39;s just pretend you&#39;re trying to create a database of rare cars from another planet… in another galaxy, and information available to you is sparse. You just want to fill in what you know. We&#39;re going to create a set of dictionaries and a MyCar class that let&#39;s us fill in information.</p>
66
+
67
+ <p>Along the way there&#39;ll be two helper modules, HashPrint. It&#39;s irrelevant to the task at hand but will help your output look like mine, if that at all matters to you.</p>
68
+
69
+ <p>For simplicity sake, refer back to the <a href="index.html" title="README">README</a> file if you&#39;re lost on what&#39;s going on. It might be useful when looking at how the dictionaries are built to refer back to the specific <em>typedef</em> (AKA <span class='object_link'><a href="KwargTypes.html" title="KwargTypes (module)">KwargTypes</a></span> ) on a line-by-line basis to get a feel for what each does.</p>
70
+
71
+ <h2 id="label-Building+a+CarDict+Module">Building a CarDict Module</h2>
72
+
73
+ <p>The module will contain a few related KwargDicts just to make it easier to split and/or manage the way we use them. The final dict combines the former two just to demonstrate that there&#39;s a <em>typedef</em> for that purpose.</p>
74
+
75
+ <pre class="code ruby"><code class="ruby"><span class='kw'>module</span> <span class='const'>CarDict</span>
76
+ <span class='const'>ENGINE</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="KwargDict.html" title="KwargDict (class)">KwargDict</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="KwargDict.html#initialize-instance_method" title="KwargDict#initialize (method)">new</a></span></span>
77
+ <span class='const'>ENGINE</span><span class='period'>.</span><span class='id identifier rubyid_add'>add</span><span class='lparen'>(</span>
78
+ <span class='lbracket'>[</span><span class='symbol'>:hp</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'>Integer</span><span class='comma'>,</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='int'>95</span> <span class='op'>&lt;=</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&lt;=</span> <span class='int'>800</span> <span class='rbrace'>}</span> <span class='rbracket'>]</span><span class='comma'>,</span>
79
+ <span class='lbracket'>[</span><span class='symbol'>:liters</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'>Float</span><span class='comma'>,</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='int'>1</span> <span class='op'>&lt;=</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&lt;=</span> <span class='int'>10</span> <span class='rbrace'>}</span><span class='rbracket'>]</span><span class='comma'>,</span>
80
+ <span class='lbracket'>[</span><span class='symbol'>:max_torque</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'>Numeric</span><span class='comma'>,</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&gt;=</span> <span class='int'>25</span> <span class='rbrace'>}</span><span class='rbracket'>]</span><span class='comma'>,</span>
81
+ <span class='lbracket'>[</span><span class='symbol'>:turbo</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="Bool.html" title="Bool (module)">Bool</a></span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
82
+
83
+ <span class='const'>CAR_OPTIONS</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="KwargDict.html" title="KwargDict (class)">KwargDict</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="KwargDict.html#initialize-instance_method" title="KwargDict#initialize (method)">new</a></span></span>
84
+ <span class='const'>CAR_OPTIONS</span><span class='period'>.</span><span class='id identifier rubyid_add'>add</span><span class='lparen'>(</span><span class='lbracket'>[</span><span class='symbol'>:sunroof</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="Bool.html" title="Bool (module)">Bool</a></span></span><span class='rbracket'>]</span><span class='comma'>,</span>
85
+ <span class='lbracket'>[</span><span class='symbol'>:sport_package</span><span class='comma'>,</span> <span class='symbol'>:anyof</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>K1</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>K2</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>K3</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='comma'>,</span>
86
+ <span class='lbracket'>[</span><span class='symbol'>:heated_seats</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="Bool.html" title="Bool (module)">Bool</a></span></span><span class='rbracket'>]</span><span class='comma'>,</span>
87
+ <span class='lbracket'>[</span><span class='symbol'>:audio_package</span><span class='comma'>,</span> <span class='symbol'>:anyof</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Loud</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Louder</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Loudest</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='rparen'>)</span>
88
+
89
+ <span class='const'>CAR_DICT</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="KwargDict.html" title="KwargDict (class)">KwargDict</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="KwargDict.html#initialize-instance_method" title="KwargDict#initialize (method)">new</a></span></span>
90
+ <span class='const'>CAR_DICT</span><span class='period'>.</span><span class='id identifier rubyid_add'>add</span><span class='lparen'>(</span>
91
+ <span class='lbracket'>[</span><span class='symbol'>:doors</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'>Integer</span><span class='comma'>,</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&gt;=</span> <span class='int'>2</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_n'>n</span><span class='period'>.</span><span class='id identifier rubyid_even?'>even?</span> <span class='rbrace'>}</span><span class='rbracket'>]</span><span class='comma'>,</span>
92
+ <span class='lbracket'>[</span><span class='symbol'>:wheels</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'>Integer</span><span class='comma'>,</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&gt;=</span> <span class='int'>4</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_n'>n</span><span class='period'>.</span><span class='id identifier rubyid_even?'>even?</span> <span class='rbrace'>}</span><span class='rbracket'>]</span><span class='comma'>,</span>
93
+ <span class='lbracket'>[</span><span class='symbol'>:weight</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'>Numeric</span><span class='comma'>,</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&gt;=</span> <span class='int'>500</span> <span class='rbrace'>}</span><span class='rbracket'>]</span><span class='comma'>,</span>
94
+ <span class='lbracket'>[</span><span class='symbol'>:year</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'>Integer</span><span class='comma'>,</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&gt;=</span> <span class='int'>1900</span> <span class='rbrace'>}</span> <span class='rbracket'>]</span><span class='comma'>,</span>
95
+ <span class='lbracket'>[</span><span class='symbol'>:model</span><span class='comma'>,</span> <span class='symbol'>:anyof</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SpaceCowboy</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Peanut</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Icarus</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='comma'>,</span>
96
+ <span class='lbracket'>[</span><span class='symbol'>:coupe</span><span class='comma'>,</span> <span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="Bool.html" title="Bool (module)">Bool</a></span></span><span class='rbracket'>]</span><span class='comma'>,</span>
97
+ <span class='lbracket'>[</span><span class='symbol'>:comments</span><span class='comma'>,</span> <span class='symbol'>:arrayof</span><span class='comma'>,</span> <span class='const'>String</span><span class='rbracket'>]</span><span class='comma'>,</span>
98
+ <span class='lbracket'>[</span><span class='symbol'>:custom_color</span><span class='comma'>,</span> <span class='symbol'>:adv_formof</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='lbracket'>[</span><span class='symbol'>:typeof</span><span class='comma'>,</span> <span class='const'>String</span><span class='rbracket'>]</span><span class='comma'>,</span><span class='lbracket'>[</span><span class='symbol'>:formof</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='const'>Float</span><span class='rbracket'>]</span><span class='op'>*</span><span class='int'>3</span><span class='comma'>,</span> <span class='const'>Proc</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_n'>n</span><span class='op'>|</span> <span class='int'>0</span> <span class='op'>&lt;=</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_n'>n</span> <span class='op'>&lt;=</span> <span class='int'>1</span> <span class='rbrace'>}</span> <span class='rbracket'>]</span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='comma'>,</span>
99
+ <span class='lbracket'>[</span><span class='symbol'>:engine</span><span class='comma'>,</span> <span class='symbol'>:kwargsof</span><span class='comma'>,</span> <span class='const'>ENGINE</span><span class='rbracket'>]</span><span class='comma'>,</span>
100
+ <span class='lbracket'>[</span><span class='symbol'>:options</span><span class='comma'>,</span> <span class='symbol'>:kwargsof</span><span class='comma'>,</span> <span class='const'>CAR_OPTIONS</span><span class='rbracket'>]</span><span class='rparen'>)</span>
101
+ <span class='kw'>end</span>
102
+ </code></pre>
103
+
104
+ <p>From <span class='object_link'><a href="KwargDict.html#add-instance_method" title="KwargDict#add (method)">KwargDict#add</a></span> you can see the expected order for each definition is, [<strong>kword</strong>, <strong>typedef</strong>, <strong>struct</strong>, <strong>optional_prc</strong>]</p>
105
+
106
+ <h2 id="label-Adding+the+HashPrint+Module">Adding the HashPrint Module</h2>
107
+
108
+ <p>Just a convenient tool for printing hashes that might contain other hashes, as will be the case here. For every nested hash, it&#39;ll indent by two spaces and continute printing line by line. You&#39;ll see the fast and dirty approach is just to store all the valid input in a single hash for this example.</p>
109
+
110
+ <pre class="code ruby"><code class="ruby"><span class='kw'>module</span> <span class='const'>HashPrint</span>
111
+ <span class='kw'>def</span> <span class='id identifier rubyid_hash_print'>hash_print</span><span class='lparen'>(</span><span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='id identifier rubyid_ident'>ident</span><span class='op'>=</span><span class='int'>0</span><span class='rparen'>)</span>
112
+ <span class='id identifier rubyid_hash'>hash</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_v'>v</span><span class='op'>|</span>
113
+ <span class='kw'>if</span> <span class='id identifier rubyid_v'>v</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Hash</span><span class='rparen'>)</span>
114
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> </span><span class='tstring_end'>&quot;</span></span><span class='op'>*</span><span class='id identifier rubyid_ident'>ident</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_k'>k</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='tstring_end'>&quot;</span></span>
115
+ <span class='id identifier rubyid_ident'>ident</span> <span class='op'>+=</span> <span class='int'>2</span>
116
+ <span class='id identifier rubyid_hash_print'>hash_print</span><span class='lparen'>(</span><span class='id identifier rubyid_v'>v</span><span class='comma'>,</span> <span class='id identifier rubyid_ident'>ident</span><span class='rparen'>)</span>
117
+ <span class='id identifier rubyid_ident'>ident</span> <span class='op'>-=</span> <span class='int'>2</span>
118
+ <span class='kw'>else</span>
119
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> </span><span class='tstring_end'>&quot;</span></span><span class='op'>*</span><span class='id identifier rubyid_ident'>ident</span> <span class='op'>+</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_k'>k</span><span class='embexpr_end'>}</span><span class='tstring_content'>: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_v'>v</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
120
+ <span class='kw'>end</span>
121
+ <span class='kw'>end</span>
122
+ <span class='kw'>end</span>
123
+ <span class='kw'>end</span>
124
+ </code></pre>
125
+
126
+ <h2 id="label-MyCar+Class">MyCar Class</h2>
127
+
128
+ <p>I <em>think</em> this class is pretty straight forward. You tell me. We&#39;ve included both the HashPrint and CarDict modules, and so by extension the dictionaries and #hash_print.</p>
129
+
130
+ <pre class="code ruby"><code class="ruby"><span class='kw'>class</span> <span class='const'>MyCar</span>
131
+
132
+ <span class='id identifier rubyid_include'>include</span> <span class='const'>CarDict</span>
133
+ <span class='id identifier rubyid_include'>include</span> <span class='const'>HashPrint</span>
134
+
135
+ <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_kwords_vals'>kwords_vals</span><span class='rparen'>)</span>
136
+ <span class='ivar'>@dat</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
137
+ <span class='id identifier rubyid_set'>set</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_kwords_vals'>kwords_vals</span><span class='rparen'>)</span>
138
+ <span class='kw'>end</span>
139
+
140
+ <span class='kw'>def</span> <span class='op'>[]</span><span class='lparen'>(</span><span class='id identifier rubyid_dat_ele'>dat_ele</span><span class='rparen'>)</span>
141
+ <span class='ivar'>@dat</span><span class='lbracket'>[</span><span class='id identifier rubyid_dat_ele'>dat_ele</span><span class='rbracket'>]</span>
142
+ <span class='kw'>end</span>
143
+
144
+ <span class='kw'>def</span> <span class='id identifier rubyid_set'>set</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_kwords_vals'>kwords_vals</span><span class='rparen'>)</span>
145
+ <span class='id identifier rubyid_kwords_vals'>kwords_vals</span><span class='period'>.</span><span class='id identifier rubyid_each_slice'>each_slice</span><span class='lparen'>(</span><span class='int'>2</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_kword'>kword</span><span class='comma'>,</span> <span class='id identifier rubyid_val'>val</span><span class='op'>|</span>
146
+ <span class='kw'>if</span> <span class='const'>CAR_DICT</span><span class='period'>.</span><span class='id identifier rubyid_check'>check</span><span class='lparen'>(</span><span class='id identifier rubyid_kword'>kword</span><span class='comma'>,</span> <span class='id identifier rubyid_val'>val</span><span class='rparen'>)</span>
147
+ <span class='ivar'>@dat</span><span class='lbracket'>[</span><span class='id identifier rubyid_kword'>kword</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_val'>val</span>
148
+ <span class='kw'>else</span>
149
+ <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Couldn&#39;t set </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_kword'>kword</span><span class='embexpr_end'>}</span><span class='tstring_content'> with </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_val'>val</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
150
+ <span class='kw'>end</span>
151
+ <span class='kw'>end</span>
152
+ <span class='kw'>end</span>
153
+
154
+ <span class='kw'>def</span> <span class='id identifier rubyid_display'>display</span>
155
+ <span class='id identifier rubyid_hash_print'>hash_print</span><span class='lparen'>(</span><span class='ivar'>@dat</span><span class='rparen'>)</span>
156
+ <span class='kw'>end</span>
157
+
158
+ <span class='kw'>end</span>
159
+ </code></pre>
160
+
161
+ <p>We can initialize a MyCar instance with some parameters if we have them, or use #set afterwards. In this instance, #set will simply override whatever was already stored in {@<a href="kword">dat</a>}, so I&#39;ll leave it up to your imagination how you&#39;d proceed in a different context. For instance, using #set on the <em>kword</em> for <em>:options</em> would obviously just completely overwrite the nested hash, whereas you&#39;d probably just intended to add or modify it. Checking that <em>val</em> is a hash and using Hash#merge would be the most obvious solution. <em>I&#39;m chasing rabbits. I only mention it because it&#39;s in the ToDo to add another private method to <span class='object_link'><a href="KwargTypes.html" title="KwargTypes (module)">KwargTypes</a></span> that let&#39;s the user set validated data on a more granular level, such as individual keywords in a nested KwargDict.</em></p>
162
+
163
+ <p>#set will also let you know which input didn&#39;t get except. Next.</p>
164
+
165
+ <h2 id="label-Getting+To+The+Point-21">Getting To The Point!</h2>
166
+
167
+ <p>Here&#39;s a car you found out on an uncharted planet in the Blarglebones 9 System, or whatever. Let&#39;s put in the information and go ahead and display it.</p>
168
+
169
+ <h4 id="label-Adding+the+Kool+Car">Adding the Kool Car</h4>
170
+
171
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_kool_car'>kool_car</span> <span class='op'>=</span> <span class='const'>MyCar</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='symbol'>:year</span><span class='comma'>,</span> <span class='int'>1901</span><span class='comma'>,</span> <span class='symbol'>:coupe</span><span class='comma'>,</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='symbol'>:nickname</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Lil Peanut</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='symbol'>:doors</span><span class='comma'>,</span> <span class='int'>6</span><span class='comma'>,</span>
172
+ <span class='symbol'>:options</span><span class='comma'>,</span> <span class='lbrace'>{</span><span class='label'>sunroof:</span><span class='kw'>true</span><span class='comma'>,</span> <span class='label'>sport_package:</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>K2</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>audio_package:</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Loudest</span><span class='tstring_end'>&#39;</span></span><span class='rbrace'>}</span><span class='comma'>,</span>
173
+ <span class='symbol'>:custom_color</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Ugly Green</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='float'>0.51</span><span class='comma'>,</span> <span class='float'>0.94</span><span class='comma'>,</span> <span class='float'>0.79</span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='rparen'>)</span>
174
+ <span class='id identifier rubyid_kool_car'>kool_car</span><span class='period'>.</span><span class='id identifier rubyid_set'>set</span><span class='lparen'>(</span><span class='symbol'>:engine</span><span class='comma'>,</span> <span class='lbrace'>{</span><span class='label'>liters:</span><span class='float'>6.0</span><span class='comma'>,</span> <span class='label'>hp:</span><span class='int'>500</span><span class='comma'>,</span> <span class='label'>turbo:</span><span class='kw'>true</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='symbol'>:wheels</span><span class='comma'>,</span> <span class='int'>8</span><span class='rparen'>)</span>
175
+ <span class='id identifier rubyid_kool_car'>kool_car</span><span class='period'>.</span><span class='id identifier rubyid_set'>set</span><span class='lparen'>(</span><span class='symbol'>:comments</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The shovel was a ground-breaking invention.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
176
+ <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>What&#39;s brown and sticky? A stick.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Found in the Blarglebones 9 System.</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
177
+
178
+ <span class='id identifier rubyid_kool_car'>kool_car</span><span class='period'>.</span><span class='id identifier rubyid_display'>display</span>
179
+ </code></pre>
180
+
181
+ <h4 id="label-Output-3A">Output:</h4>
182
+
183
+ <pre class="code ruby"><code class="ruby">year: 1901
184
+ coupe: true
185
+ nickname: Lil Peanut
186
+ doors: 6
187
+ options:
188
+ sunroof: true
189
+ sport_package: K2
190
+ audio_package: Loudest
191
+ custom_color: [&quot;Ugly Green&quot;, [0.51, 0.94, 0.79]]
192
+ engine:
193
+ liters: 6.0
194
+ hp: 500
195
+ turbo: true
196
+ wheels: 8
197
+ comments: [&quot;The shovel was a ground-breaking invention.&quot;, &quot;What&#39;s brown and sticky? A stick.&quot;, &quot;Found in the Blarglebones 9 System.&quot;]
198
+ </code></pre>
199
+
200
+ <p>What if you&#39;re groggy from the trip and mess up the entry on another car? When we run the snippet we&#39;ll find nothing but a list of errors and an empty MyCar instance.</p>
201
+
202
+ <h4 id="label-Programming+When+You+Should+Be+Resting">Programming When You Should Be Resting</h4>
203
+
204
+ <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_break_car'>break_car</span> <span class='op'>=</span> <span class='const'>MyCar</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
205
+ <span class='id identifier rubyid_break_car'>break_car</span><span class='period'>.</span><span class='id identifier rubyid_set'>set</span><span class='lparen'>(</span><span class='symbol'>:doors</span><span class='comma'>,</span> <span class='int'>7</span><span class='comma'>,</span> <span class='symbol'>:wheels</span><span class='comma'>,</span> <span class='int'>3</span><span class='comma'>,</span> <span class='symbol'>:weight</span><span class='comma'>,</span> <span class='int'>400</span><span class='comma'>,</span> <span class='symbol'>:year</span><span class='comma'>,</span> <span class='int'>1857</span><span class='comma'>,</span> <span class='symbol'>:nickname</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Escort</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
206
+ <span class='symbol'>:coupe</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>yes</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='symbol'>:comments</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='int'>1</span><span class='comma'>,</span> <span class='int'>2</span><span class='comma'>,</span> <span class='int'>3</span><span class='comma'>,</span> <span class='int'>4</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='symbol'>:custom_color</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='float'>0.5</span><span class='comma'>,</span> <span class='float'>0.5</span><span class='comma'>,</span> <span class='float'>0.5</span><span class='rbracket'>]</span><span class='comma'>,</span>
207
+ <span class='symbol'>:engine</span><span class='comma'>,</span> <span class='lbrace'>{</span><span class='label'>supercharged:</span><span class='kw'>false</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='symbol'>:options</span><span class='comma'>,</span> <span class='lbrace'>{</span><span class='label'>heated_seats:</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>front only</span><span class='tstring_end'>&#39;</span></span><span class='rbrace'>}</span><span class='comma'>,</span>
208
+ <span class='symbol'>:comments</span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This is why sleep is so important. And this gem. But mostly coffee.</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
209
+ <span class='id identifier rubyid_break_car'>break_car</span><span class='period'>.</span><span class='id identifier rubyid_display'>display</span>
210
+ </code></pre>
211
+
212
+ <h4 id="label-Output-3A">Output:</h4>
213
+
214
+ <pre class="code ruby"><code class="ruby">Couldn&#39;t set doors with 7
215
+ Couldn&#39;t set wheels with 3
216
+ Couldn&#39;t set weight with 400
217
+ Couldn&#39;t set year with 1857
218
+ Couldn&#39;t set nickname with Escort
219
+ Couldn&#39;t set coupe with yes
220
+ Couldn&#39;t set comments with [1, 2, 3, 4]
221
+ Couldn&#39;t set custom_color with [0.5, 0.5, 0.5]
222
+ Couldn&#39;t set engine with {:supercharged=&gt;false}
223
+ Couldn&#39;t set options with {:heated_seats=&gt;&quot;front only&quot;}
224
+ comments: [&quot;This is why sleep is so important. And this gem. But mostly coffee.&quot;]
225
+ </code></pre>
226
+
227
+ <h2 id="label-Final+Thoughts+On+This+Example">Final Thoughts On This Example</h2>
228
+
229
+ <p>Thank goodness for that nifty KDict Gem, amiright? Now you can really put your collection data together quickly without having to worry about writing difficult validation code for every example. If you come across a new space-car feature, you can just add it to the dict without rewriting any code or breaking what you&#39;ve already got! AND you can share this nifty <em>gem</em> with friends so they too can document their collections. It&#39;s so easy a space-gerbil could do it.</p>
230
+ </div></div>
231
+
232
+ <div id="footer">
233
+ Generated on Thu Apr 11 21:45:29 2019 by
234
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
235
+ 0.9.19 (ruby-2.6.2).
236
+ </div>
237
+
238
+ </div>
239
+ </body>
240
+ </html>