rbcli 0.3.3 → 0.4.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 (506) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +9 -0
  3. data/LICENSE.txt +5 -670
  4. data/README.md +64 -160
  5. data/VERSION +1 -0
  6. data/exe/rbcli +181 -242
  7. data/lib/rbcli/components/commands/command.rb +120 -0
  8. data/lib/rbcli/components/commands/command.rb.erb +55 -0
  9. data/lib/rbcli/components/commands/command_old.rb +105 -0
  10. data/lib/rbcli/components/commands/script.rb.erb +43 -0
  11. data/{lib-sh → lib/rbcli/components/commands/scriptwrapper}/lib-rbcli.sh +29 -34
  12. data/lib/rbcli/components/commands/scriptwrapper/scriptwrapper.rb +64 -0
  13. data/lib/rbcli/components/config/backend.rb +102 -0
  14. data/lib/rbcli/components/config/backends/env.rb +67 -0
  15. data/lib/rbcli/components/config/backends/helpers/deep_assign.rb +47 -0
  16. data/lib/rbcli/components/config/backends/ini.rb +53 -0
  17. data/lib/rbcli/components/config/backends/json.rb +32 -0
  18. data/lib/rbcli/components/config/backends/null.rb +32 -0
  19. data/lib/rbcli/components/config/backends/toml.rb +38 -0
  20. data/lib/rbcli/components/config/backends/yaml.rb +31 -0
  21. data/lib/rbcli/components/config/component.rb +33 -0
  22. data/lib/rbcli/components/config/config.rb +165 -0
  23. data/lib/rbcli/components/config/config_of_death.rb +12 -0
  24. data/lib/rbcli/components/config/template.rb.erb +36 -0
  25. data/lib/rbcli/components/core/configurate.rb +63 -0
  26. data/lib/rbcli/components/core/engine.rb +30 -0
  27. data/lib/rbcli/components/core/warehouse.rb +18 -0
  28. data/lib/rbcli/components/envvars/component.rb +20 -0
  29. data/lib/rbcli/components/envvars/template.rb.erb +24 -0
  30. data/lib/rbcli/components/hooks/component.rb +36 -0
  31. data/lib/rbcli/components/hooks/template.rb.erb +20 -0
  32. data/lib/rbcli/components/logger/component.rb +32 -0
  33. data/lib/rbcli/components/logger/logger.rb +155 -0
  34. data/lib/rbcli/components/logger/lolcat/lol.rb +71 -0
  35. data/lib/rbcli/components/logger/template.rb.erb +40 -0
  36. data/lib/rbcli/components/parser/component.rb +33 -0
  37. data/lib/rbcli/{util → components/parser/optimist}/optimist.rb +134 -48
  38. data/lib/rbcli/components/parser/parser.rb +178 -0
  39. data/lib/rbcli/components/parser/template.rb.erb +35 -0
  40. data/lib/rbcli/components/updatechecker/common/common.rb +52 -0
  41. data/lib/rbcli/components/updatechecker/component.rb +42 -0
  42. data/lib/rbcli/components/updatechecker/gem_checker.rb +40 -0
  43. data/lib/rbcli/components/updatechecker/github_checker.rb +46 -0
  44. data/lib/rbcli/components/updatechecker/template.rb.erb +14 -0
  45. data/lib/rbcli/util/deprecation_warning.rb +41 -55
  46. data/lib/rbcli/util/errors.rb +12 -0
  47. data/lib/rbcli/util/exit.rb +12 -0
  48. data/lib/rbcli/util/hash_deep_symbolize.rb +26 -41
  49. data/lib/rbcli/util/string_compression.rb +10 -0
  50. data/lib/rbcli/version.rb +5 -20
  51. data/lib/rbcli-tool/helpers.rb +58 -0
  52. data/lib/rbcli-tool/skeletons/gem.rb.erb +17 -0
  53. data/lib/rbcli-tool/skeletons/portable.rb.erb +48 -0
  54. data/lib/rbcli.rb +19 -50
  55. data/sig/rbcli.rbs +9 -0
  56. metadata +125 -496
  57. data/.gitignore +0 -60
  58. data/.rakeTasks +0 -7
  59. data/.rbenv-gemsets +0 -1
  60. data/.travis.yml +0 -5
  61. data/CHANGELOG.md +0 -193
  62. data/CODE_OF_CONDUCT.md +0 -74
  63. data/Gemfile +0 -6
  64. data/Gemfile.lock +0 -92
  65. data/Rakefile +0 -10
  66. data/bin/console +0 -33
  67. data/bin/setup +0 -28
  68. data/docs/404.html +0 -59
  69. data/docs/advanced/automatic_updates/index.html +0 -1174
  70. data/docs/advanced/command_types/index.html +0 -1262
  71. data/docs/advanced/distributed_state_locking/index.html +0 -1176
  72. data/docs/advanced/hooks/index.html +0 -1192
  73. data/docs/advanced/index.html +0 -1140
  74. data/docs/advanced/index.xml +0 -75
  75. data/docs/advanced/interactive_commands/index.html +0 -1177
  76. data/docs/advanced/logging/index.html +0 -1184
  77. data/docs/advanced/remote_execution/index.html +0 -1190
  78. data/docs/advanced/state_storage/index.html +0 -1281
  79. data/docs/advanced/user_config_files/index.html +0 -1209
  80. data/docs/categories/index.html +0 -1146
  81. data/docs/categories/index.xml +0 -11
  82. data/docs/css/atom-one-dark-reasonable.css +0 -77
  83. data/docs/css/auto-complete.css +0 -47
  84. data/docs/css/featherlight.min.css +0 -8
  85. data/docs/css/fontawesome-all.min.css +0 -1
  86. data/docs/css/hugo-theme.css +0 -254
  87. data/docs/css/hybrid.css +0 -102
  88. data/docs/css/nucleus.css +0 -615
  89. data/docs/css/perfect-scrollbar.min.css +0 -2
  90. data/docs/css/tags.css +0 -49
  91. data/docs/css/theme-blue.css +0 -111
  92. data/docs/css/theme-green.css +0 -111
  93. data/docs/css/theme-red.css +0 -111
  94. data/docs/css/theme.css +0 -1136
  95. data/docs/development/changelog/index.html +0 -1420
  96. data/docs/development/code_of_conduct/index.html +0 -1222
  97. data/docs/development/contributing/index.html +0 -1201
  98. data/docs/development/index.html +0 -1140
  99. data/docs/development/index.xml +0 -40
  100. data/docs/development/license/index.html +0 -1165
  101. data/docs/fonts/Inconsolata.eot +0 -0
  102. data/docs/fonts/Inconsolata.svg +0 -1
  103. data/docs/fonts/Inconsolata.ttf +0 -0
  104. data/docs/fonts/Inconsolata.woff +0 -0
  105. data/docs/fonts/Novecentosanswide-Normal-webfont.eot +0 -0
  106. data/docs/fonts/Novecentosanswide-Normal-webfont.svg +0 -1
  107. data/docs/fonts/Novecentosanswide-Normal-webfont.ttf +0 -0
  108. data/docs/fonts/Novecentosanswide-Normal-webfont.woff +0 -0
  109. data/docs/fonts/Novecentosanswide-Normal-webfont.woff2 +0 -0
  110. data/docs/fonts/Novecentosanswide-UltraLight-webfont.eot +0 -0
  111. data/docs/fonts/Novecentosanswide-UltraLight-webfont.svg +0 -1
  112. data/docs/fonts/Novecentosanswide-UltraLight-webfont.ttf +0 -0
  113. data/docs/fonts/Novecentosanswide-UltraLight-webfont.woff +0 -0
  114. data/docs/fonts/Novecentosanswide-UltraLight-webfont.woff2 +0 -0
  115. data/docs/fonts/Work_Sans_200.eot +0 -0
  116. data/docs/fonts/Work_Sans_200.svg +0 -1
  117. data/docs/fonts/Work_Sans_200.ttf +0 -0
  118. data/docs/fonts/Work_Sans_200.woff +0 -0
  119. data/docs/fonts/Work_Sans_200.woff2 +0 -0
  120. data/docs/fonts/Work_Sans_300.eot +0 -0
  121. data/docs/fonts/Work_Sans_300.svg +0 -1
  122. data/docs/fonts/Work_Sans_300.ttf +0 -0
  123. data/docs/fonts/Work_Sans_300.woff +0 -0
  124. data/docs/fonts/Work_Sans_300.woff2 +0 -0
  125. data/docs/fonts/Work_Sans_500.eot +0 -0
  126. data/docs/fonts/Work_Sans_500.svg +0 -1
  127. data/docs/fonts/Work_Sans_500.ttf +0 -0
  128. data/docs/fonts/Work_Sans_500.woff +0 -0
  129. data/docs/fonts/Work_Sans_500.woff2 +0 -0
  130. data/docs/images/clippy.svg +0 -1
  131. data/docs/images/favicon.png +0 -0
  132. data/docs/images/gopher-404.jpg +0 -0
  133. data/docs/imported/changelog/index.html +0 -1449
  134. data/docs/imported/index.html +0 -1191
  135. data/docs/imported/index.xml +0 -23
  136. data/docs/index.html +0 -1138
  137. data/docs/index.json +0 -183
  138. data/docs/index.xml +0 -138
  139. data/docs/js/auto-complete.js +0 -3
  140. data/docs/js/clipboard.min.js +0 -7
  141. data/docs/js/featherlight.min.js +0 -9
  142. data/docs/js/highlight.pack.js +0 -6
  143. data/docs/js/html5shiv-printshiv.min.js +0 -4
  144. data/docs/js/hugo-learn.js +0 -94
  145. data/docs/js/jquery-3.3.1.min.js +0 -2
  146. data/docs/js/jquery.sticky.js +0 -288
  147. data/docs/js/learn.js +0 -459
  148. data/docs/js/lunr.min.js +0 -6
  149. data/docs/js/modernizr.custom-3.6.0.js +0 -3
  150. data/docs/js/perfect-scrollbar.jquery.min.js +0 -2
  151. data/docs/js/perfect-scrollbar.min.js +0 -2
  152. data/docs/js/search.js +0 -93
  153. data/docs/mermaid/mermaid.css +0 -277
  154. data/docs/mermaid/mermaid.dark.css +0 -278
  155. data/docs/mermaid/mermaid.forest.css +0 -356
  156. data/docs/mermaid/mermaid.js +0 -8
  157. data/docs/quick_reference/index.html +0 -1246
  158. data/docs/quick_reference/index.xml +0 -12
  159. data/docs/sitemap.xml +0 -81
  160. data/docs/tags/index.html +0 -1146
  161. data/docs/tags/index.xml +0 -11
  162. data/docs/tutorial/10-getting_started/index.html +0 -1174
  163. data/docs/tutorial/20-project_layout/index.html +0 -1299
  164. data/docs/tutorial/30-your_first_command/index.html +0 -1263
  165. data/docs/tutorial/40-options_parameters_and_arguments/index.html +0 -1384
  166. data/docs/tutorial/50-publishing/index.html +0 -1187
  167. data/docs/tutorial/index.html +0 -1140
  168. data/docs/tutorial/index.xml +0 -47
  169. data/docs/webfonts/fa-brands-400.eot +0 -0
  170. data/docs/webfonts/fa-brands-400.svg +0 -1
  171. data/docs/webfonts/fa-brands-400.ttf +0 -0
  172. data/docs/webfonts/fa-brands-400.woff +0 -0
  173. data/docs/webfonts/fa-brands-400.woff2 +0 -0
  174. data/docs/webfonts/fa-regular-400.eot +0 -0
  175. data/docs/webfonts/fa-regular-400.svg +0 -1
  176. data/docs/webfonts/fa-regular-400.ttf +0 -0
  177. data/docs/webfonts/fa-regular-400.woff +0 -0
  178. data/docs/webfonts/fa-regular-400.woff2 +0 -0
  179. data/docs/webfonts/fa-solid-900.eot +0 -0
  180. data/docs/webfonts/fa-solid-900.svg +0 -1
  181. data/docs/webfonts/fa-solid-900.ttf +0 -0
  182. data/docs/webfonts/fa-solid-900.woff +0 -0
  183. data/docs/webfonts/fa-solid-900.woff2 +0 -0
  184. data/docs/whoami/index.html +0 -1155
  185. data/docs/whoami/index.xml +0 -12
  186. data/docs-src/archetypes/default.md +0 -6
  187. data/docs-src/config.toml +0 -37
  188. data/docs-src/content/_index.md +0 -40
  189. data/docs-src/content/advanced/_index.md +0 -11
  190. data/docs-src/content/advanced/automatic_updates.md +0 -46
  191. data/docs-src/content/advanced/command_types.md +0 -148
  192. data/docs-src/content/advanced/distributed_state_locking.md +0 -37
  193. data/docs-src/content/advanced/hooks.md +0 -69
  194. data/docs-src/content/advanced/interactive_commands.md +0 -41
  195. data/docs-src/content/advanced/logging.md +0 -39
  196. data/docs-src/content/advanced/remote_execution.md +0 -60
  197. data/docs-src/content/advanced/state_storage.md +0 -120
  198. data/docs-src/content/advanced/user_config_files.md +0 -51
  199. data/docs-src/content/development/_index.md +0 -11
  200. data/docs-src/content/development/changelog.md +0 -199
  201. data/docs-src/content/development/code_of_conduct.md +0 -81
  202. data/docs-src/content/development/contributing.md +0 -88
  203. data/docs-src/content/development/license.md +0 -17
  204. data/docs-src/content/quick_reference/_index.md +0 -180
  205. data/docs-src/content/tutorial/10-getting_started.md +0 -47
  206. data/docs-src/content/tutorial/20-project_layout.md +0 -123
  207. data/docs-src/content/tutorial/30-your_first_command.md +0 -132
  208. data/docs-src/content/tutorial/40-options_parameters_and_arguments.md +0 -282
  209. data/docs-src/content/tutorial/50-publishing.md +0 -53
  210. data/docs-src/content/tutorial/_index.md +0 -11
  211. data/docs-src/content/whoami/_index.md +0 -34
  212. data/docs-src/layouts/partials/logo.html +0 -3
  213. data/docs-src/makesite.sh +0 -40
  214. data/docs-src/mkdocs-archived.tar.gz +0 -0
  215. data/docs-src/runsite.sh +0 -8
  216. data/docs-src/themes/hugo-theme-learn/.editorconfig +0 -16
  217. data/docs-src/themes/hugo-theme-learn/.gitignore +0 -3
  218. data/docs-src/themes/hugo-theme-learn/.grenrc.yml +0 -25
  219. data/docs-src/themes/hugo-theme-learn/CHANGELOG.md +0 -226
  220. data/docs-src/themes/hugo-theme-learn/LICENSE.md +0 -22
  221. data/docs-src/themes/hugo-theme-learn/README.md +0 -97
  222. data/docs-src/themes/hugo-theme-learn/archetypes/chapter.md +0 -13
  223. data/docs-src/themes/hugo-theme-learn/archetypes/default.md +0 -7
  224. data/docs-src/themes/hugo-theme-learn/exampleSite/LICENSE.md +0 -20
  225. data/docs-src/themes/hugo-theme-learn/exampleSite/config.toml +0 -102
  226. data/docs-src/themes/hugo-theme-learn/exampleSite/content/_index.en.md +0 -41
  227. data/docs-src/themes/hugo-theme-learn/exampleSite/content/_index.fr.md +0 -43
  228. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/_index.en.md +0 -12
  229. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/_index.fr.md +0 -12
  230. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/_index.zh.md +0 -12
  231. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/configuration/_index.en.md +0 -60
  232. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/configuration/_index.fr.md +0 -56
  233. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/installation/_index.en.md +0 -102
  234. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/installation/_index.fr.md +0 -100
  235. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/installation/images/chapter.png +0 -0
  236. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/requirements/_index.en.md +0 -11
  237. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/requirements/_index.fr.md +0 -11
  238. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/requirements/images/magic.gif +0 -0
  239. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/_index.en.md +0 -194
  240. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/_index.fr.md +0 -194
  241. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/blue-variant.png +0 -0
  242. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/green-variant.png +0 -0
  243. data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/red-variant.png +0 -0
  244. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/_index.en.md +0 -12
  245. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/_index.fr.md +0 -12
  246. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/archetypes.en.md +0 -57
  247. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/archetypes.fr.md +0 -57
  248. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/i18n/_index.en.md +0 -78
  249. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/i18n/_index.fr.md +0 -78
  250. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/i18n/images/i18n-menu.gif +0 -0
  251. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/icons.en.md +0 -41
  252. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/markdown.en.md +0 -692
  253. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/markdown.fr.md +0 -666
  254. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/menushortcuts.en.md +0 -109
  255. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/menushortcuts.fr.md +0 -109
  256. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/_index.en.md +0 -166
  257. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/_index.fr.md +0 -146
  258. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/frontmatter-icon.png +0 -0
  259. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/pages-chapter.png +0 -0
  260. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/pages-default.png +0 -0
  261. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/syntaxhighlight.en.md +0 -89
  262. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/tags.en.md +0 -39
  263. data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/tags.fr.md +0 -40
  264. data/docs-src/themes/hugo-theme-learn/exampleSite/content/credits.en.md +0 -28
  265. data/docs-src/themes/hugo-theme-learn/exampleSite/content/credits.fr.md +0 -28
  266. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/_index.en.md +0 -16
  267. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/_index.fr.md +0 -16
  268. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/BachGavotteShort.mp3 +0 -0
  269. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/Carroll_AliceAuPaysDesMerveilles.pdf +0 -0
  270. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/adivorciarsetoca00cape.pdf +0 -0
  271. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/hugo.png +0 -0
  272. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/movieselectricsheep-flock-244-32500-2.mp4 +0 -0
  273. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.md +0 -85
  274. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/BachGavotteShort.mp3 +0 -0
  275. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/Carroll_AliceAuPaysDesMerveilles.pdf +0 -0
  276. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/adivorciarsetoca00cape.pdf +0 -0
  277. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/hugo.png +0 -0
  278. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/movieselectricsheep-flock-244-32500-2.mp4 +0 -0
  279. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.md +0 -85
  280. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/button.en.md +0 -16
  281. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/button.fr.md +0 -16
  282. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/_index.en.md +0 -45
  283. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/_index.fr.md +0 -45
  284. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/_index.en.md +0 -6
  285. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/_index.fr.md +0 -6
  286. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/_index.en.md +0 -6
  287. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/_index.fr.md +0 -6
  288. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/_index.en.md +0 -6
  289. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/_index.fr.md +0 -6
  290. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/_index.en.md +0 -6
  291. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/_index.fr.md +0 -6
  292. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/children-1-1-1-1-1/_index.en.md +0 -6
  293. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/children-1-1-1/children-1-1-1-1/children-1-1-1-1-1/_index.fr.md +0 -6
  294. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/_index.en.md +0 -11
  295. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/_index.fr.md +0 -11
  296. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/test3.en.md +0 -6
  297. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/test3.fr.md +0 -6
  298. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-3/_index.en.md +0 -6
  299. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-3/_index.fr.md +0 -6
  300. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-4/_index.en.md +0 -7
  301. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-4/_index.fr.md +0 -7
  302. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/test.en.md +0 -6
  303. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/test.fr.md +0 -6
  304. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/expand.en.md +0 -45
  305. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/expand.fr.md +0 -45
  306. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/mermaid.en.md +0 -283
  307. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/mermaid.fr.md +0 -283
  308. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/notice.en.md +0 -62
  309. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/notice.fr.md +0 -62
  310. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/siteparam.en.md +0 -23
  311. data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/siteparam.fr.md +0 -23
  312. data/docs-src/themes/hugo-theme-learn/exampleSite/content/showcase.en.md +0 -13
  313. data/docs-src/themes/hugo-theme-learn/exampleSite/content/showcase.fr.md +0 -14
  314. data/docs-src/themes/hugo-theme-learn/exampleSite/layouts/partials/custom-footer.html +0 -10
  315. data/docs-src/themes/hugo-theme-learn/exampleSite/layouts/partials/logo.html +0 -39
  316. data/docs-src/themes/hugo-theme-learn/exampleSite/layouts/partials/menu-footer.html +0 -14
  317. data/docs-src/themes/hugo-theme-learn/exampleSite/layouts/shortcodes/ghcontributors.html +0 -31
  318. data/docs-src/themes/hugo-theme-learn/exampleSite/static/css/theme-mine.css +0 -104
  319. data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.eot +0 -0
  320. data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.svg +0 -1
  321. data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.ttf +0 -0
  322. data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.woff +0 -0
  323. data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.woff2 +0 -0
  324. data/docs-src/themes/hugo-theme-learn/exampleSite/static/images/showcase/inteliver_docs.png +0 -0
  325. data/docs-src/themes/hugo-theme-learn/exampleSite/static/images/showcase/tat.png +0 -0
  326. data/docs-src/themes/hugo-theme-learn/exampleSite/static/images/showcase/tshark_dev.png +0 -0
  327. data/docs-src/themes/hugo-theme-learn/i18n/ar.toml +0 -26
  328. data/docs-src/themes/hugo-theme-learn/i18n/de.toml +0 -26
  329. data/docs-src/themes/hugo-theme-learn/i18n/en.toml +0 -26
  330. data/docs-src/themes/hugo-theme-learn/i18n/es.toml +0 -26
  331. data/docs-src/themes/hugo-theme-learn/i18n/fr.toml +0 -26
  332. data/docs-src/themes/hugo-theme-learn/i18n/hi.toml +0 -26
  333. data/docs-src/themes/hugo-theme-learn/i18n/id.toml +0 -26
  334. data/docs-src/themes/hugo-theme-learn/i18n/ja.toml +0 -26
  335. data/docs-src/themes/hugo-theme-learn/i18n/nl.toml +0 -26
  336. data/docs-src/themes/hugo-theme-learn/i18n/pt.toml +0 -26
  337. data/docs-src/themes/hugo-theme-learn/i18n/ru.toml +0 -26
  338. data/docs-src/themes/hugo-theme-learn/i18n/tr.toml +0 -26
  339. data/docs-src/themes/hugo-theme-learn/i18n/zh-cn.toml +0 -26
  340. data/docs-src/themes/hugo-theme-learn/images/screenshot.png +0 -0
  341. data/docs-src/themes/hugo-theme-learn/images/tn.png +0 -0
  342. data/docs-src/themes/hugo-theme-learn/layouts/404.html +0 -56
  343. data/docs-src/themes/hugo-theme-learn/layouts/_default/list.html +0 -22
  344. data/docs-src/themes/hugo-theme-learn/layouts/_default/single.html +0 -12
  345. data/docs-src/themes/hugo-theme-learn/layouts/index.html +0 -31
  346. data/docs-src/themes/hugo-theme-learn/layouts/index.json +0 -12
  347. data/docs-src/themes/hugo-theme-learn/layouts/partials/custom-comments.html +0 -3
  348. data/docs-src/themes/hugo-theme-learn/layouts/partials/custom-footer.html +0 -5
  349. data/docs-src/themes/hugo-theme-learn/layouts/partials/custom-header.html +0 -5
  350. data/docs-src/themes/hugo-theme-learn/layouts/partials/favicon.html +0 -1
  351. data/docs-src/themes/hugo-theme-learn/layouts/partials/footer.html +0 -77
  352. data/docs-src/themes/hugo-theme-learn/layouts/partials/header.html +0 -111
  353. data/docs-src/themes/hugo-theme-learn/layouts/partials/logo.html +0 -19
  354. data/docs-src/themes/hugo-theme-learn/layouts/partials/menu-footer.html +0 -1
  355. data/docs-src/themes/hugo-theme-learn/layouts/partials/menu.html +0 -151
  356. data/docs-src/themes/hugo-theme-learn/layouts/partials/meta.html +0 -2
  357. data/docs-src/themes/hugo-theme-learn/layouts/partials/search.html +0 -16
  358. data/docs-src/themes/hugo-theme-learn/layouts/partials/tags.html +0 -7
  359. data/docs-src/themes/hugo-theme-learn/layouts/partials/toc.html +0 -5
  360. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/attachments.html +0 -36
  361. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/button.html +0 -14
  362. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/children.html +0 -101
  363. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/expand.html +0 -17
  364. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/mermaid.html +0 -2
  365. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/notice.html +0 -2
  366. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/ref.html +0 -14
  367. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/relref.html +0 -14
  368. data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/siteparam.html +0 -7
  369. data/docs-src/themes/hugo-theme-learn/netlify.toml +0 -23
  370. data/docs-src/themes/hugo-theme-learn/static/css/atom-one-dark-reasonable.css +0 -77
  371. data/docs-src/themes/hugo-theme-learn/static/css/auto-complete.css +0 -47
  372. data/docs-src/themes/hugo-theme-learn/static/css/featherlight.min.css +0 -8
  373. data/docs-src/themes/hugo-theme-learn/static/css/fontawesome-all.min.css +0 -1
  374. data/docs-src/themes/hugo-theme-learn/static/css/hugo-theme.css +0 -254
  375. data/docs-src/themes/hugo-theme-learn/static/css/hybrid.css +0 -102
  376. data/docs-src/themes/hugo-theme-learn/static/css/nucleus.css +0 -615
  377. data/docs-src/themes/hugo-theme-learn/static/css/perfect-scrollbar.min.css +0 -2
  378. data/docs-src/themes/hugo-theme-learn/static/css/tags.css +0 -49
  379. data/docs-src/themes/hugo-theme-learn/static/css/theme-blue.css +0 -111
  380. data/docs-src/themes/hugo-theme-learn/static/css/theme-green.css +0 -111
  381. data/docs-src/themes/hugo-theme-learn/static/css/theme-red.css +0 -111
  382. data/docs-src/themes/hugo-theme-learn/static/css/theme.css +0 -1136
  383. data/docs-src/themes/hugo-theme-learn/static/fonts/Inconsolata.eot +0 -0
  384. data/docs-src/themes/hugo-theme-learn/static/fonts/Inconsolata.svg +0 -1
  385. data/docs-src/themes/hugo-theme-learn/static/fonts/Inconsolata.ttf +0 -0
  386. data/docs-src/themes/hugo-theme-learn/static/fonts/Inconsolata.woff +0 -0
  387. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.eot +0 -0
  388. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.svg +0 -1
  389. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.ttf +0 -0
  390. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.woff +0 -0
  391. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.woff2 +0 -0
  392. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.eot +0 -0
  393. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.svg +0 -1
  394. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.ttf +0 -0
  395. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.woff +0 -0
  396. data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.woff2 +0 -0
  397. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.eot +0 -0
  398. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.svg +0 -1
  399. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.ttf +0 -0
  400. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.woff +0 -0
  401. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.woff2 +0 -0
  402. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.eot +0 -0
  403. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.svg +0 -1
  404. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.ttf +0 -0
  405. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.woff +0 -0
  406. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.woff2 +0 -0
  407. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.eot +0 -0
  408. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.svg +0 -1
  409. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.ttf +0 -0
  410. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.woff +0 -0
  411. data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.woff2 +0 -0
  412. data/docs-src/themes/hugo-theme-learn/static/images/clippy.svg +0 -1
  413. data/docs-src/themes/hugo-theme-learn/static/images/favicon.png +0 -0
  414. data/docs-src/themes/hugo-theme-learn/static/images/gopher-404.jpg +0 -0
  415. data/docs-src/themes/hugo-theme-learn/static/js/auto-complete.js +0 -3
  416. data/docs-src/themes/hugo-theme-learn/static/js/clipboard.min.js +0 -7
  417. data/docs-src/themes/hugo-theme-learn/static/js/featherlight.min.js +0 -9
  418. data/docs-src/themes/hugo-theme-learn/static/js/highlight.pack.js +0 -6
  419. data/docs-src/themes/hugo-theme-learn/static/js/hugo-learn.js +0 -94
  420. data/docs-src/themes/hugo-theme-learn/static/js/jquery-3.3.1.min.js +0 -2
  421. data/docs-src/themes/hugo-theme-learn/static/js/jquery.sticky.js +0 -288
  422. data/docs-src/themes/hugo-theme-learn/static/js/learn.js +0 -459
  423. data/docs-src/themes/hugo-theme-learn/static/js/lunr.min.js +0 -6
  424. data/docs-src/themes/hugo-theme-learn/static/js/modernizr.custom-3.6.0.js +0 -3
  425. data/docs-src/themes/hugo-theme-learn/static/js/perfect-scrollbar.jquery.min.js +0 -2
  426. data/docs-src/themes/hugo-theme-learn/static/js/perfect-scrollbar.min.js +0 -2
  427. data/docs-src/themes/hugo-theme-learn/static/js/search.js +0 -93
  428. data/docs-src/themes/hugo-theme-learn/static/mermaid/mermaid.css +0 -277
  429. data/docs-src/themes/hugo-theme-learn/static/mermaid/mermaid.dark.css +0 -278
  430. data/docs-src/themes/hugo-theme-learn/static/mermaid/mermaid.forest.css +0 -356
  431. data/docs-src/themes/hugo-theme-learn/static/mermaid/mermaid.js +0 -8
  432. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.eot +0 -0
  433. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.svg +0 -1
  434. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.ttf +0 -0
  435. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.woff +0 -0
  436. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.woff2 +0 -0
  437. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.eot +0 -0
  438. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.svg +0 -1
  439. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.ttf +0 -0
  440. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.woff +0 -0
  441. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.woff2 +0 -0
  442. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.eot +0 -0
  443. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.svg +0 -1
  444. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.ttf +0 -0
  445. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.woff +0 -0
  446. data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.woff2 +0 -0
  447. data/docs-src/themes/hugo-theme-learn/theme.toml +0 -21
  448. data/docs-src/themes/hugo-theme-learn/wercker.yml +0 -16
  449. data/lib/rbcli/configuration/configurate.rb +0 -85
  450. data/lib/rbcli/configuration/configurate_blocks/hooks.rb +0 -52
  451. data/lib/rbcli/configuration/configurate_blocks/me.rb +0 -122
  452. data/lib/rbcli/configuration/configurate_blocks/storage.rb +0 -50
  453. data/lib/rbcli/engine/command.rb +0 -251
  454. data/lib/rbcli/engine/load_project.rb +0 -45
  455. data/lib/rbcli/engine/parser.rb +0 -116
  456. data/lib/rbcli/features/autoupdate/common/autoupdate.rb +0 -50
  457. data/lib/rbcli/features/autoupdate/gem_updater.rb +0 -62
  458. data/lib/rbcli/features/autoupdate/github_updater.rb +0 -76
  459. data/lib/rbcli/features/logging.rb +0 -98
  460. data/lib/rbcli/features/remote_exec.rb +0 -187
  461. data/lib/rbcli/features/scriptwrapper.rb +0 -75
  462. data/lib/rbcli/features/userconfig.rb +0 -163
  463. data/lib/rbcli/state_storage/common/state_storage.rb +0 -138
  464. data/lib/rbcli/state_storage/localstate.rb +0 -77
  465. data/lib/rbcli/state_storage/placeholders.rb +0 -29
  466. data/lib/rbcli/state_storage/remote_state_connectors/dynamodb.rb +0 -272
  467. data/lib/rbcli/state_storage/remotestate_dynamodb.rb +0 -115
  468. data/lib/rbcli/util/msg.rb +0 -55
  469. data/lib/rbcli/util/string_colorize.rb +0 -45
  470. data/lib/rbcli-tool/generators.rb +0 -105
  471. data/lib/rbcli-tool/mdless_fix.rb +0 -406
  472. data/lib/rbcli-tool/project.rb +0 -120
  473. data/lib/rbcli-tool/util.rb +0 -70
  474. data/lib/rbcli-tool.rb +0 -37
  475. data/rbcli.gemspec +0 -73
  476. data/skeletons/micro/executable +0 -132
  477. data/skeletons/mini/executable +0 -247
  478. data/skeletons/project/.gitignore +0 -11
  479. data/skeletons/project/.rakeTasks +0 -7
  480. data/skeletons/project/.rbcli +0 -0
  481. data/skeletons/project/.rspec +0 -3
  482. data/skeletons/project/CODE_OF_CONDUCT.md +0 -74
  483. data/skeletons/project/Gemfile +0 -6
  484. data/skeletons/project/README.md +0 -46
  485. data/skeletons/project/Rakefile +0 -6
  486. data/skeletons/project/application/commands/command.erb +0 -28
  487. data/skeletons/project/application/commands/script.erb +0 -30
  488. data/skeletons/project/application/commands/scripts/script.sh +0 -60
  489. data/skeletons/project/application/options.rb +0 -34
  490. data/skeletons/project/config/autoupdate.rb +0 -35
  491. data/skeletons/project/config/general.rb +0 -17
  492. data/skeletons/project/config/logging.rb +0 -19
  493. data/skeletons/project/config/storage.rb +0 -35
  494. data/skeletons/project/config/userspace.rb +0 -33
  495. data/skeletons/project/config/version.rb +0 -3
  496. data/skeletons/project/exe/executable +0 -53
  497. data/skeletons/project/hooks/default_action.rb +0 -16
  498. data/skeletons/project/hooks/first_run.rb +0 -16
  499. data/skeletons/project/hooks/post_execution.rb +0 -14
  500. data/skeletons/project/hooks/pre_execution.rb +0 -14
  501. data/skeletons/project/lib/lib.erb +0 -9
  502. data/skeletons/project/spec/spec_helper.rb +0 -14
  503. data/skeletons/project/spec/untitled_spec.rb +0 -9
  504. data/skeletons/project/untitled.gemspec +0 -40
  505. data/skeletons/project/userconf/user_defaults.yml +0 -6
  506. /data/{docs-src/.hugo_build.lock → lib/rbcli/plugins/.keep} +0 -0
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+ ##################################################################################
3
+ # Rbcli -- A framework for developing command line applications in Ruby #
4
+ # Copyright (C) 2024 Andrew Khoury <akhoury@live.com> #
5
+ ##################################################################################
6
+ %w(logger json colorize).each { |req| require req }
7
+ require_relative 'lolcat/lol'
8
+
9
+ # noinspection RubyClassVariableUsageInspection
10
+ class Rbcli::Logger
11
+ EXECUTABLE ||= File.basename($0).gsub(/\.[^.]+$/, '')
12
+ @max_prog_len = 0
13
+ @original_formatter = Logger::Formatter.new
14
+ @@formatters = {
15
+ display: Proc.new { |severity, _datetime, _progname, msg|
16
+ severity == 'INFO' ? msg : "#{colorlevel(severity)}#{(' ' * (5 - severity.length))} || #{msg}"
17
+ },
18
+ simple: Proc.new { |severity, _datetime, progname, msg|
19
+ @max_prog_len = (@max_prog_len > progname.length) ? @max_prog_len : progname.length unless progname.nil?
20
+ "#{colorlevel(severity)}#{(' ' * (5 - severity.length))} || #{progname || (' ' * @max_prog_len)} || #{msg}"
21
+ },
22
+ full: Proc.new { |severity, datetime, progname, msg|
23
+ @max_prog_len = (@max_prog_len > progname.length) ? @max_prog_len : progname.length unless progname.nil?
24
+ "#{datetime.strftime("%Y-%m-%d %H:%M:%S.%6N")} || #{EXECUTABLE} || #{progname || (' ' * @max_prog_len)} || #{colorlevel(severity)}#{(' ' * (5 - severity.length))} || #{msg}"
25
+ },
26
+ apache: Proc.new { |severity, datetime, progname, msg|
27
+ "[#{datetime.strftime("%a %b %d %H:%M:%S.%6N %Y")}] [#{severity}] [#{EXECUTABLE}] [#{progname}] #{msg.gsub(/\e\[([;\d]+)?m/, '')}"
28
+ },
29
+ json: Proc.new { |severity, datetime, progname, msg|
30
+ { timestamp: datetime.strftime("%Y-%m-%d %H:%M:%S.%N"), severity: severity, application: EXECUTABLE, module: progname, message: msg.gsub(/\e\[([;\d]+)?m/, '') }.to_json
31
+ },
32
+ ruby: Proc.new { |severity, datetime, progname, msg|
33
+ @original_formatter.call(severity, datetime, progname, msg).chomp
34
+ },
35
+ lolcat: Proc.new { |severity, _datetime, _progname, msg|
36
+ "#{colorlevel(severity)}#{(' ' * (5 - severity.length))} || #{Lol.makestr(msg, { spread: 3, freq: 0.1, slope: 4, invert: false, truecolor: true })}"
37
+ }
38
+ }
39
+
40
+ def self.formats
41
+ @@formatters.keys
42
+ end
43
+
44
+ def initialize(target: STDOUT, level: :info, format: :display)
45
+ self.target(target)
46
+ self.level(level)
47
+ self.format(format)
48
+ end
49
+
50
+ def target target
51
+ @logger = Logger.new(target_select(target))
52
+ @logger.formatter = Proc.new { |severity, datetime, progname, msg|
53
+ msg = msg.to_s unless msg.is_a?(String)
54
+ msg.lines.map { |line| @@formatters[@format].call(severity, datetime, progname, line.chomp) }.join("\n") + "\n"
55
+ }
56
+ end
57
+
58
+ def level slug = nil
59
+ return @logger.level if slug.nil?
60
+ @logger.level = logger_level(slug)
61
+ end
62
+
63
+ def format slug = nil
64
+ return @format if slug.nil?
65
+ @format = slug if @@formatters.key?(slug)
66
+ end
67
+
68
+ def add_format slug, prok
69
+ @@formatters[slug] = prok
70
+ end
71
+
72
+ def add level, message, progname = nil, &block
73
+ @logger.add(logger_level(level), message, progname, &block)
74
+ end
75
+
76
+ def debug message, progname = nil, &block
77
+ self.add(Logger::DEBUG, message, progname, &block)
78
+ end
79
+
80
+ def info message, progname = nil, &block
81
+ self.add(Logger::INFO, message, progname, &block)
82
+ end
83
+
84
+ def warn message, progname = nil, &block
85
+ self.add(Logger::WARN, message, progname, &block)
86
+ end
87
+
88
+ def error message, progname = nil, &block
89
+ self.add(Logger::ERROR, message, progname, &block)
90
+ end
91
+
92
+ def fatal message, progname = nil, &block
93
+ self.add(Logger::FATAL, message, progname, &block)
94
+ end
95
+
96
+ def unknown message, progname = nil, &block
97
+ self.add(Logger::UNKNOWN, message, progname, &block)
98
+ end
99
+
100
+ %w(debug, info, warn, error, fatal, unknown).each do |l|
101
+ self.define_method(l.to_sym) do |message, progname = nil, &block|
102
+ self.send(:add, l.to_sym, message, progname, &block)
103
+ end
104
+ end
105
+
106
+ private
107
+
108
+ def self.colorlevel level
109
+ level.colorize(
110
+ {
111
+ 'DEBUG' => :blue,
112
+ 'INFO' => :green,
113
+ 'WARN' => :yellow,
114
+ 'ERROR' => :red,
115
+ 'FATAL' => { color: :light_red, mode: :bold },
116
+ 'ANY' => :cyan
117
+ }[level.to_s.upcase] || :default)
118
+ end
119
+
120
+ def target_select slug
121
+ {
122
+ stdout: STDOUT,
123
+ stderr: STDERR
124
+ }[slug] || slug
125
+ end
126
+
127
+ def logger_level slug
128
+ if slug.is_a?(String) || slug.is_a?(Symbol)
129
+ {
130
+ debug: Logger::DEBUG,
131
+ info: Logger::INFO,
132
+ warn: Logger::WARN,
133
+ error: Logger::ERROR,
134
+ fatal: Logger::FATAL,
135
+ unknown: Logger::UNKNOWN,
136
+ any: -1
137
+ }[slug.to_s.downcase.to_sym] || Logger::UNKNOWN
138
+ else
139
+ slug
140
+ end
141
+ end
142
+ end
143
+
144
+ module Rbcli
145
+ @logger = nil
146
+
147
+ def self.start_logger target: STDOUT, level: :info, format: :display
148
+ @logger = Rbcli::Logger.new(target: target, level: level, format: format)
149
+ end
150
+
151
+ def self.log
152
+ self.start_logger if @logger.nil?
153
+ @logger
154
+ end
155
+ end
@@ -0,0 +1,71 @@
1
+ # This file was obtained and modified from: https://github.com/busyloop/lolcat/blob/master/lib/lolcat/lol.rb
2
+
3
+ # Copyright (c) 2016, moe@busyloop.net
4
+ # All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions are met:
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above copyright
11
+ # notice, this list of conditions and the following disclaimer in the
12
+ # documentation and/or other materials provided with the distribution.
13
+ # * Neither the name of the lolcat nor the
14
+ # names of its contributors may be used to endorse or promote products
15
+ # derived from this software without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18
+ # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
+ # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
+ # DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
21
+ # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
+ # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
+ # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
+ # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ require 'paint'
29
+
30
+ module Lol
31
+ ANSI_ESCAPE = /((?:\e(?:[ -\/]+.|[\]PX^_][^\a\e]*|\[[0-?]*.|.))*)(.?)/m
32
+
33
+ @os = 0
34
+ @paint_init = false
35
+
36
+ def self.makestr(str, opts = {})
37
+ @os = rand(256) unless @paint_init
38
+ set_mode(opts[:truecolor]) unless @paint_init
39
+
40
+ result = ''
41
+ filtered = str.scan(ANSI_ESCAPE)
42
+ filtered.each_with_index do |c, i|
43
+ # color = rainbow(opts[:freq], @os + i / opts[:spread])
44
+ color = rainbow(opts[:freq], (@os + i) / opts[:spread])
45
+ if opts[:invert] then
46
+ result += c[0] + Paint.color(nil, color) + c[1] + "\e[49m"
47
+ else
48
+ result += c[0] + Paint.color(color) + c[1] + "\e[39m"
49
+ end
50
+ end
51
+ @os += opts[:slope]
52
+ result
53
+ end
54
+
55
+ private
56
+
57
+ def self.set_mode(truecolor)
58
+ # @paint_mode_detected = Paint.mode
59
+ @paint_mode_detected = %w[truecolor 24bit].include?(ENV['COLORTERM']) ? 0xffffff : 256
60
+ Paint.mode = truecolor ? 0xffffff : @paint_mode_detected
61
+ STDERR.puts "DEBUG: Paint.mode = #{Paint.mode} (detected: #{@paint_mode_detected})" if ENV['LOLCAT_DEBUG']
62
+ @paint_init = true
63
+ end
64
+
65
+ def self.rainbow(freq, i)
66
+ red = Math.sin(freq * i + 0) * 127 + 128
67
+ green = Math.sin(freq * i + 2 * Math::PI / 3) * 127 + 128
68
+ blue = Math.sin(freq * i + 4 * Math::PI / 3) * 127 + 128
69
+ "#%02X%02X%02X" % [red, green, blue]
70
+ end
71
+ end
@@ -0,0 +1,40 @@
1
+ Rbcli::Configurate.logger do
2
+ <%- if @showdocs -%>
3
+ ##### Logger (Optional) #####
4
+ # The Rbcli logger is a wrapper around the standard Ruby `Logger` library
5
+ # It is recommended that - unless you want to use specialized output libraries (such as ncurses) - that all
6
+ # of your application output is directed through the logger. This will allow for easy formatting and redirection
7
+ # no matter how your application is run.
8
+ #
9
+ # Valid targets are: :stdout, :stderr, "/path/to/a/file", or an IO or StringIO object (Default: :stdout)
10
+ # Valid levels are: :debug, :info, :warn, :error, :fatal, :unknown, :any (Default: :info)
11
+ # Valid formats are: :display, :simple, :full, :ruby, :json, :apache, :lolcat (Default: :display)
12
+ #
13
+ # The first three formats are designed to cover most use cases:
14
+ # display: For display on a terminal, with user interaction
15
+ # simple: For display on a terminal, for a developer
16
+ # full: For logging to a file, or using log collection software
17
+ # The next three are for specialized integrations in case you already have log collection configured:
18
+ # ruby: Default ruby logger format
19
+ # json: Each line is a JSON object
20
+ # apache: Follows the standard Apache log format
21
+ # As for :lolcat... if you can't guess what it does then give it a shot
22
+ <%- end -%>
23
+ logger target: :stdout, level: :info, format: :display
24
+ <%- if @showdocs -%>
25
+ # Custom formats can also be defined here.
26
+ # Declaring a format here will not switch to it. However, if
27
+ # the `format` keyword is used without providing a Proc, it will switch
28
+ # to that format.
29
+ #
30
+ # Format switch: format :json
31
+ # Format definition: format :foo, Proc.new { |severity, datetime, progname, msg| "Foo! " + msg }
32
+ #
33
+ # You can also switch formats mid-execution by calling this method on
34
+ # the logger object itself.
35
+ #
36
+ # Rbcli.log.format :json
37
+ #
38
+ <%- end -%>
39
+ # format :foo, Proc.new { |severity, datetime, progname, msg| "Foo! " + msg }
40
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+ ##################################################################################
3
+ # Rbcli -- A framework for developing command line applications in Ruby #
4
+ # Copyright (C) 2024 Andrew Khoury <akhoury@live.com> #
5
+ ##################################################################################
6
+ module Rbcli::Configurate::Cli
7
+ include Rbcli::Configurable
8
+
9
+ @defaults = {
10
+ appinfo: {
11
+ appname: EXECUTABLE,
12
+ version: nil,
13
+ author: nil,
14
+ email: nil,
15
+ copyright_year: nil,
16
+ license: nil,
17
+ helptext: nil
18
+ }
19
+ }
20
+
21
+ @defaults.keys.each do |namespace|
22
+ @defaults[namespace].each do |key, default|
23
+ Rbcli::Warehouse.set(key, default, namespace)
24
+ self.define_singleton_method(key) do |value|
25
+ Rbcli::Warehouse.set(key, value, namespace)
26
+ end
27
+ end
28
+ end
29
+
30
+ def self.opt * args
31
+ Rbcli::Parser.add_opt *args
32
+ end
33
+ end
@@ -66,7 +66,7 @@ module Optimist
66
66
  else
67
67
  lookup = type.to_sym
68
68
  end
69
- raise ArgumentError, "Unsupported argument type '#{type}', registry lookup '#{lookup}'" unless @registry.has_key?(lookup)
69
+ raise ArgumentError, "Unsupported argument type '#{type}', registry lookup '#{lookup}'" unless @registry.key?(lookup)
70
70
  return @registry[lookup].new
71
71
  end
72
72
 
@@ -116,6 +116,7 @@ module Optimist
116
116
  ## [+:default+] Set the default value for an argument. Without a default value, the hash returned by #parse (and thus Optimist::options) will have a +nil+ value for this key unless the argument is given on the commandline. The argument type is derived automatically from the class of the default value given, so specifying a +:type+ is not necessary if a +:default+ is given. (But see below for an important caveat when +:multi+: is specified too.) If the argument is a flag, and the default is set to +true+, then if it is specified on the the commandline the value will be +false+.
117
117
  ## [+:required+] If set to +true+, the argument must be provided on the commandline.
118
118
  ## [+:multi+] If set to +true+, allows multiple occurrences of the option on the commandline. Otherwise, only a single instance of the option is allowed. (Note that this is different from taking multiple parameters. See below.)
119
+ ## [+:permitted+] Specify an Array of permitted values for an option. If the user provides a value outside this list, an error is thrown.
119
120
  ##
120
121
  ## Note that there are two types of argument multiplicity: an argument
121
122
  ## can take multiple values, e.g. "--arg 1 2 3". An argument can also
@@ -184,6 +185,7 @@ module Optimist
184
185
  def banner(s)
185
186
  @order << [:text, s]
186
187
  end
188
+
187
189
  alias_method :text, :banner
188
190
 
189
191
  ## Marks two (or more!) options as requiring each other. Only handles
@@ -242,7 +244,7 @@ module Optimist
242
244
  vals = {}
243
245
  required = {}
244
246
 
245
- opt :version, "Print version and exit" if @version && ! (@specs[:version] || @long["version"])
247
+ opt :version, "Print version and exit" if @version && !(@specs[:version] || @long["version"])
246
248
  opt :help, "Show this message" unless @specs[:help] || @long["help"]
247
249
 
248
250
  @specs.each do |sym, opts|
@@ -265,9 +267,9 @@ module Optimist
265
267
  end
266
268
 
267
269
  sym = case arg
268
- when /^-([^-])$/ then @short[$1]
269
- when /^--([^-]\S*)$/ then @long[$1] || @long["no-#{$1}"]
270
- else raise CommandlineError, "invalid argument syntax: '#{arg}'"
270
+ when /^-([^-])$/ then @short[$1]
271
+ when /^--([^-]\S*)$/ then @long[$1] || @long["no-#{$1}"]
272
+ else raise CommandlineError, "invalid argument syntax: '#{arg}'"
271
273
  end
272
274
 
273
275
  sym = nil if arg =~ /--no-/ # explicitly invalidate --no-no- arguments
@@ -294,10 +296,10 @@ module Optimist
294
296
 
295
297
  unless params.empty?
296
298
  if @specs[sym].single_arg?
297
- given_args[sym][:params] << params[0, 1] # take the first parameter
299
+ given_args[sym][:params] << params[0, 1] # take the first parameter
298
300
  num_params_taken = 1
299
301
  elsif @specs[sym].multi_arg?
300
- given_args[sym][:params] << params # take all the parameters
302
+ given_args[sym][:params] << params # take all the parameters
301
303
  num_params_taken = params.size
302
304
  end
303
305
  end
@@ -348,13 +350,14 @@ module Optimist
348
350
  vals[sym] = opts.parse(params, negative_given)
349
351
 
350
352
  if opts.single_arg?
351
- if opts.multi? # multiple options, each with a single parameter
353
+ if opts.multi? # multiple options, each with a single parameter
352
354
  vals[sym] = vals[sym].map { |p| p[0] }
353
- else # single parameter
355
+ else
356
+ # single parameter
354
357
  vals[sym] = vals[sym][0][0]
355
358
  end
356
359
  elsif opts.multi_arg? && !opts.multi?
357
- vals[sym] = vals[sym][0] # single option, with multiple parameters
360
+ vals[sym] = vals[sym][0] # single option, with multiple parameters
358
361
  end
359
362
  # else: multiple options, with multiple parameters
360
363
 
@@ -372,6 +375,7 @@ module Optimist
372
375
  self[m] || self[m.to_s]
373
376
  end
374
377
  end
378
+
375
379
  vals
376
380
  end
377
381
 
@@ -429,9 +433,11 @@ module Optimist
429
433
  rescue Errno::ENOENT
430
434
  80
431
435
  end
436
+
432
437
  private :legacy_width
433
438
 
434
- def wrap(str, opts = {}) # :nodoc:
439
+ def wrap(str, opts = {})
440
+ # :nodoc:
435
441
  if str == ""
436
442
  [""]
437
443
  else
@@ -587,7 +593,10 @@ module Optimist
587
593
  ## instance_eval but with ability to handle block arguments
588
594
  ## thanks to _why: http://redhanded.hobix.com/inspect/aBlockCostume.html
589
595
  def cloaker(&b)
590
- (class << self; self; end).class_eval do
596
+ (
597
+ class << self
598
+ self;
599
+ end).class_eval do
591
600
  define_method :cloaker_, &b
592
601
  meth = instance_method :cloaker_
593
602
  remove_method :cloaker_
@@ -621,33 +630,55 @@ module Optimist
621
630
  end
622
631
 
623
632
  ## Indicates a flag option, which is an option without an argument
624
- def flag? ; false ; end
633
+ def flag?
634
+ false;
635
+ end
636
+
625
637
  def single_arg?
626
638
  !self.multi_arg? && !self.flag?
627
639
  end
628
640
 
629
- def multi ; @multi_given ; end
641
+ def multi
642
+ @multi_given;
643
+ end
644
+
630
645
  alias multi? multi
631
646
 
632
647
  ## Indicates that this is a multivalued (Array type) argument
633
- def multi_arg? ; false ; end
648
+ def multi_arg?
649
+ false;
650
+ end
651
+
634
652
  ## note: Option-Types with both multi_arg? and flag? false are single-parameter (normal) options.
635
653
 
636
- def array_default? ; self.default.kind_of?(Array) ; end
654
+ def array_default?
655
+ self.default.kind_of?(Array);
656
+ end
637
657
 
638
- def short? ; short && short != :none ; end
658
+ def short?
659
+ short && short != :none;
660
+ end
661
+
662
+ def callback
663
+ opts(:callback);
664
+ end
639
665
 
640
- def callback ; opts(:callback) ; end
641
- def desc ; opts(:desc) ; end
666
+ def desc
667
+ opts(:desc);
668
+ end
642
669
 
643
- def required? ; opts(:required) ; end
670
+ def required?
671
+ opts(:required);
672
+ end
644
673
 
645
674
  def parse(_paramlist, _neg_given)
646
675
  raise NotImplementedError, "parse must be overridden for newly registered type"
647
676
  end
648
677
 
649
678
  # provide type-format string. default to empty, but user should probably override it
650
- def type_format ; "" ; end
679
+ def type_format
680
+ "";
681
+ end
651
682
 
652
683
  def educate
653
684
  (short? ? "-#{short}, " : " ") + "--#{long}" + type_format + (flag? && default ? ", --no-#{long}" : "")
@@ -664,9 +695,9 @@ module Optimist
664
695
  ## Generate the default value string for the educate line
665
696
  private def default_description_str str
666
697
  default_s = case default
667
- when $stdout then '<stdout>'
668
- when $stdin then '<stdin>'
669
- when $stderr then '<stderr>'
698
+ when $stdout then '<stdout>'
699
+ when $stdin then '<stdin>'
700
+ when $stderr then '<stderr>'
670
701
  when Array
671
702
  default.join(', ')
672
703
  else
@@ -680,9 +711,9 @@ module Optimist
680
711
  private def permitted_description_str str
681
712
  permitted_s = permitted.map do |p|
682
713
  case p
683
- when $stdout then '<stdout>'
684
- when $stdin then '<stdin>'
685
- when $stderr then '<stderr>'
714
+ when $stdout then '<stdout>'
715
+ when $stdin then '<stdin>'
716
+ when $stderr then '<stderr>'
686
717
  else
687
718
  p.to_s
688
719
  end
@@ -705,7 +736,7 @@ module Optimist
705
736
  # to +Optimist::opt+. This is trickier in Optimist, than other cmdline
706
737
  # parsers (e.g. Slop) because we allow the +default:+ to be able to
707
738
  # set the option's type.
708
- def self.create(name, desc="", opts={}, settings={})
739
+ def self.create(name, desc = "", opts = {}, settings = {})
709
740
 
710
741
  opttype = Optimist::Parser.registry_getopttype(opts[:type])
711
742
  opttype_from_default = get_klass_from_default(opts, opttype)
@@ -775,17 +806,17 @@ module Optimist
775
806
  lopt = lopt ? lopt.to_s : name.to_s.gsub("_", "-")
776
807
  lopt = case lopt
777
808
  when /^--([^-].*)$/ then $1
778
- when /^[^-]/ then lopt
779
- else raise ArgumentError, "invalid long option name #{lopt.inspect}"
809
+ when /^[^-]/ then lopt
810
+ else raise ArgumentError, "invalid long option name #{lopt.inspect}"
780
811
  end
781
812
  end
782
813
 
783
814
  def self.handle_short_opt(sopt)
784
815
  sopt = sopt.to_s if sopt && sopt != :none
785
816
  sopt = case sopt
786
- when /^-(.)$/ then $1
817
+ when /^-(.)$/ then $1
787
818
  when nil, :none, /^.$/ then sopt
788
- else raise ArgumentError, "invalid short option name '#{sopt.inspect}'"
819
+ else raise ArgumentError, "invalid short option name '#{sopt.inspect}'"
789
820
  end
790
821
 
791
822
  if sopt
@@ -799,11 +830,16 @@ module Optimist
799
830
  # Flag option. Has no arguments. Can be negated with "no-".
800
831
  class BooleanOption < Option
801
832
  register_alias :flag, :bool, :boolean, :trueclass, :falseclass
833
+
802
834
  def initialize
803
835
  super()
804
836
  @default = false
805
837
  end
806
- def flag? ; true ; end
838
+
839
+ def flag?
840
+ true;
841
+ end
842
+
807
843
  def parse(_paramlist, neg_given)
808
844
  return _paramlist[0] if @multi_given
809
845
  return(self.name.to_s =~ /^no_/ ? neg_given : !neg_given)
@@ -813,7 +849,11 @@ module Optimist
813
849
  # Floating point number option class.
814
850
  class FloatOption < Option
815
851
  register_alias :float, :double
816
- def type_format ; "=<f>" ; end
852
+
853
+ def type_format
854
+ "=<f>";
855
+ end
856
+
817
857
  def parse(paramlist, _neg_given)
818
858
  paramlist.map do |pg|
819
859
  pg.map do |param|
@@ -827,7 +867,11 @@ module Optimist
827
867
  # Integer number option class.
828
868
  class IntegerOption < Option
829
869
  register_alias :int, :integer, :fixnum
830
- def type_format ; "=<i>" ; end
870
+
871
+ def type_format
872
+ "=<i>";
873
+ end
874
+
831
875
  def parse(paramlist, _neg_given)
832
876
  paramlist.map do |pg|
833
877
  pg.map do |param|
@@ -843,7 +887,11 @@ module Optimist
843
887
  # in the case of file-paths given to it.
844
888
  class IOOption < Option
845
889
  register_alias :io
846
- def type_format ; "=<filename/uri>" ; end
890
+
891
+ def type_format
892
+ "=<filename/uri>";
893
+ end
894
+
847
895
  def parse(paramlist, _neg_given)
848
896
  paramlist.map do |pg|
849
897
  pg.map do |param|
@@ -865,7 +913,11 @@ module Optimist
865
913
  # Option class for handling Strings.
866
914
  class StringOption < Option
867
915
  register_alias :string
868
- def type_format ; "=<s>" ; end
916
+
917
+ def type_format
918
+ "=<s>";
919
+ end
920
+
869
921
  def parse(paramlist, _neg_given)
870
922
  paramlist.map { |pg| pg.map(&:to_s) }
871
923
  end
@@ -874,7 +926,11 @@ module Optimist
874
926
  # Option for dates. Uses Chronic if it exists.
875
927
  class DateOption < Option
876
928
  register_alias :date
877
- def type_format ; "=<date>" ; end
929
+
930
+ def type_format
931
+ "=<date>";
932
+ end
933
+
878
934
  def parse(paramlist, _neg_given)
879
935
  paramlist.map do |pg|
880
936
  pg.map do |param|
@@ -903,36 +959,66 @@ module Optimist
903
959
  # Option class for handling multiple Integers
904
960
  class IntegerArrayOption < IntegerOption
905
961
  register_alias :fixnums, :ints, :integers
906
- def type_format ; "=<i+>" ; end
907
- def multi_arg? ; true ; end
962
+
963
+ def type_format
964
+ "=<i+>";
965
+ end
966
+
967
+ def multi_arg?
968
+ true;
969
+ end
908
970
  end
909
971
 
910
972
  # Option class for handling multiple Floats
911
973
  class FloatArrayOption < FloatOption
912
974
  register_alias :doubles, :floats
913
- def type_format ; "=<f+>" ; end
914
- def multi_arg? ; true ; end
975
+
976
+ def type_format
977
+ "=<f+>";
978
+ end
979
+
980
+ def multi_arg?
981
+ true;
982
+ end
915
983
  end
916
984
 
917
985
  # Option class for handling multiple Strings
918
986
  class StringArrayOption < StringOption
919
987
  register_alias :strings
920
- def type_format ; "=<s+>" ; end
921
- def multi_arg? ; true ; end
988
+
989
+ def type_format
990
+ "=<s+>";
991
+ end
992
+
993
+ def multi_arg?
994
+ true;
995
+ end
922
996
  end
923
997
 
924
998
  # Option class for handling multiple dates
925
999
  class DateArrayOption < DateOption
926
1000
  register_alias :dates
927
- def type_format ; "=<date+>" ; end
928
- def multi_arg? ; true ; end
1001
+
1002
+ def type_format
1003
+ "=<date+>";
1004
+ end
1005
+
1006
+ def multi_arg?
1007
+ true;
1008
+ end
929
1009
  end
930
1010
 
931
1011
  # Option class for handling Files/URLs via 'open'
932
1012
  class IOArrayOption < IOOption
933
1013
  register_alias :ios
934
- def type_format ; "=<filename/uri+>" ; end
935
- def multi_arg? ; true ; end
1014
+
1015
+ def type_format
1016
+ "=<filename/uri+>";
1017
+ end
1018
+
1019
+ def multi_arg?
1020
+ true;
1021
+ end
936
1022
  end
937
1023
 
938
1024
  ## The easy, syntactic-sugary entry method into Optimist. Creates a Parser,