cliutils 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.yardoc/checksums +11 -11
  4. data/.yardoc/object_types +0 -0
  5. data/.yardoc/objects/root.dat +0 -0
  6. data/Gemfile.lock +12 -33
  7. data/README.md +1 -1
  8. data/Rakefile +36 -31
  9. data/cliutils.gemspec +3 -2
  10. data/lib/cliutils/configuration.rb +13 -31
  11. data/lib/cliutils/configurator.rb +23 -62
  12. data/lib/cliutils/ext/Hash+Extensions.rb +39 -78
  13. data/lib/cliutils/ext/Logger+Extensions.rb +6 -11
  14. data/lib/cliutils/ext/String+Extensions.rb +25 -13
  15. data/lib/cliutils/logger-delegator.rb +15 -39
  16. data/lib/cliutils/messenging.rb +10 -28
  17. data/lib/cliutils/prefs.rb +18 -43
  18. data/lib/cliutils/pretty-io.rb +59 -127
  19. data/lib/cliutils/version.rb +2 -1
  20. data/lib/cliutils.rb +2 -0
  21. metadata +20 -32
  22. data/bin/cliutils +0 -38
  23. data/doc/CLIUtils/Configuration.html +0 -373
  24. data/doc/CLIUtils/Configurator.html +0 -873
  25. data/doc/CLIUtils/LoggerDelegator.html +0 -560
  26. data/doc/CLIUtils/Messenging.html +0 -396
  27. data/doc/CLIUtils/Prefs.html +0 -609
  28. data/doc/CLIUtils/PrettyIO.html +0 -1333
  29. data/doc/CLIUtils.html +0 -131
  30. data/doc/Hash.html +0 -672
  31. data/doc/Logger.html +0 -233
  32. data/doc/String.html +0 -562
  33. data/doc/_index.html +0 -207
  34. data/doc/class_list.html +0 -54
  35. data/doc/css/common.css +0 -1
  36. data/doc/css/full_list.css +0 -57
  37. data/doc/css/style.css +0 -339
  38. data/doc/file.README.html +0 -415
  39. data/doc/file_list.html +0 -56
  40. data/doc/frames.html +0 -26
  41. data/doc/index.html +0 -415
  42. data/doc/js/app.js +0 -219
  43. data/doc/js/full_list.js +0 -178
  44. data/doc/js/jquery.js +0 -4
  45. data/doc/method_list.html +0 -389
  46. data/doc/top-level-namespace.html +0 -114
