rbcli 0.1.10 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -0
- data/CODE_OF_CONDUCT.md +1 -1
- data/Gemfile.lock +12 -12
- data/LICENSE.txt +674 -21
- data/README.md +80 -443
- data/bin/console +19 -0
- data/bin/setup +20 -0
- data/docs/404.html +639 -0
- data/docs/advanced/automatic_updates/index.html +791 -0
- data/docs/advanced/command_types/index.html +946 -0
- data/docs/advanced/distributed_state_locking/index.html +777 -0
- data/docs/advanced/hooks/index.html +836 -0
- data/docs/advanced/state_storage/index.html +957 -0
- data/docs/advanced/user_config_files/index.html +818 -0
- data/docs/assets/fonts/font-awesome.css +4 -0
- data/docs/assets/fonts/material-icons.css +13 -0
- data/docs/assets/fonts/specimen/FontAwesome.ttf +0 -0
- data/docs/assets/fonts/specimen/FontAwesome.woff +0 -0
- data/docs/assets/fonts/specimen/FontAwesome.woff2 +0 -0
- data/docs/assets/fonts/specimen/MaterialIcons-Regular.ttf +0 -0
- data/docs/assets/fonts/specimen/MaterialIcons-Regular.woff +0 -0
- data/docs/assets/fonts/specimen/MaterialIcons-Regular.woff2 +0 -0
- data/docs/assets/images/favicon.png +0 -0
- data/docs/assets/images/icons/bitbucket.1b09e088.svg +20 -0
- data/docs/assets/images/icons/github.f0b8504a.svg +18 -0
- data/docs/assets/images/icons/gitlab.6dd19c00.svg +38 -0
- data/docs/assets/javascripts/application.a59e2a89.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.da.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.de.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.du.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.es.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.fi.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.fr.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.hu.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.it.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.jp.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.multi.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.no.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.pt.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.ro.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.ru.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.stemmer.support.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.sv.js +1 -0
- data/docs/assets/javascripts/lunr/lunr.tr.js +1 -0
- data/docs/assets/javascripts/lunr/tinyseg.js +1 -0
- data/docs/assets/javascripts/modernizr.1aa3b519.js +1 -0
- data/docs/assets/stylesheets/application-palette.6079476c.css +2 -0
- data/docs/assets/stylesheets/application.ba0fd1a6.css +2 -0
- data/docs/development/code_of_conduct/index.html +883 -0
- data/docs/development/contributing/index.html +744 -0
- data/docs/development/license/index.html +715 -0
- data/docs/imported/changelog/index.html +853 -0
- data/docs/imported/quick_reference/index.html +1057 -0
- data/docs/index.html +732 -0
- data/docs/search/search_index.json +569 -0
- data/docs/sitemap.xml +93 -0
- data/docs/tutorial/10-getting_started/index.html +806 -0
- data/docs/tutorial/20-project_layout/index.html +972 -0
- data/docs/tutorial/30-your_first_command/index.html +906 -0
- data/docs/tutorial/40-options_parameters_and_arguments/index.html +1049 -0
- data/docs/tutorial/50-publishing/index.html +838 -0
- data/docs/whoami/index.html +709 -0
- data/docs-src/docs/advanced/automatic_updates.md +42 -0
- data/docs-src/docs/advanced/command_types.md +144 -0
- data/docs-src/docs/advanced/distributed_state_locking.md +33 -0
- data/docs-src/docs/advanced/hooks.md +65 -0
- data/docs-src/docs/advanced/logging.md +35 -0
- data/docs-src/docs/advanced/state_storage.md +117 -0
- data/docs-src/docs/advanced/user_config_files.md +47 -0
- data/docs-src/docs/development/code_of_conduct.md +74 -0
- data/docs-src/docs/development/contributing.md +49 -0
- data/docs-src/docs/development/license.md +10 -0
- data/docs-src/docs/imported/changelog.md +31 -0
- data/docs-src/docs/imported/quick_reference.md +150 -0
- data/docs-src/docs/index.md +38 -0
- data/docs-src/docs/tutorial/10-getting_started.md +41 -0
- data/docs-src/docs/tutorial/20-project_layout.md +115 -0
- data/docs-src/docs/tutorial/30-your_first_command.md +126 -0
- data/docs-src/docs/tutorial/40-options_parameters_and_arguments.md +251 -0
- data/docs-src/docs/tutorial/50-publishing.md +47 -0
- data/docs-src/docs/whoami.md +28 -0
- data/docs-src/makesite.sh +14 -0
- data/docs-src/mkdocs.yml +76 -0
- data/docs-src/runsite.sh +3 -0
- data/exe/rbcli +76 -5
- data/lib/rbcli/autoupdate/autoupdate.rb +24 -4
- data/lib/rbcli/autoupdate/gem_updater.rb +23 -2
- data/lib/rbcli/autoupdate/github_updater.rb +22 -1
- data/lib/rbcli/configuration/config.rb +22 -1
- data/lib/rbcli/configuration/configurate.rb +24 -2
- data/lib/rbcli/engine/command.rb +26 -6
- data/lib/rbcli/engine/load_project.rb +29 -3
- data/lib/rbcli/engine/parser.rb +25 -4
- data/lib/rbcli/logging/logging.rb +21 -0
- data/lib/rbcli/scriptwrapping/scriptwrapper.rb +30 -11
- data/lib/rbcli/stateful_systems/configuratestorage.rb +20 -0
- data/lib/rbcli/stateful_systems/state_storage.rb +20 -0
- data/lib/rbcli/stateful_systems/storagetypes/localstate.rb +20 -0
- data/lib/rbcli/stateful_systems/storagetypes/remote_state_connectors/dynamodb.rb +20 -0
- data/lib/rbcli/stateful_systems/storagetypes/remotestate_dynamodb.rb +20 -0
- data/lib/rbcli/util/hash_deep_symbolize.rb +43 -22
- data/lib/rbcli/util/string_colorize.rb +20 -0
- data/lib/rbcli/version.rb +21 -1
- data/lib/rbcli-tool/generators.rb +20 -0
- data/lib/rbcli-tool/mdless_fix.rb +20 -0
- data/lib/rbcli-tool/project.rb +27 -2
- data/lib/rbcli-tool/util.rb +20 -0
- data/lib/rbcli-tool.rb +20 -0
- data/lib/rbcli.rb +20 -0
- data/lib-sh/lib-rbcli.sh +19 -0
- data/rbcli.gemspec +22 -3
- data/skeletons/project/CODE_OF_CONDUCT.md +1 -1
- data/skeletons/project/README.md +17 -2
- data/skeletons/project/application/commands/command.erb +10 -8
- data/skeletons/project/application/commands/script.erb +3 -1
- data/skeletons/project/application/commands/scripts/script.sh +2 -2
- data/skeletons/project/application/options.rb +12 -3
- data/skeletons/project/config/autoupdate.rb +5 -2
- data/skeletons/project/config/storage.rb +7 -6
- data/skeletons/project/config/userspace.rb +6 -1
- data/skeletons/project/exe/executable +1 -1
- data/skeletons/project/lib/.keep +0 -0
- data/skeletons/project/untitled.gemspec +4 -4
- data/skeletons/project/{default_user_configs → userconf}/user_defaults.yml +0 -0
- metadata +85 -9
- data/examples/defaults.yml +0 -4
- data/examples/myscript.sh +0 -23
- data/examples/mytool +0 -95
@@ -0,0 +1,818 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
<!DOCTYPE html>
|
6
|
+
<html lang="en" class="no-js">
|
7
|
+
<head>
|
8
|
+
|
9
|
+
<meta charset="utf-8">
|
10
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
11
|
+
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
12
|
+
|
13
|
+
<meta name="description" content="Description">
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
<meta name="author" content="Andrew Khoury">
|
18
|
+
|
19
|
+
|
20
|
+
<meta name="lang:clipboard.copy" content="Copy to clipboard">
|
21
|
+
|
22
|
+
<meta name="lang:clipboard.copied" content="Copied to clipboard">
|
23
|
+
|
24
|
+
<meta name="lang:search.language" content="en">
|
25
|
+
|
26
|
+
<meta name="lang:search.pipeline.stopwords" content="True">
|
27
|
+
|
28
|
+
<meta name="lang:search.pipeline.trimmer" content="True">
|
29
|
+
|
30
|
+
<meta name="lang:search.result.none" content="No matching documents">
|
31
|
+
|
32
|
+
<meta name="lang:search.result.one" content="1 matching document">
|
33
|
+
|
34
|
+
<meta name="lang:search.result.other" content="# matching documents">
|
35
|
+
|
36
|
+
<meta name="lang:search.tokenizer" content="[\s\-]+">
|
37
|
+
|
38
|
+
<link rel="shortcut icon" href="../../assets/images/favicon.png">
|
39
|
+
<meta name="generator" content="mkdocs-0.17.5, mkdocs-material-2.9.2">
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
<title>User Config Files - RBCli Documentation</title>
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
<link rel="stylesheet" href="../../assets/stylesheets/application.ba0fd1a6.css">
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
<script src="../../assets/javascripts/modernizr.1aa3b519.js"></script>
|
53
|
+
|
54
|
+
|
55
|
+
<link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
|
56
|
+
|
57
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
|
58
|
+
<style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
|
59
|
+
|
60
|
+
|
61
|
+
<link rel="stylesheet" href="../../assets/fonts/material-icons.css">
|
62
|
+
|
63
|
+
|
64
|
+
</head>
|
65
|
+
|
66
|
+
<body dir="ltr">
|
67
|
+
|
68
|
+
<svg class="md-svg">
|
69
|
+
<defs>
|
70
|
+
|
71
|
+
|
72
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
|
73
|
+
viewBox="0 0 416 448" id="__github">
|
74
|
+
<path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
|
75
|
+
8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
|
76
|
+
18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
|
77
|
+
19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
|
78
|
+
18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
|
79
|
+
304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
|
80
|
+
2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
|
81
|
+
38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
|
82
|
+
37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
|
83
|
+
82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
|
84
|
+
1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
|
85
|
+
0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
|
86
|
+
30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
|
87
|
+
46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
|
88
|
+
99.5z" />
|
89
|
+
</svg>
|
90
|
+
|
91
|
+
</defs>
|
92
|
+
</svg>
|
93
|
+
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
|
94
|
+
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
|
95
|
+
<label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
|
96
|
+
|
97
|
+
<a href="#configuration-files" tabindex="1" class="md-skip">
|
98
|
+
Skip to content
|
99
|
+
</a>
|
100
|
+
|
101
|
+
|
102
|
+
<header class="md-header" data-md-component="header">
|
103
|
+
<nav class="md-header-nav md-grid">
|
104
|
+
<div class="md-flex">
|
105
|
+
<div class="md-flex__cell md-flex__cell--shrink">
|
106
|
+
<a href="../.." title="RBCli Documentation" class="md-header-nav__button md-logo">
|
107
|
+
|
108
|
+
<i class="md-icon">devices</i>
|
109
|
+
|
110
|
+
</a>
|
111
|
+
</div>
|
112
|
+
<div class="md-flex__cell md-flex__cell--shrink">
|
113
|
+
<label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
|
114
|
+
</div>
|
115
|
+
<div class="md-flex__cell md-flex__cell--stretch">
|
116
|
+
<div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
|
117
|
+
|
118
|
+
|
119
|
+
<span class="md-header-nav__topic">
|
120
|
+
RBCli Documentation
|
121
|
+
</span>
|
122
|
+
<span class="md-header-nav__topic">
|
123
|
+
User Config Files
|
124
|
+
</span>
|
125
|
+
|
126
|
+
|
127
|
+
</div>
|
128
|
+
</div>
|
129
|
+
<div class="md-flex__cell md-flex__cell--shrink">
|
130
|
+
|
131
|
+
|
132
|
+
<label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
|
133
|
+
|
134
|
+
<div class="md-search" data-md-component="search" role="dialog">
|
135
|
+
<label class="md-search__overlay" for="__search"></label>
|
136
|
+
<div class="md-search__inner" role="search">
|
137
|
+
<form class="md-search__form" name="search">
|
138
|
+
<input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
|
139
|
+
<label class="md-icon md-search__icon" for="__search"></label>
|
140
|
+
<button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
|
141
|
+

