rbcli 0.1.10 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (129) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -0
  3. data/CODE_OF_CONDUCT.md +1 -1
  4. data/Gemfile.lock +12 -12
  5. data/LICENSE.txt +674 -21
  6. data/README.md +80 -443
  7. data/bin/console +19 -0
  8. data/bin/setup +20 -0
  9. data/docs/404.html +639 -0
  10. data/docs/advanced/automatic_updates/index.html +791 -0
  11. data/docs/advanced/command_types/index.html +946 -0
  12. data/docs/advanced/distributed_state_locking/index.html +777 -0
  13. data/docs/advanced/hooks/index.html +836 -0
  14. data/docs/advanced/state_storage/index.html +957 -0
  15. data/docs/advanced/user_config_files/index.html +818 -0
  16. data/docs/assets/fonts/font-awesome.css +4 -0
  17. data/docs/assets/fonts/material-icons.css +13 -0
  18. data/docs/assets/fonts/specimen/FontAwesome.ttf +0 -0
  19. data/docs/assets/fonts/specimen/FontAwesome.woff +0 -0
  20. data/docs/assets/fonts/specimen/FontAwesome.woff2 +0 -0
  21. data/docs/assets/fonts/specimen/MaterialIcons-Regular.ttf +0 -0
  22. data/docs/assets/fonts/specimen/MaterialIcons-Regular.woff +0 -0
  23. data/docs/assets/fonts/specimen/MaterialIcons-Regular.woff2 +0 -0
  24. data/docs/assets/images/favicon.png +0 -0
  25. data/docs/assets/images/icons/bitbucket.1b09e088.svg +20 -0
  26. data/docs/assets/images/icons/github.f0b8504a.svg +18 -0
  27. data/docs/assets/images/icons/gitlab.6dd19c00.svg +38 -0
  28. data/docs/assets/javascripts/application.a59e2a89.js +1 -0
  29. data/docs/assets/javascripts/lunr/lunr.da.js +1 -0
  30. data/docs/assets/javascripts/lunr/lunr.de.js +1 -0
  31. data/docs/assets/javascripts/lunr/lunr.du.js +1 -0
  32. data/docs/assets/javascripts/lunr/lunr.es.js +1 -0
  33. data/docs/assets/javascripts/lunr/lunr.fi.js +1 -0
  34. data/docs/assets/javascripts/lunr/lunr.fr.js +1 -0
  35. data/docs/assets/javascripts/lunr/lunr.hu.js +1 -0
  36. data/docs/assets/javascripts/lunr/lunr.it.js +1 -0
  37. data/docs/assets/javascripts/lunr/lunr.jp.js +1 -0
  38. data/docs/assets/javascripts/lunr/lunr.multi.js +1 -0
  39. data/docs/assets/javascripts/lunr/lunr.no.js +1 -0
  40. data/docs/assets/javascripts/lunr/lunr.pt.js +1 -0
  41. data/docs/assets/javascripts/lunr/lunr.ro.js +1 -0
  42. data/docs/assets/javascripts/lunr/lunr.ru.js +1 -0
  43. data/docs/assets/javascripts/lunr/lunr.stemmer.support.js +1 -0
  44. data/docs/assets/javascripts/lunr/lunr.sv.js +1 -0
  45. data/docs/assets/javascripts/lunr/lunr.tr.js +1 -0
  46. data/docs/assets/javascripts/lunr/tinyseg.js +1 -0
  47. data/docs/assets/javascripts/modernizr.1aa3b519.js +1 -0
  48. data/docs/assets/stylesheets/application-palette.6079476c.css +2 -0
  49. data/docs/assets/stylesheets/application.ba0fd1a6.css +2 -0
  50. data/docs/development/code_of_conduct/index.html +883 -0
  51. data/docs/development/contributing/index.html +744 -0
  52. data/docs/development/license/index.html +715 -0
  53. data/docs/imported/changelog/index.html +853 -0
  54. data/docs/imported/quick_reference/index.html +1057 -0
  55. data/docs/index.html +732 -0
  56. data/docs/search/search_index.json +569 -0
  57. data/docs/sitemap.xml +93 -0
  58. data/docs/tutorial/10-getting_started/index.html +806 -0
  59. data/docs/tutorial/20-project_layout/index.html +972 -0
  60. data/docs/tutorial/30-your_first_command/index.html +906 -0
  61. data/docs/tutorial/40-options_parameters_and_arguments/index.html +1049 -0
  62. data/docs/tutorial/50-publishing/index.html +838 -0
  63. data/docs/whoami/index.html +709 -0
  64. data/docs-src/docs/advanced/automatic_updates.md +42 -0
  65. data/docs-src/docs/advanced/command_types.md +144 -0
  66. data/docs-src/docs/advanced/distributed_state_locking.md +33 -0
  67. data/docs-src/docs/advanced/hooks.md +65 -0
  68. data/docs-src/docs/advanced/logging.md +35 -0
  69. data/docs-src/docs/advanced/state_storage.md +117 -0
  70. data/docs-src/docs/advanced/user_config_files.md +47 -0
  71. data/docs-src/docs/development/code_of_conduct.md +74 -0
  72. data/docs-src/docs/development/contributing.md +49 -0
  73. data/docs-src/docs/development/license.md +10 -0
  74. data/docs-src/docs/imported/changelog.md +31 -0
  75. data/docs-src/docs/imported/quick_reference.md +150 -0
  76. data/docs-src/docs/index.md +38 -0
  77. data/docs-src/docs/tutorial/10-getting_started.md +41 -0
  78. data/docs-src/docs/tutorial/20-project_layout.md +115 -0
  79. data/docs-src/docs/tutorial/30-your_first_command.md +126 -0
  80. data/docs-src/docs/tutorial/40-options_parameters_and_arguments.md +251 -0
  81. data/docs-src/docs/tutorial/50-publishing.md +47 -0
  82. data/docs-src/docs/whoami.md +28 -0
  83. data/docs-src/makesite.sh +14 -0
  84. data/docs-src/mkdocs.yml +76 -0
  85. data/docs-src/runsite.sh +3 -0
  86. data/exe/rbcli +76 -5
  87. data/lib/rbcli/autoupdate/autoupdate.rb +24 -4
  88. data/lib/rbcli/autoupdate/gem_updater.rb +23 -2
  89. data/lib/rbcli/autoupdate/github_updater.rb +22 -1
  90. data/lib/rbcli/configuration/config.rb +22 -1
  91. data/lib/rbcli/configuration/configurate.rb +24 -2
  92. data/lib/rbcli/engine/command.rb +26 -6
  93. data/lib/rbcli/engine/load_project.rb +29 -3
  94. data/lib/rbcli/engine/parser.rb +25 -4
  95. data/lib/rbcli/logging/logging.rb +21 -0
  96. data/lib/rbcli/scriptwrapping/scriptwrapper.rb +30 -11
  97. data/lib/rbcli/stateful_systems/configuratestorage.rb +20 -0
  98. data/lib/rbcli/stateful_systems/state_storage.rb +20 -0
  99. data/lib/rbcli/stateful_systems/storagetypes/localstate.rb +20 -0
  100. data/lib/rbcli/stateful_systems/storagetypes/remote_state_connectors/dynamodb.rb +20 -0
  101. data/lib/rbcli/stateful_systems/storagetypes/remotestate_dynamodb.rb +20 -0
  102. data/lib/rbcli/util/hash_deep_symbolize.rb +43 -22
  103. data/lib/rbcli/util/string_colorize.rb +20 -0
  104. data/lib/rbcli/version.rb +21 -1
  105. data/lib/rbcli-tool/generators.rb +20 -0
  106. data/lib/rbcli-tool/mdless_fix.rb +20 -0
  107. data/lib/rbcli-tool/project.rb +27 -2
  108. data/lib/rbcli-tool/util.rb +20 -0
  109. data/lib/rbcli-tool.rb +20 -0
  110. data/lib/rbcli.rb +20 -0
  111. data/lib-sh/lib-rbcli.sh +19 -0
  112. data/rbcli.gemspec +22 -3
  113. data/skeletons/project/CODE_OF_CONDUCT.md +1 -1
  114. data/skeletons/project/README.md +17 -2
  115. data/skeletons/project/application/commands/command.erb +10 -8
  116. data/skeletons/project/application/commands/script.erb +3 -1
  117. data/skeletons/project/application/commands/scripts/script.sh +2 -2
  118. data/skeletons/project/application/options.rb +12 -3
  119. data/skeletons/project/config/autoupdate.rb +5 -2
  120. data/skeletons/project/config/storage.rb +7 -6
  121. data/skeletons/project/config/userspace.rb +6 -1
  122. data/skeletons/project/exe/executable +1 -1
  123. data/skeletons/project/lib/.keep +0 -0
  124. data/skeletons/project/untitled.gemspec +4 -4
  125. data/skeletons/project/{default_user_configs → userconf}/user_defaults.yml +0 -0
  126. metadata +85 -9
  127. data/examples/defaults.yml +0 -4
  128. data/examples/myscript.sh +0 -23
  129. data/examples/mytool +0 -95