data/doc/index.html DELETED
@@ -1,415 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
- <head>
5
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6
- <title>
7
- File: README
8
-
9
- &mdash; Documentation by YARD 0.8.7.4
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
- hasFrames = window.top.frames.main ? true : false;
19
- relpath = '';
20
- framesUrl = "frames.html#!file.README.html";
21
- </script>
22
-
23
-
24
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
25
-
26
- <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
27
-
28
-
29
- </head>
30
- <body>
31
- <div id="header">
32
- <div id="menu">
33
-
34
- <a href="_index.html">Index</a> &raquo;
35
- <span class="title">File: README</span>
36
-
37
-
38
- <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
39
- </div>
40
-
41
- <div id="search">
42
-
43
- <a class="full_list_link" id="class_list_link"
44
- href="class_list.html">
45
- Class List
46
- </a>
47
-
48
- <a class="full_list_link" id="method_list_link"
49
- href="method_list.html">
50
- Method List
51
- </a>
52
-
53
- <a class="full_list_link" id="file_list_link"
54
- href="file_list.html">
55
- File List
56
- </a>
57
-
58
- </div>
59
- <div class="clear"></div>
60
- </div>
61
-
62
- <iframe id="search_frame"></iframe>
63
-
64
- <div id="content"><div id='filecontents'>
65
- <h1 id="label-CLIUtils">CLIUtils</h1>
66
-
67
- <p>CLIUtils is a library of functionality designed to alleviate common tasks
68
- and headaches when developing command-line (CLI) apps in Ruby.</p>
69
-
70
- <h1 id="label-Why%3F">Why?</h1>
71
-
72
- <p>It&#39;s fairly simple:</p>
73
- <ol><li>
74
- <p>I love developing Ruby-based CLI apps.</p>
75
- </li><li>
76
- <p>I found myself copy/pasting common code from one to another.</p>
77
- </li><li>
78
- <p>I decided to do something about it.</p>
79
- </li></ol>
80
-
81
- <h1 id="label-Installation">Installation</h1>
82
-
83
- <p>Add this line to your application&#39;s Gemfile:</p>
84
-
85
- <pre class="code ruby"><code class="ruby">$ gem &#39;cliutils&#39;</code></pre>
86
-
87
- <p>And then execute:</p>
88
-
89
- <pre class="code ruby"><code class="ruby">$ bundle</code></pre>
90
-
91
- <p>Or install it yourself:</p>
92
-
93
- <pre class="code ruby"><code class="ruby">$ gem install cliutils</code></pre>
94
-
95
- <h1 id="label-Usage">Usage</h1>
96
-
97
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>cliutils</span><span class='tstring_end'>&#39;</span></span>
98
- </code></pre>
99
-
100
- <p>If you want to mix in everything that CLIUtils has to offer:</p>
101
-
102
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_include'>include</span> <span class='const'>CLIUtils</span></code></pre>
103
-
104
- <p>Alternatively, as described below, mix in only the libraries that you want.</p>
105
-
106
- <p>Note that although this README.md is extensive, it may not cover all
107
- methods. Check out the <a
108
- href="https://github.com/bachya/cli-utils/tree/master/test">tests</a> to
109
- see more examples.</p>
110
-
111
- <h1 id="label-Libraries">Libraries</h1>
112
-
113
- <p>CLIUtils offers:</p>
114
- <ul><li>
115
- <p><a href="https://github.com/bachya/cli-utils#prettyio">PrettyIO</a>:
116
- nicer-looking CLI messages</p>
117
- </li><li>
118
- <p><a href="https://github.com/bachya/cli-utils#messenging">Messenging</a>: a
119
- full-featured Logger</p>
120
- </li><li>
121
- <p><a
122
- href="https://github.com/bachya/cli-utils#configuration">Configuration</a>:
123
- a app configuration manager</p>
124
- </li><li>
125
- <p><a href="https://github.com/bachya/cli-utils#prefs">Prefs</a>: a
126
- preferences prompter and manager</p>
127
- </li></ul>
128
-
129
- <h2 id="label-PrettyIO">PrettyIO</h2>
130
-
131
- <p>First stop on our journey is better client IO. To activate, simply mix into
132
- your project:</p>
133
-
134
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_include'>include</span> <span class='const'>CLIUtils</span><span class='op'>::</span><span class='const'>PrettyIO</span>
135
- </code></pre>
136
-
137
- <p>PrettyIO affords you colorized strings:</p>
138
-
139
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>A sample string</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_red'>red</span>
140
- </code></pre>
141
-
142
- <p><img
143
- src="https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/prettyio-red-text.png"></p>
144
-
145
- <p>PrettyIO gives you utility methods for the common ANSI color codes:</p>
146
-
147
- <pre class="code ruby"><code class="ruby"><span class='const'>String</span><span class='period'>.</span><span class='id identifier rubyid_blue'>blue</span>
148
- <span class='const'>String</span><span class='period'>.</span><span class='id identifier rubyid_cyan'>cyan</span>
149
- <span class='const'>String</span><span class='period'>.</span><span class='id identifier rubyid_green'>green</span>
150
- <span class='const'>String</span><span class='period'>.</span><span class='id identifier rubyid_purple'>purple</span>
151
- <span class='const'>String</span><span class='period'>.</span><span class='id identifier rubyid_red'>red</span>
152
- <span class='const'>String</span><span class='period'>.</span><span class='id identifier rubyid_white'>white</span>
153
- <span class='const'>String</span><span class='period'>.</span><span class='id identifier rubyid_yellow'>yellow</span>
154
- </code></pre>
155
-
156
- <p>You also get the <code>colorize</code> method, which allows you to define
157
- more complex color combinations. For example, to get some nice purple text
158
- on a gnarly green background:</p>
159
-
160
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>A sample string</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_colorize'>colorize</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>35;42</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
161
- </code></pre>
162
-
163
- <p><img
164
- src="https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/prettyio-gnarly-text.png"></p>
165
-
166
- <p>Naturally, memorizing the ANSI color scheme is a pain, so PrettyIO gives
167
- you a convenient method to look up these color combinations:</p>
168
-
169
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_color_chart'>color_chart</span>
170
- </code></pre>
171
-
172
- <p><img
173
- src="https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/prettyio-color-chart.png"></p>
174
-
175
- <h2 id="label-Messenging">Messenging</h2>
176
-
177
- <p>Throughout the life of your application, you will most likely want to send
178
- several messages to your user (warnings, errors, info, etc.). Messenging
179
- makes this a snap. It, too, is a mixin:</p>
180
-
181
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_include'>include</span> <span class='const'>CLIUtils</span><span class='op'>::</span><span class='const'>Messenging</span>
182
- </code></pre>
183
-
184
- <p>Once mixed in, you get access to <code>messenger</code>, a type of Logger
185
- that uses PrettyIO to send nicely-formatted messages to your user. For
186
- example, if you&#39;d like to warn your user:</p>
187
-
188
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_warn'>warn</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Hey pal, you need to be careful.</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
189
- </code></pre>
190
-
191
- <p><img
192
- src="https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/messenger-warn.png"></p>
193
-
194
- <h3 id="label-Messenging+Methods">Messenging Methods</h3>
195
-
196
- <p><code>messenger</code> gives you access to several basic methods:</p>
197
- <ul><li>
198
- <p><code>messenger.error</code>: used to show a formatted-red error message.</p>
199
- </li><li>
200
- <p><code>messenger.info</code>: used to show a formatted-blue infomational
201
- message.</p>
202
- </li><li>
203
- <p><code>messenger.section</code>: used to show a formatted-purple sectional
204
- message.</p>
205
- </li><li>
206
- <p><code>messenger.success</code>: used to show a formatted-green success
207
- message.</p>
208
- </li><li>
209
- <p><code>messenger.yellow</code>: used to show a formatted-yellow warning
210
- message.</p>
211
- </li></ul>
212
-
213
- <p>Let&#39;s see an example that uses them all:</p>
214
-
215
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_section'>section</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>STARTING ATTACK RUN...</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
216
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_info'>info</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Beginning strafing run...</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
217
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_warn'>warn</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>WARNING: Tie Fighters approaching!</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
218
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_error'>error</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Porkins died :(</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
219
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_success'>success</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>But Luke still blew up the Death Star!</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span></code></pre>
220
-
221
- <p><img
222
- src="https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/messenger-types-1.png"></p>
223
-
224
- <p><code>messenger</code> also includes two “block” methods that allow you to
225
- wrap program execution in messages that are “longer-term”.</p>
226
-
227
- <pre class="code ruby"><code class="ruby">messenger.info_block(&#39;Starting up...&#39;, &#39;Done!&#39;, multiline = false) { # do stuff here }</code></pre>
228
-
229
- <p><code>messenger</code> outputs &#39;Starting up…&#39;, runs the code in
230
- <code># do stuff here</code>, and once complete, outputs &#39;Done!&#39; on
231
- the same line. Note that <code>section_block</code> is the same exact
232
- signature (except for the method name, of course!).</p>
233
-
234
- <h3 id="label-Message+Wrapping">Message Wrapping</h3>
235
-
236
- <p>PrettyIO also gives <code>messenger</code> the ability to wrap your
237
- messages so that they don&#39;t span off into infinity. You can even
238
- control what the wrap limit (in characters) is:</p>
239
-
240
- <pre class="code ruby"><code class="ruby"><span class='const'>CLIUtils</span><span class='op'>::</span><span class='const'>PrettyIO</span><span class='op'>::</span><span class='id identifier rubyid_wrap_at'>wrap_at</span><span class='lparen'>(</span><span class='int'>50</span><span class='rparen'>)</span>
241
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_info'>info</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This is a really long message, okay? It should wrap at some point. Seriously. Wrapping is nice.</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
242
- <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
243
- <span class='const'>CLIUtils</span><span class='op'>::</span><span class='const'>PrettyIO</span><span class='op'>::</span><span class='id identifier rubyid_wrap_at'>wrap_at</span><span class='lparen'>(</span><span class='int'>20</span><span class='rparen'>)</span>
244
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_info'>info</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This is a really long message, okay? It should wrap at some point. Seriously. Wrapping is nice.</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
245
- <span class='id identifier rubyid_puts'>puts</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
246
- <span class='const'>CLIUtils</span><span class='op'>::</span><span class='const'>PrettyIO</span><span class='op'>::</span><span class='id identifier rubyid_wrap'>wrap</span><span class='lparen'>(</span><span class='kw'>false</span><span class='rparen'>)</span>
247
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_info'>info</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This is a really long message, okay? It should wrap at some point. Seriously. Wrapping is nice.</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span></code></pre>
248
-
249
- <p><img
250
- src="https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/wrapping.png"></p>
251
-
252
- <h3 id="label-Prompting">Prompting</h3>
253
-
254
- <p><code>messenger</code> also carries a convenient method to prompt your
255
- users to give input (including an optional default). It makes use of
256
- <code>readline</code>, so you can do cool things like text expansion of
257
- paths.</p>
258
-
259
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_p'>p</span> <span class='op'>=</span> <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_prompt'>prompt</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Are you a fan of Battlestar Galactica?</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_default'>default</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Y</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
260
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_info'>info</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>You answered: </span><span class='embexpr_beg'>#{</span> <span class='id identifier rubyid_p'>p</span> <span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span></code></pre>
261
-
262
- <p><img
263
- src="https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/prompting.png"></p>
264
-
265
- <h3 id="label-Logging">Logging</h3>
266
-
267
- <p>Often, it&#39;s desirable to log messages as they appear to your user.
268
- <code>messenging</code> makes this a breeze by allowing you to attach and
269
- detach Logger instances at will.</p>
270
-
271
- <p>For instance, let&#39;s say you wanted to log a few messages to both your
272
- user&#39;s STDOUT and to <code>file.txt</code>:</p>
273
-
274
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_file_logger'>file_logger</span> <span class='op'>=</span> <span class='const'>Logger</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>file.txt</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
275
-
276
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_info'>info</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This should only appear in STDOUT.</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
277
-
278
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_attach'>attach</span><span class='lparen'>(</span><span class='id identifier rubyid_file_logger'>file_logger</span><span class='rparen'>)</span>
279
-
280
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_warn'>warn</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This warning should appear in STDOUT and file.txt</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
281
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_error'>error</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This error should appear in STDOUT and file.txt</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
282
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_debug'>debug</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This debug message should only appear in file.txt</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
283
-
284
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_detach'>detach</span><span class='lparen'>(</span><span class='id identifier rubyid_file_logger'>file_logger</span><span class='rparen'>)</span>
285
-
286
- <span class='id identifier rubyid_messenger'>messenger</span><span class='period'>.</span><span class='id identifier rubyid_section'>section</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>This section message should appear only in STDOUT</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span></code></pre>
287
-
288
- <p>In STDOUT:</p>
289
-
290
- <p><img
291
- src="https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/multi-logger.png"></p>
292
-
293
- <p>…and in <code>file.txt</code>:</p>
294
-
295
- <pre class="code ruby"><code class="ruby">W, [2014-03-29T15:14:34.844406 #4497] WARN -- : This warning should appear in STDOUT and file.txt
296
- E, [2014-03-29T15:14:34.844553 #4497] ERROR -- : This error should appear in STDOUT and file.txt
297
- D, [2014-03-29T15:14:34.844609 #4497] DEBUG -- : This debug message should only appear in file.txt</code></pre>
298
-
299
- <p>Since you can attach Logger objects, each can have it&#39;s own format and
300
- severity level. Cool!</p>
301
-
302
- <h2 id="label-Configuration">Configuration</h2>
303
-
304
- <p>CLIUtils offers two “things” – a <code>Configurator</code> class and a
305
- <code>Configuration</code> module that provides access to a shared instance
306
- of <code>Configurator</code> – that make managing a user&#39;s
307
- configuration parameters easy. Mix it in!</p>
308
-
309
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_include'>include</span> <span class='const'>CLIUtils</span><span class='op'>::</span><span class='const'>Configuration</span></code></pre>
310
-
311
- <h3 id="label-Loading+a+Configuration+File">Loading a Configuration File</h3>
312
-
313
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_load_configuration'>load_configuration</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>~/.my-app-config</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span></code></pre>
314
-
315
- <p>If there&#39;s data in there, it will be consumed into
316
- <code>configuration</code>&#39;s <code>data</code> property.</p>
317
-
318
- <h3 id="label-Adding%2FRemoving+Sections">Adding/Removing Sections</h3>
319
-
320
- <p>Sections are top levels of the configuration file and are managed via the
321
- <code>configuration</code> object:</p>
322
-
323
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_configuration'>configuration</span><span class='period'>.</span><span class='id identifier rubyid_add_section'>add_section</span><span class='lparen'>(</span><span class='symbol'>:user_data</span><span class='rparen'>)</span>
324
- <span class='id identifier rubyid_configuration'>configuration</span><span class='period'>.</span><span class='id identifier rubyid_add_section'>add_section</span><span class='lparen'>(</span><span class='symbol'>:program_data</span><span class='rparen'>)</span>
325
- <span class='id identifier rubyid_configuration'>configuration</span><span class='period'>.</span><span class='id identifier rubyid_delete_section'>delete_section</span><span class='lparen'>(</span><span class='symbol'>:program_data</span><span class='rparen'>)</span></code></pre>
326
-
327
- <h3 id="label-Adding+Data+to+Sections">Adding Data to Sections</h3>
328
-
329
- <p>There are two ways data can be managed in <code>configuration</code>: via
330
- its <code>@data</code> property or via some magic methods; your call:</p>
331
-
332
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_configuration'>configuration</span><span class='period'>.</span><span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='symbol'>:user_data</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span><span class='lparen'>(</span><span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bob</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
333
- <span class='comment'># OR
334
- </span><span class='id identifier rubyid_configuration'>configuration</span><span class='period'>.</span><span class='id identifier rubyid_user_data'>user_data</span><span class='period'>.</span><span class='id identifier rubyid_merge!'>merge!</span><span class='lparen'>(</span><span class='label'>username:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>bob</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span></code></pre>
335
-
336
- <h3 id="label-Saving+to+a+File">Saving to a File</h3>
337
-
338
- <p>When you&#39;re ready to save your configuration data to a YAML file:</p>
339
-
340
- <pre class="code ruby"><code class="ruby"><span class='id identifier rubyid_configuration'>configuration</span><span class='period'>.</span><span class='id identifier rubyid_save'>save</span></code></pre>
341
-
342
- <p>Note that all your keys are converted to strings before saving (and,
343
- likewise, are converted to symbols, when loading). Assuming we used the
344
- commands above, we could expect this to be the contents of
345
- <code>~/.my-app-config</code>:</p>
346
-
347
- <pre class="code ruby"><code class="ruby">---
348
- user_data:
349
- username: bob</code></pre>
350
-
351
- <h1 id="label-Known+Issues">Known Issues</h1>
352
- <ul><li>
353
- <p>LoggerDelegator doesn&#39;t currently know what to do with
354
- <code>messenger.prompt</code>, so you&#39;ll have to manually log a
355
- <code>debug</code> message if you want that information logged.</p>
356
- </li></ul>
357
-
358
- <h1 id="label-Bugs+and+Feature+Requests">Bugs and Feature Requests</h1>
359
-
360
- <p>To report bugs with or suggest features/changes for CLIUtils, please use
361
- the <a href="http://github.com/bachya/cli-utils/issues">Issues Page</a>.</p>
362
-
363
- <h1 id="label-Contributing">Contributing</h1>
364
-
365
- <p>Contributions are welcome and encouraged. To contribute:</p>
366
- <ol><li>
367
- <p>Fork it ( <a
368
- href="http://github.com/bachya/cliutils/fork">github.com/bachya/cliutils/fork</a>
369
- )</p>
370
- </li><li>
371
- <p>Create your feature branch (<code>git checkout -b my-new-feature</code>)</p>
372
- </li><li>
373
- <p>Commit your changes (<code>git commit -am &#39;Add some
374
- feature&#39;</code>)</p>
375
- </li><li>
376
- <p>Push to the branch (<code>git push origin my-new-feature</code>)</p>
377
- </li><li>
378
- <p>Create new Pull Request</p>
379
- </li></ol>
380
-
381
- <h1 id="label-License">License</h1>
382
-
383
- <p>(The MIT License)</p>
384
-
385
- <p>Copyright © 2014 Aaron Bach <a
386
- href="mailto:bachya1208@gmail.com">bachya1208@gmail.com</a></p>
387
-
388
- <p>Permission is hereby granted, free of charge, to any person obtaining a
389
- copy of this software and associated documentation files (the
390
- &#39;Software&#39;), to deal in the Software without restriction, including
391
- without limitation the rights to use, copy, modify, merge, publish,
392
- distribute, sublicense, and/or sell copies of the Software, and to permit
393
- persons to whom the Software is furnished to do so, subject to the
394
- following conditions:</p>
395
-
396
- <p>The above copyright notice and this permission notice shall be included in
397
- all copies or substantial portions of the Software.</p>
398
-
399
- <p>THE SOFTWARE IS PROVIDED &#39;AS IS&#39;, WITHOUT WARRANTY OF ANY KIND,
400
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
401
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
402
- NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
403
- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
404
- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
405
- USE OR OTHER DEALINGS IN THE SOFTWARE.</p>
406
- </div></div>
407
-
408
- <div id="footer">
409
- Generated on Sat Mar 29 17:22:02 2014 by
410
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
411
- 0.8.7.4 (ruby-2.1.0).
412
- </div>
413
-
414
- </body>
415
- </html>
data/doc/js/app.js DELETED
@@ -1,219 +0,0 @@
1
- function createSourceLinks() {
2
- $('.method_details_list .source_code').
3
- before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
4
- $('.toggleSource').toggle(function() {
5
- $(this).parent().nextAll('.source_code').slideDown(100);
6
- $(this).text("Hide source");
7
- },
8
- function() {
9
- $(this).parent().nextAll('.source_code').slideUp(100);
10
- $(this).text("View source");
11
- });
12
- }
13
-
14
- function createDefineLinks() {
15
- var tHeight = 0;
16
- $('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
17
- $('.toggleDefines').toggle(function() {
18
- tHeight = $(this).parent().prev().height();
19
- $(this).prev().show();
20
- $(this).parent().prev().height($(this).parent().height());
21
- $(this).text("(less)");
22
- },
23
- function() {
24
- $(this).prev().hide();
25
- $(this).parent().prev().height(tHeight);
26
- $(this).text("more...");
27
- });
28
- }
29
-
30
- function createFullTreeLinks() {
31
- var tHeight = 0;
32
- $('.inheritanceTree').toggle(function() {
33
- tHeight = $(this).parent().prev().height();
34
- $(this).parent().toggleClass('showAll');
35
- $(this).text("(hide)");
36
- $(this).parent().prev().height($(this).parent().height());
37
- },
38
- function() {
39
- $(this).parent().toggleClass('showAll');
40
- $(this).parent().prev().height(tHeight);
41
- $(this).text("show all");
42
- });
43
- }
44
-
45
- function fixBoxInfoHeights() {
46
- $('dl.box dd.r1, dl.box dd.r2').each(function() {
47
- $(this).prev().height($(this).height());
48
- });
49
- }
50
-
51
- function searchFrameLinks() {
52
- $('.full_list_link').click(function() {
53
- toggleSearchFrame(this, $(this).attr('href'));
54
- return false;
55
- });
56
- }
57
-
58
- function toggleSearchFrame(id, link) {
59
- var frame = $('#search_frame');
60
- $('#search a').removeClass('active').addClass('inactive');
61
- if (frame.attr('src') == link && frame.css('display') != "none") {
62
- frame.slideUp(100);
63
- $('#search a').removeClass('active inactive');
64
- }
65
- else {
66
- $(id).addClass('active').removeClass('inactive');
67
- frame.attr('src', link).slideDown(100);
68
- }
69
- }
70
-
71
- function linkSummaries() {
72
- $('.summary_signature').click(function() {
73
- document.location = $(this).find('a').attr('href');
74
- });
75
- }
76
-
77
- function framesInit() {
78
- if (hasFrames) {
79
- document.body.className = 'frames';
80
- $('#menu .noframes a').attr('href', document.location);
81
- try {
82
- window.top.document.title = $('html head title').text();
83
- } catch(error) {
84
- // some browsers will not allow this when serving from file://
85
- // but we don't want to stop the world.
86
- }
87
- }
88
- else {
89
- $('#menu .noframes a').text('frames').attr('href', framesUrl);
90
- }
91
- }
92
-
93
- function keyboardShortcuts() {
94
- if (window.top.frames.main) return;
95
- $(document).keypress(function(evt) {
96
- if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
97
- if (typeof evt.target !== "undefined" &&
98
- (evt.target.nodeName == "INPUT" ||
99
- evt.target.nodeName == "TEXTAREA")) return;
100
- switch (evt.charCode) {
101
- case 67: case 99: $('#class_list_link').click(); break; // 'c'
102
- case 77: case 109: $('#method_list_link').click(); break; // 'm'
103
- case 70: case 102: $('#file_list_link').click(); break; // 'f'
104
- default: break;
105
- }
106
- });
107
- }
108
-
109
- function summaryToggle() {
110
- $('.summary_toggle').click(function() {
111
- if (localStorage) {
112
- localStorage.summaryCollapsed = $(this).text();
113
- }
114
- $('.summary_toggle').each(function() {
115
- $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
116
- var next = $(this).parent().parent().nextAll('ul.summary').first();
117
- if (next.hasClass('compact')) {
118
- next.toggle();
119
- next.nextAll('ul.summary').first().toggle();
120
- }
121
- else if (next.hasClass('summary')) {
122
- var list = $('<ul class="summary compact" />');
123
- list.html(next.html());
124
- list.find('.summary_desc, .note').remove();
125
- list.find('a').each(function() {
126
- $(this).html($(this).find('strong').html());
127
- $(this).parent().html($(this)[0].outerHTML);
128
- });
129
- next.before(list);
130
- next.toggle();
131
- }
132
- });
133
- return false;
134
- });
135
- if (localStorage) {
136
- if (localStorage.summaryCollapsed == "collapse") {
137
- $('.summary_toggle').first().click();
138
- }
139
- else localStorage.summaryCollapsed = "expand";
140
- }
141
- }
142
-
143
- function fixOutsideWorldLinks() {
144
- $('a').each(function() {
145
- if (window.location.host != this.host) this.target = '_parent';
146
- });
147
- }
148
-
149
- function generateTOC() {
150
- if ($('#filecontents').length === 0) return;
151
- var _toc = $('<ol class="top"></ol>');
152
- var show = false;
153
- var toc = _toc;
154
- var counter = 0;
155
- var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
156
- var i;
157
- if ($('#filecontents h1').length > 1) tags.unshift('h1');
158
- for (i = 0; i < tags.length; i++) { tags[i] = '#filecontents ' + tags[i]; }
159
- var lastTag = parseInt(tags[0][1], 10);
160
- $(tags.join(', ')).each(function() {
161
- if ($(this).parents('.method_details .docstring').length != 0) return;
162
- if (this.id == "filecontents") return;
163
- show = true;
164
- var thisTag = parseInt(this.tagName[1], 10);
165
- if (this.id.length === 0) {
166
- var proposedId = $(this).attr('toc-id');
167
- if (typeof(proposedId) != "undefined") this.id = proposedId;
168
- else {
169
- var proposedId = $(this).text().replace(/[^a-z0-9-]/ig, '_');
170
- if ($('#' + proposedId).length > 0) { proposedId += counter; counter++; }
171
- this.id = proposedId;
172
- }
173
- }
174
- if (thisTag > lastTag) {
175
- for (i = 0; i < thisTag - lastTag; i++) {
176
- var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
177
- }
178
- }
179
- if (thisTag < lastTag) {
180
- for (i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
181
- }
182
- var title = $(this).attr('toc-title');
183
- if (typeof(title) == "undefined") title = $(this).text();
184
- toc.append('<li><a href="#' + this.id + '">' + title + '</a></li>');
185
- lastTag = thisTag;
186
- });
187
- if (!show) return;
188
- html = '<div id="toc"><p class="title"><a class="hide_toc" href="#"><strong>Table of Contents</strong></a> <small>(<a href="#" class="float_toc">left</a>)</small></p></div>';
189
- $('#content').prepend(html);
190
- $('#toc').append(_toc);
191
- $('#toc .hide_toc').toggle(function() {
192
- $('#toc .top').slideUp('fast');
193
- $('#toc').toggleClass('hidden');
194
- $('#toc .title small').toggle();
195
- }, function() {
196
- $('#toc .top').slideDown('fast');
197
- $('#toc').toggleClass('hidden');
198
- $('#toc .title small').toggle();
199
- });
200
- $('#toc .float_toc').toggle(function() {
201
- $(this).text('float');
202
- $('#toc').toggleClass('nofloat');
203
- }, function() {
204
- $(this).text('left');
205
- $('#toc').toggleClass('nofloat');
206
- });
207
- }
208
-
209
- $(framesInit);
210
- $(createSourceLinks);
211
- $(createDefineLinks);
212
- $(createFullTreeLinks);
213
- $(fixBoxInfoHeights);
214
- $(searchFrameLinks);
215
- $(linkSummaries);
216
- $(keyboardShortcuts);
217
- $(summaryToggle);
218
- $(fixOutsideWorldLinks);
219
- $(generateTOC);