|
142
|
+
</button>
|
143
|
+
</form>
|
144
|
+
<div class="md-search__output">
|
145
|
+
<div class="md-search__scrollwrap" data-md-scrollfix>
|
146
|
+
<div class="md-search-result" data-md-component="result">
|
147
|
+
<div class="md-search-result__meta">
|
148
|
+
Type to start searching
|
149
|
+
</div>
|
150
|
+
<ol class="md-search-result__list"></ol>
|
151
|
+
</div>
|
152
|
+
</div>
|
153
|
+
</div>
|
154
|
+
</div>
|
155
|
+
</div>
|
156
|
+
|
157
|
+
|
158
|
+
</div>
|
159
|
+
|
160
|
+
<div class="md-flex__cell md-flex__cell--shrink">
|
161
|
+
<div class="md-header-nav__source">
|
162
|
+
|
163
|
+
|
164
|
+
|
165
|
+
|
166
|
+
|
167
|
+
|
168
|
+
<a href="https://github.com/akhoury6/rbcli/" title="Go to repository" class="md-source" data-md-source="github">
|
169
|
+
|
170
|
+
<div class="md-source__icon">
|
171
|
+
<svg viewBox="0 0 24 24" width="24" height="24">
|
172
|
+
<use xlink:href="#__github" width="24" height="24"></use>
|
173
|
+
</svg>
|
174
|
+
</div>
|
175
|
+
|
176
|
+
<div class="md-source__repository">
|
177
|
+
GitHub
|
178
|
+
</div>
|
179
|
+
</a>
|
180
|
+
|
181
|
+
</div>
|
182
|
+
</div>
|
183
|
+
|
184
|
+
</div>
|
185
|
+
</nav>
|
186
|
+
</header>
|
187
|
+
|
188
|
+
<div class="md-container">
|
189
|
+
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
<nav class="md-tabs md-tabs--active" data-md-component="tabs">
|
198
|
+
<div class="md-tabs__inner md-grid">
|
199
|
+
<ul class="md-tabs__list">
|
200
|
+
|
201
|
+
|
202
|
+
<li class="md-tabs__item">
|
203
|
+
|
204
|
+
<a href="../.." title="Home" class="md-tabs__link">
|
205
|
+
Home
|
206
|
+
</a>
|
207
|
+
|
208
|
+
</li>
|
209
|
+
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
|
214
|
+
|
215
|
+
|
216
|
+
<li class="md-tabs__item">
|
217
|
+
|
218
|
+
<a href="../../tutorial/10-getting_started/" title="Tutorial" class="md-tabs__link">
|
219
|
+
Tutorial
|
220
|
+
</a>
|
221
|
+
|
222
|
+
</li>
|
223
|
+
|
224
|
+
|
225
|
+
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
<li class="md-tabs__item">
|
230
|
+
|
231
|
+
<a href="../command_types/" title="Advanced Features" class="md-tabs__link md-tabs__link--active">
|
232
|
+
Advanced Features
|
233
|
+
</a>
|
234
|
+
|
235
|
+
</li>
|
236
|
+
|
237
|
+
|
238
|
+
|
239
|
+
|
240
|
+
|
241
|
+
|
242
|
+
<li class="md-tabs__item">
|
243
|
+
|
244
|
+
<a href="../../development/contributing/" title="Development" class="md-tabs__link">
|
245
|
+
Development
|
246
|
+
</a>
|
247
|
+
|
248
|
+
</li>
|
249
|
+
|
250
|
+
|
251
|
+
|
252
|
+
|
253
|
+
|
254
|
+
</ul>
|
255
|
+
</div>
|
256
|
+
</nav>
|
257
|
+
|
258
|
+
<main class="md-main">
|
259
|
+
<div class="md-main__inner md-grid" data-md-component="container">
|
260
|
+
|
261
|
+
|
262
|
+
<div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
|
263
|
+
<div class="md-sidebar__scrollwrap">
|
264
|
+
<div class="md-sidebar__inner">
|
265
|
+
<nav class="md-nav md-nav--primary" data-md-level="0">
|
266
|
+
<label class="md-nav__title md-nav__title--site" for="__drawer">
|
267
|
+
<span class="md-nav__button md-logo">
|
268
|
+
|
269
|
+
<i class="md-icon">devices</i>
|
270
|
+
|
271
|
+
</span>
|
272
|
+
RBCli Documentation
|
273
|
+
</label>
|
274
|
+
|
275
|
+
<div class="md-nav__source">
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
|
280
|
+
|
281
|
+
|
282
|
+
<a href="https://github.com/akhoury6/rbcli/" title="Go to repository" class="md-source" data-md-source="github">
|
283
|
+
|
284
|
+
<div class="md-source__icon">
|
285
|
+
<svg viewBox="0 0 24 24" width="24" height="24">
|
286
|
+
<use xlink:href="#__github" width="24" height="24"></use>
|
287
|
+
</svg>
|
288
|
+
</div>
|
289
|
+
|
290
|
+
<div class="md-source__repository">
|
291
|
+
GitHub
|
292
|
+
</div>
|
293
|
+
</a>
|
294
|
+
|
295
|
+
</div>
|
296
|
+
|
297
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
298
|
+
|
299
|
+
|
300
|
+
|
301
|
+
|
302
|
+
|
303
|
+
|
304
|
+
<li class="md-nav__item">
|
305
|
+
<a href="../.." title="Home" class="md-nav__link">
|
306
|
+
Home
|
307
|
+
</a>
|
308
|
+
</li>
|
309
|
+
|
310
|
+
|
311
|
+
|
312
|
+
|
313
|
+
|
314
|
+
|
315
|
+
|
316
|
+
<li class="md-nav__item">
|
317
|
+
<a href="../../imported/quick_reference/" title="Quick Reference" class="md-nav__link">
|
318
|
+
Quick Reference
|
319
|
+
</a>
|
320
|
+
</li>
|
321
|
+
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
|
326
|
+
|
327
|
+
|
328
|
+
<li class="md-nav__item md-nav__item--nested">
|
329
|
+
|
330
|
+
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
|
331
|
+
|
332
|
+
<label class="md-nav__link" for="nav-3">
|
333
|
+
Tutorial
|
334
|
+
</label>
|
335
|
+
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
|
336
|
+
<label class="md-nav__title" for="nav-3">
|
337
|
+
Tutorial
|
338
|
+
</label>
|
339
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
340
|
+
|
341
|
+
|
342
|
+
|
343
|
+
|
344
|
+
|
345
|
+
|
346
|
+
|
347
|
+
<li class="md-nav__item">
|
348
|
+
<a href="../../tutorial/10-getting_started/" title="Getting Started" class="md-nav__link">
|
349
|
+
Getting Started
|
350
|
+
</a>
|
351
|
+
</li>
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
|
356
|
+
|
357
|
+
|
358
|
+
|
359
|
+
<li class="md-nav__item">
|
360
|
+
<a href="../../tutorial/20-project_layout/" title="The Project Layout" class="md-nav__link">
|
361
|
+
The Project Layout
|
362
|
+
</a>
|
363
|
+
</li>
|
364
|
+
|
365
|
+
|
366
|
+
|
367
|
+
|
368
|
+
|
369
|
+
|
370
|
+
|
371
|
+
<li class="md-nav__item">
|
372
|
+
<a href="../../tutorial/30-your_first_command/" title="Your First Command" class="md-nav__link">
|
373
|
+
Your First Command
|
374
|
+
</a>
|
375
|
+
</li>
|
376
|
+
|
377
|
+
|
378
|
+
|
379
|
+
|
380
|
+
|
381
|
+
|
382
|
+
|
383
|
+
<li class="md-nav__item">
|
384
|
+
<a href="../../tutorial/40-options_parameters_and_arguments/" title="Options, Parameters, and Arguments" class="md-nav__link">
|
385
|
+
Options, Parameters, and Arguments
|
386
|
+
</a>
|
387
|
+
</li>
|
388
|
+
|
389
|
+
|
390
|
+
|
391
|
+
|
392
|
+
|
393
|
+
|
394
|
+
|
395
|
+
<li class="md-nav__item">
|
396
|
+
<a href="../../tutorial/50-publishing/" title="Publishing and Distribution" class="md-nav__link">
|
397
|
+
Publishing and Distribution
|
398
|
+
</a>
|
399
|
+
</li>
|
400
|
+
|
401
|
+
|
402
|
+
</ul>
|
403
|
+
</nav>
|
404
|
+
</li>
|
405
|
+
|
406
|
+
|
407
|
+
|
408
|
+
|
409
|
+
|
410
|
+
|
411
|
+
|
412
|
+
|
413
|
+
|
414
|
+
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
|
415
|
+
|
416
|
+
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4" checked>
|
417
|
+
|
418
|
+
<label class="md-nav__link" for="nav-4">
|
419
|
+
Advanced Features
|
420
|
+
</label>
|
421
|
+
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
|
422
|
+
<label class="md-nav__title" for="nav-4">
|
423
|
+
Advanced Features
|
424
|
+
</label>
|
425
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
426
|
+
|
427
|
+
|
428
|
+
|
429
|
+
|
430
|
+
|
431
|
+
|
432
|
+
|
433
|
+
<li class="md-nav__item">
|
434
|
+
<a href="../command_types/" title="Command Types" class="md-nav__link">
|
435
|
+
Command Types
|
436
|
+
</a>
|
437
|
+
</li>
|
438
|
+
|
439
|
+
|
440
|
+
|
441
|
+
|
442
|
+
|
443
|
+
|
444
|
+
|
445
|
+
|
446
|
+
|
447
|
+
<li class="md-nav__item md-nav__item--active">
|
448
|
+
|
449
|
+
<input class="md-toggle md-nav__toggle" data-md-toggle="toc" type="checkbox" id="__toc">
|
450
|
+
|
451
|
+
|
452
|
+
|
453
|
+
|
454
|
+
<label class="md-nav__link md-nav__link--active" for="__toc">
|
455
|
+
User Config Files
|
456
|
+
</label>
|
457
|
+
|
458
|
+
<a href="./" title="User Config Files" class="md-nav__link md-nav__link--active">
|
459
|
+
User Config Files
|
460
|
+
</a>
|
461
|
+
|
462
|
+
|
463
|
+
<nav class="md-nav md-nav--secondary">
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
|
468
|
+
|
469
|
+
<label class="md-nav__title" for="__toc">Table of contents</label>
|
470
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
471
|
+
|
472
|
+
<li class="md-nav__item">
|
473
|
+
<a href="#defaults-chain" title="Defaults chain" class="md-nav__link">
|
474
|
+
Defaults chain
|
475
|
+
</a>
|
476
|
+
|
477
|
+
</li>
|
478
|
+
|
479
|
+
<li class="md-nav__item">
|
480
|
+
<a href="#user-chain" title="User chain" class="md-nav__link">
|
481
|
+
User chain
|
482
|
+
</a>
|
483
|
+
|
484
|
+
</li>
|
485
|
+
|
486
|
+
|
487
|
+
|
488
|
+
|
489
|
+
|
490
|
+
</ul>
|
491
|
+
|
492
|
+
</nav>
|
493
|
+
|
494
|
+
</li>
|
495
|
+
|
496
|
+
|
497
|
+
|
498
|
+
|
499
|
+
|
500
|
+
|
501
|
+
|
502
|
+
<li class="md-nav__item">
|
503
|
+
<a href="../hooks/" title="Hooks" class="md-nav__link">
|
504
|
+
Hooks
|
505
|
+
</a>
|
506
|
+
</li>
|
507
|
+
|
508
|
+
|
509
|
+
|
510
|
+
|
511
|
+
|
512
|
+
|
513
|
+
|
514
|
+
<li class="md-nav__item">
|
515
|
+
<a href="../automatic_updates/" title="Automatic Updates" class="md-nav__link">
|
516
|
+
Automatic Updates
|
517
|
+
</a>
|
518
|
+
</li>
|
519
|
+
|
520
|
+
|
521
|
+
|
522
|
+
|
523
|
+
|
524
|
+
|
525
|
+
|
526
|
+
<li class="md-nav__item">
|
527
|
+
<a href="../state_storage/" title="State Storage" class="md-nav__link">
|
528
|
+
State Storage
|
529
|
+
</a>
|
530
|
+
</li>
|
531
|
+
|
532
|
+
|
533
|
+
|
534
|
+
|
535
|
+
|
536
|
+
|
537
|
+
|
538
|
+
<li class="md-nav__item">
|
539
|
+
<a href="../distributed_state_locking/" title="Distributed State Locking" class="md-nav__link">
|
540
|
+
Distributed State Locking
|
541
|
+
</a>
|
542
|
+
</li>
|
543
|
+
|
544
|
+
|
545
|
+
</ul>
|
546
|
+
</nav>
|
547
|
+
</li>
|
548
|
+
|
549
|
+
|
550
|
+
|
551
|
+
|
552
|
+
|
553
|
+
|
554
|
+
|
555
|
+
<li class="md-nav__item md-nav__item--nested">
|
556
|
+
|
557
|
+
<input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
|
558
|
+
|
559
|
+
<label class="md-nav__link" for="nav-5">
|
560
|
+
Development
|
561
|
+
</label>
|
562
|
+
<nav class="md-nav" data-md-component="collapsible" data-md-level="1">
|
563
|
+
<label class="md-nav__title" for="nav-5">
|
564
|
+
Development
|
565
|
+
</label>
|
566
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
567
|
+
|
568
|
+
|
569
|
+
|
570
|
+
|
571
|
+
|
572
|
+
|
573
|
+
|
574
|
+
<li class="md-nav__item">
|
575
|
+
<a href="../../development/contributing/" title="Contribution Guide" class="md-nav__link">
|
576
|
+
Contribution Guide
|
577
|
+
</a>
|
578
|
+
</li>
|
579
|
+
|
580
|
+
|
581
|
+
|
582
|
+
|
583
|
+
|
584
|
+
|
585
|
+
|
586
|
+
<li class="md-nav__item">
|
587
|
+
<a href="../../development/license/" title="License Info" class="md-nav__link">
|
588
|
+
License Info
|
589
|
+
</a>
|
590
|
+
</li>
|
591
|
+
|
592
|
+
|
593
|
+
|
594
|
+
|
595
|
+
|
596
|
+
|
597
|
+
|
598
|
+
<li class="md-nav__item">
|
599
|
+
<a href="../../development/code_of_conduct/" title="Code of Conduct" class="md-nav__link">
|
600
|
+
Code of Conduct
|
601
|
+
</a>
|
602
|
+
</li>
|
603
|
+
|
604
|
+
|
605
|
+
|
606
|
+
|
607
|
+
|
608
|
+
|
609
|
+
|
610
|
+
<li class="md-nav__item">
|
611
|
+
<a href="../../imported/changelog/" title="Changelog" class="md-nav__link">
|
612
|
+
Changelog
|
613
|
+
</a>
|
614
|
+
</li>
|
615
|
+
|
616
|
+
|
617
|
+
</ul>
|
618
|
+
</nav>
|
619
|
+
</li>
|
620
|
+
|
621
|
+
|
622
|
+
|
623
|
+
|
624
|
+
|
625
|
+
|
626
|
+
|
627
|
+
<li class="md-nav__item">
|
628
|
+
<a href="../../whoami/" title="$ whoami" class="md-nav__link">
|
629
|
+
$ whoami
|
630
|
+
</a>
|
631
|
+
</li>
|
632
|
+
|
633
|
+
|
634
|
+
</ul>
|
635
|
+
</nav>
|
636
|
+
</div>
|
637
|
+
</div>
|
638
|
+
</div>
|
639
|
+
|
640
|
+
|
641
|
+
<div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
|
642
|
+
<div class="md-sidebar__scrollwrap">
|
643
|
+
<div class="md-sidebar__inner">
|
644
|
+
|
645
|
+
<nav class="md-nav md-nav--secondary">
|
646
|
+
|
647
|
+
|
648
|
+
|
649
|
+
|
650
|
+
|
651
|
+
<label class="md-nav__title" for="__toc">Table of contents</label>
|
652
|
+
<ul class="md-nav__list" data-md-scrollfix>
|
653
|
+
|
654
|
+
<li class="md-nav__item">
|
655
|
+
<a href="#defaults-chain" title="Defaults chain" class="md-nav__link">
|
656
|
+
Defaults chain
|
657
|
+
</a>
|
658
|
+
|
659
|
+
</li>
|
660
|
+
|
661
|
+
<li class="md-nav__item">
|
662
|
+
<a href="#user-chain" title="User chain" class="md-nav__link">
|
663
|
+
User chain
|
664
|
+
</a>
|
665
|
+
|
666
|
+
</li>
|
667
|
+
|
668
|
+
|
669
|
+
|
670
|
+
|
671
|
+
|
672
|
+
</ul>
|
673
|
+
|
674
|
+
</nav>
|
675
|
+
</div>
|
676
|
+
</div>
|
677
|
+
</div>
|
678
|
+
|
679
|
+
|
680
|
+
<div class="md-content">
|
681
|
+
<article class="md-content__inner md-typeset">
|
682
|
+
|
683
|
+
|
684
|
+
|
685
|
+
<h1 id="configuration-files">Configuration Files</h1>
|
686
|
+
<p>RBCli provides built-in support for creating and managing userspace configuration files. It does this through two chains: the <strong>defaults chain</strong> and the <strong>user chain</strong>.</p>
|
687
|
+
<h2 id="defaults-chain">Defaults chain</h2>
|
688
|
+
<p>The defaults chain allows you to specify sane defaults for your CLI tool throughout your code. This gives you the ability to declare configuration alongside the code, and allows RBCli to generate a user config automatically given your defaults. There are two ways to set them:</p>
|
689
|
+
<ul>
|
690
|
+
<li>YAML Files<ul>
|
691
|
+
<li>You can store your defaults in one or more YAML files and RBCli will import and combine them. Note that when generating the user config, RBCli will use the YAML text as-is, so comments are transferred as well. This allows you to write descriptions for the options directly in the file that the user can see.</li>
|
692
|
+
<li>This is good for tools with large or complex configuration that needs user documentation written inline</li>
|
693
|
+
<li>These YAML files should be placed in the <code>userconf/</code> directory in your project and they will automatically be loaded</li>
|
694
|
+
</ul>
|
695
|
+
</li>
|
696
|
+
<li>DSL Statements<ul>
|
697
|
+
<li>In the DSL, you can specify options individually by providing a name, description, and default value</li>
|
698
|
+
<li>This is good for simpler configuration, as the descriptions provided are written out as comments in the generated user config</li>
|
699
|
+
<li>You can put global configuration options in <code>config/userspace.rb</code></li>
|
700
|
+
<li>Command-specific confiugration can be placed in the command declarations in <code>application/commands/*.rb</code></li>
|
701
|
+
</ul>
|
702
|
+
</li>
|
703
|
+
</ul>
|
704
|
+
<p>DSL statements appear in both of the above locations as the following:</p>
|
705
|
+
<pre><code class="ruby">config_default :name, description: '<description_help_text>', default: '<default_value>'
|
706
|
+
</code></pre>
|
707
|
+
|
708
|
+
<h2 id="user-chain">User chain</h2>
|
709
|
+
<p>The user chain has two functions: generating and loading configuration from a YAML file on the end user's machine.</p>
|
710
|
+
<p>Rbcli will determine the correct location to locate the user configuration based on two factors:</p>
|
711
|
+
<ol>
|
712
|
+
<li>The default location set in <code>config/userspace.rb</code></li>
|
713
|
+
<li>The location specified on the command line using the <code>--config-file=<filename></code> option (overrides #1)</li>
|
714
|
+
</ol>
|
715
|
+
<p>To configure the default location, edit <code>config/userspace.rb</code>:</p>
|
716
|
+
<pre><code class="ruby">config_userfile '~/.mytool', merge_defaults: true, required: false
|
717
|
+
</code></pre>
|
718
|
+
|
719
|
+
<ul>
|
720
|
+
<li><code>path/to/config/file</code><ul>
|
721
|
+
<li>Self explanatory. Recommended locations are a dotfile in the user's home directory, or a file under <code>/etc</code> such as <code>/etc/mytool/userconf.yaml</code></li>
|
722
|
+
</ul>
|
723
|
+
</li>
|
724
|
+
<li><code>merge_defaults</code><ul>
|
725
|
+
<li>If set to <code>true</code>, user settings override default settings. If set to <code>false</code>, default settings are not loaded at all and the user is required to have all values specified in their config.</li>
|
726
|
+
</ul>
|
727
|
+
</li>
|
728
|
+
<li><code>required</code><ul>
|
729
|
+
<li>If set to <code>true</code> the application will not run if the file does not exist. A message will be displayed to the user to run your application with the <code>--generate-config</code> option to generate the file given your specified defaults.</li>
|
730
|
+
</ul>
|
731
|
+
</li>
|
732
|
+
</ul>
|
733
|
+
<p>Users can generate configs by running <code>yourclitool --generate-config</code>. This will generate a config file at the tool's default location specified in the DSL. This location can be overridden via the <code>--config-file=<filename></code> option.</p>
|
734
|
+
|
735
|
+
|
736
|
+
|
737
|
+
|
738
|
+
|
739
|
+
|
740
|
+
|
741
|
+
|
742
|
+
|
743
|
+
</article>
|
744
|
+
</div>
|
745
|
+
</div>
|
746
|
+
</main>
|
747
|
+
|
748
|
+
|
749
|
+
<footer class="md-footer">
|
750
|
+
|
751
|
+
<div class="md-footer-nav">
|
752
|
+
<nav class="md-footer-nav__inner md-grid">
|
753
|
+
|
754
|
+
<a href="../command_types/" title="Command Types" class="md-flex md-footer-nav__link md-footer-nav__link--prev" rel="prev">
|
755
|
+
<div class="md-flex__cell md-flex__cell--shrink">
|
756
|
+
<i class="md-icon md-icon--arrow-back md-footer-nav__button"></i>
|
757
|
+
</div>
|
758
|
+
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
|
759
|
+
<span class="md-flex__ellipsis">
|
760
|
+
<span class="md-footer-nav__direction">
|
761
|
+
Previous
|
762
|
+
</span>
|
763
|
+
Command Types
|
764
|
+
</span>
|
765
|
+
</div>
|
766
|
+
</a>
|
767
|
+
|
768
|
+
|
769
|
+
<a href="../hooks/" title="Hooks" class="md-flex md-footer-nav__link md-footer-nav__link--next" rel="next">
|
770
|
+
<div class="md-flex__cell md-flex__cell--stretch md-footer-nav__title">
|
771
|
+
<span class="md-flex__ellipsis">
|
772
|
+
<span class="md-footer-nav__direction">
|
773
|
+
Next
|
774
|
+
</span>
|
775
|
+
Hooks
|
776
|
+
</span>
|
777
|
+
</div>
|
778
|
+
<div class="md-flex__cell md-flex__cell--shrink">
|
779
|
+
<i class="md-icon md-icon--arrow-forward md-footer-nav__button"></i>
|
780
|
+
</div>
|
781
|
+
</a>
|
782
|
+
|
783
|
+
</nav>
|
784
|
+
</div>
|
785
|
+
|
786
|
+
<div class="md-footer-meta md-typeset">
|
787
|
+
<div class="md-footer-meta__inner md-grid">
|
788
|
+
<div class="md-footer-copyright">
|
789
|
+
|
790
|
+
<div class="md-footer-copyright__highlight">
|
791
|
+
Copyright © 2018 Andrew Khoury
|
792
|
+
</div>
|
793
|
+
|
794
|
+
powered by
|
795
|
+
<a href="https://www.mkdocs.org">MkDocs</a>
|
796
|
+
and
|
797
|
+
<a href="https://squidfunk.github.io/mkdocs-material/">
|
798
|
+
Material for MkDocs</a>
|
799
|
+
</div>
|
800
|
+
|
801
|
+
|
802
|
+
|
803
|
+
</div>
|
804
|
+
</div>
|
805
|
+
</footer>
|
806
|
+
|
807
|
+
</div>
|
808
|
+
|
809
|
+
<script src="../../assets/javascripts/application.a59e2a89.js"></script>
|
810
|
+
|
811
|
+
<script>app.initialize({version:"0.17.5",url:{base:"../.."}})</script>
|
812
|
+
|
813
|
+
|
814
|
+
|
815
|
+
|
816
|
+
|
817
|
+
</body>
|
818
|
+
</html>
|