rbcli 0.1.10 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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>