data/bin/setup CHANGED
@@ -1,4 +1,24 @@
1
1
  #!/usr/bin/env bash
2
+ ##################################################################################
3
+ # RBCli -- A framework for developing command line applications in Ruby #
4
+ # Copyright (C) 2018 Andrew Khoury #
5
+ # #
6
+ # This program is free software: you can redistribute it and/or modify #
7
+ # it under the terms of the GNU General Public License as published by #
8
+ # the Free Software Foundation, either version 3 of the License, or #
9
+ # (at your option) any later version. #
10
+ # #
11
+ # This program is distributed in the hope that it will be useful, #
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of #
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
14
+ # GNU General Public License for more details. #
15
+ # #
16
+ # You should have received a copy of the GNU General Public License #
17
+ # along with this program. If not, see <https://www.gnu.org/licenses/>. #
18
+ # #
19
+ # For questions regarding licensing, please contact andrew@blacknex.us #
20
+ ##################################################################################
21
+
2
22
  set -euo pipefail
3
23
  IFS=$'\n\t'
4
24
  set -vx
data/docs/404.html ADDED
@@ -0,0 +1,639 @@
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>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
+
98
+ <header class="md-header" data-md-component="header">
99
+ <nav class="md-header-nav md-grid">
100
+ <div class="md-flex">
101
+ <div class="md-flex__cell md-flex__cell--shrink">
102
+ <a href="/" title="RBCli Documentation" class="md-header-nav__button md-logo">
103
+
104
+ <i class="md-icon">devices</i>
105
+
106
+ </a>
107
+ </div>
108
+ <div class="md-flex__cell md-flex__cell--shrink">
109
+ <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
110
+ </div>
111
+ <div class="md-flex__cell md-flex__cell--stretch">
112
+ <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
113
+
114
+
115
+ <span class="md-header-nav__topic">
116
+ RBCli Documentation
117
+ </span>
118
+ <span class="md-header-nav__topic">
119
+
120
+ </span>
121
+
122
+
123
+ </div>
124
+ </div>
125
+ <div class="md-flex__cell md-flex__cell--shrink">
126
+
127
+
128
+ <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
129
+
130
+ <div class="md-search" data-md-component="search" role="dialog">
131
+ <label class="md-search__overlay" for="__search"></label>
132
+ <div class="md-search__inner" role="search">
133
+ <form class="md-search__form" name="search">
134
+ <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">
135
+ <label class="md-icon md-search__icon" for="__search"></label>
136
+ <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
137
+ &#xE5CD;
138
+ </button>
139
+ </form>
140
+ <div class="md-search__output">
141
+ <div class="md-search__scrollwrap" data-md-scrollfix>
142
+ <div class="md-search-result" data-md-component="result">
143
+ <div class="md-search-result__meta">
144
+ Type to start searching
145
+ </div>
146
+ <ol class="md-search-result__list"></ol>
147
+ </div>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ </div>
152
+
153
+
154
+ </div>
155
+
156
+ <div class="md-flex__cell md-flex__cell--shrink">
157
+ <div class="md-header-nav__source">
158
+
159
+
160
+
161
+
162
+
163
+
164
+ <a href="https://github.com/akhoury6/rbcli/" title="Go to repository" class="md-source" data-md-source="github">
165
+
166
+ <div class="md-source__icon">
167
+ <svg viewBox="0 0 24 24" width="24" height="24">
168
+ <use xlink:href="#__github" width="24" height="24"></use>
169
+ </svg>
170
+ </div>
171
+
172
+ <div class="md-source__repository">
173
+ GitHub
174
+ </div>
175
+ </a>
176
+
177
+ </div>
178
+ </div>
179
+
180
+ </div>
181
+ </nav>
182
+ </header>
183
+
184
+ <div class="md-container">
185
+
186
+
187
+
188
+
189
+
190
+
191
+ <nav class="md-tabs" data-md-component="tabs">
192
+ <div class="md-tabs__inner md-grid">
193
+ <ul class="md-tabs__list">
194
+
195
+
196
+ <li class="md-tabs__item">
197
+
198
+ <a href="/" title="Home" class="md-tabs__link md-tabs__link--active">
199
+ Home
200
+ </a>
201
+
202
+ </li>
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+ <li class="md-tabs__item">
211
+
212
+ <a href="/tutorial/10-getting_started/" title="Tutorial" class="md-tabs__link">
213
+ Tutorial
214
+ </a>
215
+
216
+ </li>
217
+
218
+
219
+
220
+
221
+
222
+
223
+ <li class="md-tabs__item">
224
+
225
+ <a href="/advanced/command_types/" title="Advanced Features" class="md-tabs__link">
226
+ Advanced Features
227
+ </a>
228
+
229
+ </li>
230
+
231
+
232
+
233
+
234
+
235
+
236
+ <li class="md-tabs__item">
237
+
238
+ <a href="/development/contributing/" title="Development" class="md-tabs__link">
239
+ Development
240
+ </a>
241
+
242
+ </li>
243
+
244
+
245
+
246
+
247
+
248
+ </ul>
249
+ </div>
250
+ </nav>
251
+
252
+ <main class="md-main">
253
+ <div class="md-main__inner md-grid" data-md-component="container">
254
+
255
+
256
+ <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
257
+ <div class="md-sidebar__scrollwrap">
258
+ <div class="md-sidebar__inner">
259
+ <nav class="md-nav md-nav--primary" data-md-level="0">
260
+ <label class="md-nav__title md-nav__title--site" for="__drawer">
261
+ <span class="md-nav__button md-logo">
262
+
263
+ <i class="md-icon">devices</i>
264
+
265
+ </span>
266
+ RBCli Documentation
267
+ </label>
268
+
269
+ <div class="md-nav__source">
270
+
271
+
272
+
273
+
274
+
275
+
276
+ <a href="https://github.com/akhoury6/rbcli/" title="Go to repository" class="md-source" data-md-source="github">
277
+
278
+ <div class="md-source__icon">
279
+ <svg viewBox="0 0 24 24" width="24" height="24">
280
+ <use xlink:href="#__github" width="24" height="24"></use>
281
+ </svg>
282
+ </div>
283
+
284
+ <div class="md-source__repository">
285
+ GitHub
286
+ </div>
287
+ </a>
288
+
289
+ </div>
290
+
291
+ <ul class="md-nav__list" data-md-scrollfix>
292
+
293
+
294
+
295
+
296
+
297
+
298
+ <li class="md-nav__item">
299
+ <a href="/" title="Home" class="md-nav__link">
300
+ Home
301
+ </a>
302
+ </li>
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+ <li class="md-nav__item">
311
+ <a href="/imported/quick_reference/" title="Quick Reference" class="md-nav__link">
312
+ Quick Reference
313
+ </a>
314
+ </li>
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+ <li class="md-nav__item md-nav__item--nested">
323
+
324
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-3" type="checkbox" id="nav-3">
325
+
326
+ <label class="md-nav__link" for="nav-3">
327
+ Tutorial
328
+ </label>
329
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
330
+ <label class="md-nav__title" for="nav-3">
331
+ Tutorial
332
+ </label>
333
+ <ul class="md-nav__list" data-md-scrollfix>
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+ <li class="md-nav__item">
342
+ <a href="/tutorial/10-getting_started/" title="Getting Started" class="md-nav__link">
343
+ Getting Started
344
+ </a>
345
+ </li>
346
+
347
+
348
+
349
+
350
+
351
+
352
+
353
+ <li class="md-nav__item">
354
+ <a href="/tutorial/20-project_layout/" title="The Project Layout" class="md-nav__link">
355
+ The Project Layout
356
+ </a>
357
+ </li>
358
+
359
+
360
+
361
+
362
+
363
+
364
+
365
+ <li class="md-nav__item">
366
+ <a href="/tutorial/30-your_first_command/" title="Your First Command" class="md-nav__link">
367
+ Your First Command
368
+ </a>
369
+ </li>
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+ <li class="md-nav__item">
378
+ <a href="/tutorial/40-options_parameters_and_arguments/" title="Options, Parameters, and Arguments" class="md-nav__link">
379
+ Options, Parameters, and Arguments
380
+ </a>
381
+ </li>
382
+
383
+
384
+
385
+
386
+
387
+
388
+
389
+ <li class="md-nav__item">
390
+ <a href="/tutorial/50-publishing/" title="Publishing and Distribution" class="md-nav__link">
391
+ Publishing and Distribution
392
+ </a>
393
+ </li>
394
+
395
+
396
+ </ul>
397
+ </nav>
398
+ </li>
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+ <li class="md-nav__item md-nav__item--nested">
407
+
408
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-4" type="checkbox" id="nav-4">
409
+
410
+ <label class="md-nav__link" for="nav-4">
411
+ Advanced Features
412
+ </label>
413
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
414
+ <label class="md-nav__title" for="nav-4">
415
+ Advanced Features
416
+ </label>
417
+ <ul class="md-nav__list" data-md-scrollfix>
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+ <li class="md-nav__item">
426
+ <a href="/advanced/command_types/" title="Command Types" class="md-nav__link">
427
+ Command Types
428
+ </a>
429
+ </li>
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+ <li class="md-nav__item">
438
+ <a href="/advanced/user_config_files/" title="User Config Files" class="md-nav__link">
439
+ User Config Files
440
+ </a>
441
+ </li>
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+ <li class="md-nav__item">
450
+ <a href="/advanced/hooks/" title="Hooks" class="md-nav__link">
451
+ Hooks
452
+ </a>
453
+ </li>
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+ <li class="md-nav__item">
462
+ <a href="/advanced/automatic_updates/" title="Automatic Updates" class="md-nav__link">
463
+ Automatic Updates
464
+ </a>
465
+ </li>
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+ <li class="md-nav__item">
474
+ <a href="/advanced/state_storage/" title="State Storage" class="md-nav__link">
475
+ State Storage
476
+ </a>
477
+ </li>
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+ <li class="md-nav__item">
486
+ <a href="/advanced/distributed_state_locking/" title="Distributed State Locking" class="md-nav__link">
487
+ Distributed State Locking
488
+ </a>
489
+ </li>
490
+
491
+
492
+ </ul>
493
+ </nav>
494
+ </li>
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+ <li class="md-nav__item md-nav__item--nested">
503
+
504
+ <input class="md-toggle md-nav__toggle" data-md-toggle="nav-5" type="checkbox" id="nav-5">
505
+
506
+ <label class="md-nav__link" for="nav-5">
507
+ Development
508
+ </label>
509
+ <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
510
+ <label class="md-nav__title" for="nav-5">
511
+ Development
512
+ </label>
513
+ <ul class="md-nav__list" data-md-scrollfix>
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+ <li class="md-nav__item">
522
+ <a href="/development/contributing/" title="Contribution Guide" class="md-nav__link">
523
+ Contribution Guide
524
+ </a>
525
+ </li>
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+ <li class="md-nav__item">
534
+ <a href="/development/license/" title="License Info" class="md-nav__link">
535
+ License Info
536
+ </a>
537
+ </li>
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+ <li class="md-nav__item">
546
+ <a href="/development/code_of_conduct/" title="Code of Conduct" class="md-nav__link">
547
+ Code of Conduct
548
+ </a>
549
+ </li>
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+ <li class="md-nav__item">
558
+ <a href="/imported/changelog/" title="Changelog" class="md-nav__link">
559
+ Changelog
560
+ </a>
561
+ </li>
562
+
563
+
564
+ </ul>
565
+ </nav>
566
+ </li>
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+ <li class="md-nav__item">
575
+ <a href="/whoami/" title="$ whoami" class="md-nav__link">
576
+ $ whoami
577
+ </a>
578
+ </li>
579
+
580
+
581
+ </ul>
582
+ </nav>
583
+ </div>
584
+ </div>
585
+ </div>
586
+
587
+
588
+
589
+ <div class="md-content">
590
+ <article class="md-content__inner md-typeset">
591
+
592
+ <h1>404 - Not found</h1>
593
+
594
+
595
+
596
+
597
+
598
+
599
+ </article>
600
+ </div>
601
+ </div>
602
+ </main>
603
+
604
+
605
+ <footer class="md-footer">
606
+
607
+ <div class="md-footer-meta md-typeset">
608
+ <div class="md-footer-meta__inner md-grid">
609
+ <div class="md-footer-copyright">
610
+
611
+ <div class="md-footer-copyright__highlight">
612
+ Copyright © 2018 Andrew Khoury
613
+ </div>
614
+
615
+ powered by
616
+ <a href="https://www.mkdocs.org">MkDocs</a>
617
+ and
618
+ <a href="https://squidfunk.github.io/mkdocs-material/">
619
+ Material for MkDocs</a>
620
+ </div>
621
+
622
+
623
+
624
+ </div>
625
+ </div>
626
+ </footer>
627
+
628
+ </div>
629
+
630
+ <script src="/assets/javascripts/application.a59e2a89.js"></script>
631
+
632
+ <script>app.initialize({version:"0.17.5",url:{base:""}})</script>
633
+
634
+
635
+
636
+
637
+
638
+ </body>
639
+ </html>