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.
- checksums.yaml +4 -4
- data/LICENSE.md +9 -0
- data/LICENSE.txt +5 -670
- data/README.md +64 -160
- data/VERSION +1 -0
- data/exe/rbcli +181 -242
- data/lib/rbcli/components/commands/command.rb +120 -0
- data/lib/rbcli/components/commands/command.rb.erb +55 -0
- data/lib/rbcli/components/commands/command_old.rb +105 -0
- data/lib/rbcli/components/commands/script.rb.erb +43 -0
- data/{lib-sh → lib/rbcli/components/commands/scriptwrapper}/lib-rbcli.sh +29 -34
- data/lib/rbcli/components/commands/scriptwrapper/scriptwrapper.rb +64 -0
- data/lib/rbcli/components/config/backend.rb +102 -0
- data/lib/rbcli/components/config/backends/env.rb +67 -0
- data/lib/rbcli/components/config/backends/helpers/deep_assign.rb +47 -0
- data/lib/rbcli/components/config/backends/ini.rb +53 -0
- data/lib/rbcli/components/config/backends/json.rb +32 -0
- data/lib/rbcli/components/config/backends/null.rb +32 -0
- data/lib/rbcli/components/config/backends/toml.rb +38 -0
- data/lib/rbcli/components/config/backends/yaml.rb +31 -0
- data/lib/rbcli/components/config/component.rb +33 -0
- data/lib/rbcli/components/config/config.rb +165 -0
- data/lib/rbcli/components/config/config_of_death.rb +12 -0
- data/lib/rbcli/components/config/template.rb.erb +36 -0
- data/lib/rbcli/components/core/configurate.rb +63 -0
- data/lib/rbcli/components/core/engine.rb +30 -0
- data/lib/rbcli/components/core/warehouse.rb +18 -0
- data/lib/rbcli/components/envvars/component.rb +20 -0
- data/lib/rbcli/components/envvars/template.rb.erb +24 -0
- data/lib/rbcli/components/hooks/component.rb +36 -0
- data/lib/rbcli/components/hooks/template.rb.erb +20 -0
- data/lib/rbcli/components/logger/component.rb +32 -0
- data/lib/rbcli/components/logger/logger.rb +155 -0
- data/lib/rbcli/components/logger/lolcat/lol.rb +71 -0
- data/lib/rbcli/components/logger/template.rb.erb +40 -0
- data/lib/rbcli/components/parser/component.rb +33 -0
- data/lib/rbcli/{util → components/parser/optimist}/optimist.rb +134 -48
- data/lib/rbcli/components/parser/parser.rb +178 -0
- data/lib/rbcli/components/parser/template.rb.erb +35 -0
- data/lib/rbcli/components/updatechecker/common/common.rb +52 -0
- data/lib/rbcli/components/updatechecker/component.rb +42 -0
- data/lib/rbcli/components/updatechecker/gem_checker.rb +40 -0
- data/lib/rbcli/components/updatechecker/github_checker.rb +46 -0
- data/lib/rbcli/components/updatechecker/template.rb.erb +14 -0
- data/lib/rbcli/util/deprecation_warning.rb +41 -55
- data/lib/rbcli/util/errors.rb +12 -0
- data/lib/rbcli/util/exit.rb +12 -0
- data/lib/rbcli/util/hash_deep_symbolize.rb +26 -41
- data/lib/rbcli/util/string_compression.rb +10 -0
- data/lib/rbcli/version.rb +5 -20
- data/lib/rbcli-tool/helpers.rb +58 -0
- data/lib/rbcli-tool/skeletons/gem.rb.erb +17 -0
- data/lib/rbcli-tool/skeletons/portable.rb.erb +48 -0
- data/lib/rbcli.rb +19 -50
- data/sig/rbcli.rbs +9 -0
- metadata +125 -496
- data/.gitignore +0 -60
- data/.rakeTasks +0 -7
- data/.rbenv-gemsets +0 -1
- data/.travis.yml +0 -5
- data/CHANGELOG.md +0 -193
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -6
- data/Gemfile.lock +0 -92
- data/Rakefile +0 -10
- data/bin/console +0 -33
- data/bin/setup +0 -28
- data/docs/404.html +0 -59
- data/docs/advanced/automatic_updates/index.html +0 -1174
- data/docs/advanced/command_types/index.html +0 -1262
- data/docs/advanced/distributed_state_locking/index.html +0 -1176
- data/docs/advanced/hooks/index.html +0 -1192
- data/docs/advanced/index.html +0 -1140
- data/docs/advanced/index.xml +0 -75
- data/docs/advanced/interactive_commands/index.html +0 -1177
- data/docs/advanced/logging/index.html +0 -1184
- data/docs/advanced/remote_execution/index.html +0 -1190
- data/docs/advanced/state_storage/index.html +0 -1281
- data/docs/advanced/user_config_files/index.html +0 -1209
- data/docs/categories/index.html +0 -1146
- data/docs/categories/index.xml +0 -11
- data/docs/css/atom-one-dark-reasonable.css +0 -77
- data/docs/css/auto-complete.css +0 -47
- data/docs/css/featherlight.min.css +0 -8
- data/docs/css/fontawesome-all.min.css +0 -1
- data/docs/css/hugo-theme.css +0 -254
- data/docs/css/hybrid.css +0 -102
- data/docs/css/nucleus.css +0 -615
- data/docs/css/perfect-scrollbar.min.css +0 -2
- data/docs/css/tags.css +0 -49
- data/docs/css/theme-blue.css +0 -111
- data/docs/css/theme-green.css +0 -111
- data/docs/css/theme-red.css +0 -111
- data/docs/css/theme.css +0 -1136
- data/docs/development/changelog/index.html +0 -1420
- data/docs/development/code_of_conduct/index.html +0 -1222
- data/docs/development/contributing/index.html +0 -1201
- data/docs/development/index.html +0 -1140
- data/docs/development/index.xml +0 -40
- data/docs/development/license/index.html +0 -1165
- data/docs/fonts/Inconsolata.eot +0 -0
- data/docs/fonts/Inconsolata.svg +0 -1
- data/docs/fonts/Inconsolata.ttf +0 -0
- data/docs/fonts/Inconsolata.woff +0 -0
- data/docs/fonts/Novecentosanswide-Normal-webfont.eot +0 -0
- data/docs/fonts/Novecentosanswide-Normal-webfont.svg +0 -1
- data/docs/fonts/Novecentosanswide-Normal-webfont.ttf +0 -0
- data/docs/fonts/Novecentosanswide-Normal-webfont.woff +0 -0
- data/docs/fonts/Novecentosanswide-Normal-webfont.woff2 +0 -0
- data/docs/fonts/Novecentosanswide-UltraLight-webfont.eot +0 -0
- data/docs/fonts/Novecentosanswide-UltraLight-webfont.svg +0 -1
- data/docs/fonts/Novecentosanswide-UltraLight-webfont.ttf +0 -0
- data/docs/fonts/Novecentosanswide-UltraLight-webfont.woff +0 -0
- data/docs/fonts/Novecentosanswide-UltraLight-webfont.woff2 +0 -0
- data/docs/fonts/Work_Sans_200.eot +0 -0
- data/docs/fonts/Work_Sans_200.svg +0 -1
- data/docs/fonts/Work_Sans_200.ttf +0 -0
- data/docs/fonts/Work_Sans_200.woff +0 -0
- data/docs/fonts/Work_Sans_200.woff2 +0 -0
- data/docs/fonts/Work_Sans_300.eot +0 -0
- data/docs/fonts/Work_Sans_300.svg +0 -1
- data/docs/fonts/Work_Sans_300.ttf +0 -0
- data/docs/fonts/Work_Sans_300.woff +0 -0
- data/docs/fonts/Work_Sans_300.woff2 +0 -0
- data/docs/fonts/Work_Sans_500.eot +0 -0
- data/docs/fonts/Work_Sans_500.svg +0 -1
- data/docs/fonts/Work_Sans_500.ttf +0 -0
- data/docs/fonts/Work_Sans_500.woff +0 -0
- data/docs/fonts/Work_Sans_500.woff2 +0 -0
- data/docs/images/clippy.svg +0 -1
- data/docs/images/favicon.png +0 -0
- data/docs/images/gopher-404.jpg +0 -0
- data/docs/imported/changelog/index.html +0 -1449
- data/docs/imported/index.html +0 -1191
- data/docs/imported/index.xml +0 -23
- data/docs/index.html +0 -1138
- data/docs/index.json +0 -183
- data/docs/index.xml +0 -138
- data/docs/js/auto-complete.js +0 -3
- data/docs/js/clipboard.min.js +0 -7
- data/docs/js/featherlight.min.js +0 -9
- data/docs/js/highlight.pack.js +0 -6
- data/docs/js/html5shiv-printshiv.min.js +0 -4
- data/docs/js/hugo-learn.js +0 -94
- data/docs/js/jquery-3.3.1.min.js +0 -2
- data/docs/js/jquery.sticky.js +0 -288
- data/docs/js/learn.js +0 -459
- data/docs/js/lunr.min.js +0 -6
- data/docs/js/modernizr.custom-3.6.0.js +0 -3
- data/docs/js/perfect-scrollbar.jquery.min.js +0 -2
- data/docs/js/perfect-scrollbar.min.js +0 -2
- data/docs/js/search.js +0 -93
- data/docs/mermaid/mermaid.css +0 -277
- data/docs/mermaid/mermaid.dark.css +0 -278
- data/docs/mermaid/mermaid.forest.css +0 -356
- data/docs/mermaid/mermaid.js +0 -8
- data/docs/quick_reference/index.html +0 -1246
- data/docs/quick_reference/index.xml +0 -12
- data/docs/sitemap.xml +0 -81
- data/docs/tags/index.html +0 -1146
- data/docs/tags/index.xml +0 -11
- data/docs/tutorial/10-getting_started/index.html +0 -1174
- data/docs/tutorial/20-project_layout/index.html +0 -1299
- data/docs/tutorial/30-your_first_command/index.html +0 -1263
- data/docs/tutorial/40-options_parameters_and_arguments/index.html +0 -1384
- data/docs/tutorial/50-publishing/index.html +0 -1187
- data/docs/tutorial/index.html +0 -1140
- data/docs/tutorial/index.xml +0 -47
- data/docs/webfonts/fa-brands-400.eot +0 -0
- data/docs/webfonts/fa-brands-400.svg +0 -1
- data/docs/webfonts/fa-brands-400.ttf +0 -0
- data/docs/webfonts/fa-brands-400.woff +0 -0
- data/docs/webfonts/fa-brands-400.woff2 +0 -0
- data/docs/webfonts/fa-regular-400.eot +0 -0
- data/docs/webfonts/fa-regular-400.svg +0 -1
- data/docs/webfonts/fa-regular-400.ttf +0 -0
- data/docs/webfonts/fa-regular-400.woff +0 -0
- data/docs/webfonts/fa-regular-400.woff2 +0 -0
- data/docs/webfonts/fa-solid-900.eot +0 -0
- data/docs/webfonts/fa-solid-900.svg +0 -1
- data/docs/webfonts/fa-solid-900.ttf +0 -0
- data/docs/webfonts/fa-solid-900.woff +0 -0
- data/docs/webfonts/fa-solid-900.woff2 +0 -0
- data/docs/whoami/index.html +0 -1155
- data/docs/whoami/index.xml +0 -12
- data/docs-src/archetypes/default.md +0 -6
- data/docs-src/config.toml +0 -37
- data/docs-src/content/_index.md +0 -40
- data/docs-src/content/advanced/_index.md +0 -11
- data/docs-src/content/advanced/automatic_updates.md +0 -46
- data/docs-src/content/advanced/command_types.md +0 -148
- data/docs-src/content/advanced/distributed_state_locking.md +0 -37
- data/docs-src/content/advanced/hooks.md +0 -69
- data/docs-src/content/advanced/interactive_commands.md +0 -41
- data/docs-src/content/advanced/logging.md +0 -39
- data/docs-src/content/advanced/remote_execution.md +0 -60
- data/docs-src/content/advanced/state_storage.md +0 -120
- data/docs-src/content/advanced/user_config_files.md +0 -51
- data/docs-src/content/development/_index.md +0 -11
- data/docs-src/content/development/changelog.md +0 -199
- data/docs-src/content/development/code_of_conduct.md +0 -81
- data/docs-src/content/development/contributing.md +0 -88
- data/docs-src/content/development/license.md +0 -17
- data/docs-src/content/quick_reference/_index.md +0 -180
- data/docs-src/content/tutorial/10-getting_started.md +0 -47
- data/docs-src/content/tutorial/20-project_layout.md +0 -123
- data/docs-src/content/tutorial/30-your_first_command.md +0 -132
- data/docs-src/content/tutorial/40-options_parameters_and_arguments.md +0 -282
- data/docs-src/content/tutorial/50-publishing.md +0 -53
- data/docs-src/content/tutorial/_index.md +0 -11
- data/docs-src/content/whoami/_index.md +0 -34
- data/docs-src/layouts/partials/logo.html +0 -3
- data/docs-src/makesite.sh +0 -40
- data/docs-src/mkdocs-archived.tar.gz +0 -0
- data/docs-src/runsite.sh +0 -8
- data/docs-src/themes/hugo-theme-learn/.editorconfig +0 -16
- data/docs-src/themes/hugo-theme-learn/.gitignore +0 -3
- data/docs-src/themes/hugo-theme-learn/.grenrc.yml +0 -25
- data/docs-src/themes/hugo-theme-learn/CHANGELOG.md +0 -226
- data/docs-src/themes/hugo-theme-learn/LICENSE.md +0 -22
- data/docs-src/themes/hugo-theme-learn/README.md +0 -97
- data/docs-src/themes/hugo-theme-learn/archetypes/chapter.md +0 -13
- data/docs-src/themes/hugo-theme-learn/archetypes/default.md +0 -7
- data/docs-src/themes/hugo-theme-learn/exampleSite/LICENSE.md +0 -20
- data/docs-src/themes/hugo-theme-learn/exampleSite/config.toml +0 -102
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/_index.en.md +0 -41
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/_index.fr.md +0 -43
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/_index.en.md +0 -12
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/_index.fr.md +0 -12
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/_index.zh.md +0 -12
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/configuration/_index.en.md +0 -60
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/configuration/_index.fr.md +0 -56
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/installation/_index.en.md +0 -102
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/installation/_index.fr.md +0 -100
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/installation/images/chapter.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/requirements/_index.en.md +0 -11
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/requirements/_index.fr.md +0 -11
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/requirements/images/magic.gif +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/_index.en.md +0 -194
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/_index.fr.md +0 -194
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/blue-variant.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/green-variant.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/basics/style-customization/images/red-variant.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/_index.en.md +0 -12
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/_index.fr.md +0 -12
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/archetypes.en.md +0 -57
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/archetypes.fr.md +0 -57
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/i18n/_index.en.md +0 -78
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/i18n/_index.fr.md +0 -78
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/i18n/images/i18n-menu.gif +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/icons.en.md +0 -41
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/markdown.en.md +0 -692
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/markdown.fr.md +0 -666
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/menushortcuts.en.md +0 -109
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/menushortcuts.fr.md +0 -109
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/_index.en.md +0 -166
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/_index.fr.md +0 -146
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/frontmatter-icon.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/pages-chapter.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/pages/images/pages-default.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/syntaxhighlight.en.md +0 -89
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/tags.en.md +0 -39
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/cont/tags.fr.md +0 -40
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/credits.en.md +0 -28
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/credits.fr.md +0 -28
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/_index.en.md +0 -16
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/_index.fr.md +0 -16
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/BachGavotteShort.mp3 +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/Carroll_AliceAuPaysDesMerveilles.pdf +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/adivorciarsetoca00cape.pdf +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/hugo.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.files/movieselectricsheep-flock-244-32500-2.mp4 +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.en.md +0 -85
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/BachGavotteShort.mp3 +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/Carroll_AliceAuPaysDesMerveilles.pdf +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/adivorciarsetoca00cape.pdf +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/hugo.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.files/movieselectricsheep-flock-244-32500-2.mp4 +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/attachments.fr.md +0 -85
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/button.en.md +0 -16
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/button.fr.md +0 -16
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/_index.en.md +0 -45
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/_index.fr.md +0 -45
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/_index.en.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/_index.fr.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/_index.en.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-1/children-1-1/_index.fr.md +0 -6
- 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
- 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
- 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
- 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
- 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
- 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
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/_index.en.md +0 -11
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/_index.fr.md +0 -11
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/test3.en.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-2/test3.fr.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-3/_index.en.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-3/_index.fr.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-4/_index.en.md +0 -7
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/children-4/_index.fr.md +0 -7
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/test.en.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/children/test.fr.md +0 -6
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/expand.en.md +0 -45
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/expand.fr.md +0 -45
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/mermaid.en.md +0 -283
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/mermaid.fr.md +0 -283
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/notice.en.md +0 -62
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/notice.fr.md +0 -62
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/siteparam.en.md +0 -23
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/shortcodes/siteparam.fr.md +0 -23
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/showcase.en.md +0 -13
- data/docs-src/themes/hugo-theme-learn/exampleSite/content/showcase.fr.md +0 -14
- data/docs-src/themes/hugo-theme-learn/exampleSite/layouts/partials/custom-footer.html +0 -10
- data/docs-src/themes/hugo-theme-learn/exampleSite/layouts/partials/logo.html +0 -39
- data/docs-src/themes/hugo-theme-learn/exampleSite/layouts/partials/menu-footer.html +0 -14
- data/docs-src/themes/hugo-theme-learn/exampleSite/layouts/shortcodes/ghcontributors.html +0 -31
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/css/theme-mine.css +0 -104
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/fonts/monogramos-webfont.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/images/showcase/inteliver_docs.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/images/showcase/tat.png +0 -0
- data/docs-src/themes/hugo-theme-learn/exampleSite/static/images/showcase/tshark_dev.png +0 -0
- data/docs-src/themes/hugo-theme-learn/i18n/ar.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/de.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/en.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/es.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/fr.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/hi.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/id.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/ja.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/nl.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/pt.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/ru.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/tr.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/i18n/zh-cn.toml +0 -26
- data/docs-src/themes/hugo-theme-learn/images/screenshot.png +0 -0
- data/docs-src/themes/hugo-theme-learn/images/tn.png +0 -0
- data/docs-src/themes/hugo-theme-learn/layouts/404.html +0 -56
- data/docs-src/themes/hugo-theme-learn/layouts/_default/list.html +0 -22
- data/docs-src/themes/hugo-theme-learn/layouts/_default/single.html +0 -12
- data/docs-src/themes/hugo-theme-learn/layouts/index.html +0 -31
- data/docs-src/themes/hugo-theme-learn/layouts/index.json +0 -12
- data/docs-src/themes/hugo-theme-learn/layouts/partials/custom-comments.html +0 -3
- data/docs-src/themes/hugo-theme-learn/layouts/partials/custom-footer.html +0 -5
- data/docs-src/themes/hugo-theme-learn/layouts/partials/custom-header.html +0 -5
- data/docs-src/themes/hugo-theme-learn/layouts/partials/favicon.html +0 -1
- data/docs-src/themes/hugo-theme-learn/layouts/partials/footer.html +0 -77
- data/docs-src/themes/hugo-theme-learn/layouts/partials/header.html +0 -111
- data/docs-src/themes/hugo-theme-learn/layouts/partials/logo.html +0 -19
- data/docs-src/themes/hugo-theme-learn/layouts/partials/menu-footer.html +0 -1
- data/docs-src/themes/hugo-theme-learn/layouts/partials/menu.html +0 -151
- data/docs-src/themes/hugo-theme-learn/layouts/partials/meta.html +0 -2
- data/docs-src/themes/hugo-theme-learn/layouts/partials/search.html +0 -16
- data/docs-src/themes/hugo-theme-learn/layouts/partials/tags.html +0 -7
- data/docs-src/themes/hugo-theme-learn/layouts/partials/toc.html +0 -5
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/attachments.html +0 -36
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/button.html +0 -14
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/children.html +0 -101
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/expand.html +0 -17
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/mermaid.html +0 -2
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/notice.html +0 -2
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/ref.html +0 -14
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/relref.html +0 -14
- data/docs-src/themes/hugo-theme-learn/layouts/shortcodes/siteparam.html +0 -7
- data/docs-src/themes/hugo-theme-learn/netlify.toml +0 -23
- data/docs-src/themes/hugo-theme-learn/static/css/atom-one-dark-reasonable.css +0 -77
- data/docs-src/themes/hugo-theme-learn/static/css/auto-complete.css +0 -47
- data/docs-src/themes/hugo-theme-learn/static/css/featherlight.min.css +0 -8
- data/docs-src/themes/hugo-theme-learn/static/css/fontawesome-all.min.css +0 -1
- data/docs-src/themes/hugo-theme-learn/static/css/hugo-theme.css +0 -254
- data/docs-src/themes/hugo-theme-learn/static/css/hybrid.css +0 -102
- data/docs-src/themes/hugo-theme-learn/static/css/nucleus.css +0 -615
- data/docs-src/themes/hugo-theme-learn/static/css/perfect-scrollbar.min.css +0 -2
- data/docs-src/themes/hugo-theme-learn/static/css/tags.css +0 -49
- data/docs-src/themes/hugo-theme-learn/static/css/theme-blue.css +0 -111
- data/docs-src/themes/hugo-theme-learn/static/css/theme-green.css +0 -111
- data/docs-src/themes/hugo-theme-learn/static/css/theme-red.css +0 -111
- data/docs-src/themes/hugo-theme-learn/static/css/theme.css +0 -1136
- data/docs-src/themes/hugo-theme-learn/static/fonts/Inconsolata.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Inconsolata.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/fonts/Inconsolata.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Inconsolata.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-Normal-webfont.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Novecentosanswide-UltraLight-webfont.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_200.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_300.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/fonts/Work_Sans_500.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/static/images/clippy.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/images/favicon.png +0 -0
- data/docs-src/themes/hugo-theme-learn/static/images/gopher-404.jpg +0 -0
- data/docs-src/themes/hugo-theme-learn/static/js/auto-complete.js +0 -3
- data/docs-src/themes/hugo-theme-learn/static/js/clipboard.min.js +0 -7
- data/docs-src/themes/hugo-theme-learn/static/js/featherlight.min.js +0 -9
- data/docs-src/themes/hugo-theme-learn/static/js/highlight.pack.js +0 -6
- data/docs-src/themes/hugo-theme-learn/static/js/hugo-learn.js +0 -94
- data/docs-src/themes/hugo-theme-learn/static/js/jquery-3.3.1.min.js +0 -2
- data/docs-src/themes/hugo-theme-learn/static/js/jquery.sticky.js +0 -288
- data/docs-src/themes/hugo-theme-learn/static/js/learn.js +0 -459
- data/docs-src/themes/hugo-theme-learn/static/js/lunr.min.js +0 -6
- data/docs-src/themes/hugo-theme-learn/static/js/modernizr.custom-3.6.0.js +0 -3
- data/docs-src/themes/hugo-theme-learn/static/js/perfect-scrollbar.jquery.min.js +0 -2
- data/docs-src/themes/hugo-theme-learn/static/js/perfect-scrollbar.min.js +0 -2
- data/docs-src/themes/hugo-theme-learn/static/js/search.js +0 -93
- data/docs-src/themes/hugo-theme-learn/static/mermaid/mermaid.css +0 -277
- data/docs-src/themes/hugo-theme-learn/static/mermaid/mermaid.dark.css +0 -278
- data/docs-src/themes/hugo-theme-learn/static/mermaid/mermaid.forest.css +0 -356
- data/docs-src/themes/hugo-theme-learn/static/mermaid/mermaid.js +0 -8
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-brands-400.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-regular-400.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.eot +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.svg +0 -1
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.ttf +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.woff +0 -0
- data/docs-src/themes/hugo-theme-learn/static/webfonts/fa-solid-900.woff2 +0 -0
- data/docs-src/themes/hugo-theme-learn/theme.toml +0 -21
- data/docs-src/themes/hugo-theme-learn/wercker.yml +0 -16
- data/lib/rbcli/configuration/configurate.rb +0 -85
- data/lib/rbcli/configuration/configurate_blocks/hooks.rb +0 -52
- data/lib/rbcli/configuration/configurate_blocks/me.rb +0 -122
- data/lib/rbcli/configuration/configurate_blocks/storage.rb +0 -50
- data/lib/rbcli/engine/command.rb +0 -251
- data/lib/rbcli/engine/load_project.rb +0 -45
- data/lib/rbcli/engine/parser.rb +0 -116
- data/lib/rbcli/features/autoupdate/common/autoupdate.rb +0 -50
- data/lib/rbcli/features/autoupdate/gem_updater.rb +0 -62
- data/lib/rbcli/features/autoupdate/github_updater.rb +0 -76
- data/lib/rbcli/features/logging.rb +0 -98
- data/lib/rbcli/features/remote_exec.rb +0 -187
- data/lib/rbcli/features/scriptwrapper.rb +0 -75
- data/lib/rbcli/features/userconfig.rb +0 -163
- data/lib/rbcli/state_storage/common/state_storage.rb +0 -138
- data/lib/rbcli/state_storage/localstate.rb +0 -77
- data/lib/rbcli/state_storage/placeholders.rb +0 -29
- data/lib/rbcli/state_storage/remote_state_connectors/dynamodb.rb +0 -272
- data/lib/rbcli/state_storage/remotestate_dynamodb.rb +0 -115
- data/lib/rbcli/util/msg.rb +0 -55
- data/lib/rbcli/util/string_colorize.rb +0 -45
- data/lib/rbcli-tool/generators.rb +0 -105
- data/lib/rbcli-tool/mdless_fix.rb +0 -406
- data/lib/rbcli-tool/project.rb +0 -120
- data/lib/rbcli-tool/util.rb +0 -70
- data/lib/rbcli-tool.rb +0 -37
- data/rbcli.gemspec +0 -73
- data/skeletons/micro/executable +0 -132
- data/skeletons/mini/executable +0 -247
- data/skeletons/project/.gitignore +0 -11
- data/skeletons/project/.rakeTasks +0 -7
- data/skeletons/project/.rbcli +0 -0
- data/skeletons/project/.rspec +0 -3
- data/skeletons/project/CODE_OF_CONDUCT.md +0 -74
- data/skeletons/project/Gemfile +0 -6
- data/skeletons/project/README.md +0 -46
- data/skeletons/project/Rakefile +0 -6
- data/skeletons/project/application/commands/command.erb +0 -28
- data/skeletons/project/application/commands/script.erb +0 -30
- data/skeletons/project/application/commands/scripts/script.sh +0 -60
- data/skeletons/project/application/options.rb +0 -34
- data/skeletons/project/config/autoupdate.rb +0 -35
- data/skeletons/project/config/general.rb +0 -17
- data/skeletons/project/config/logging.rb +0 -19
- data/skeletons/project/config/storage.rb +0 -35
- data/skeletons/project/config/userspace.rb +0 -33
- data/skeletons/project/config/version.rb +0 -3
- data/skeletons/project/exe/executable +0 -53
- data/skeletons/project/hooks/default_action.rb +0 -16
- data/skeletons/project/hooks/first_run.rb +0 -16
- data/skeletons/project/hooks/post_execution.rb +0 -14
- data/skeletons/project/hooks/pre_execution.rb +0 -14
- data/skeletons/project/lib/lib.erb +0 -9
- data/skeletons/project/spec/spec_helper.rb +0 -14
- data/skeletons/project/spec/untitled_spec.rb +0 -9
- data/skeletons/project/untitled.gemspec +0 -40
- data/skeletons/project/userconf/user_defaults.yml +0 -6
- /data/{docs-src/.hugo_build.lock → lib/rbcli/plugins/.keep} +0 -0
data/lib/rbcli/engine/parser.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
##################################################################################
|
2
|
-
# RBCli -- A framework for developing command line applications in Ruby #
|
3
|
-
# Copyright (C) 2018 Andrew Khoury #
|
4
|
-
# #
|
5
|
-
# This program is free software: you can redistribute it and/or modify #
|
6
|
-
# it under the terms of the GNU General Public License as published by #
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or #
|
8
|
-
# (at your option) any later version. #
|
9
|
-
# #
|
10
|
-
# This program is distributed in the hope that it will be useful, #
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
13
|
-
# GNU General Public License for more details. #
|
14
|
-
# #
|
15
|
-
# You should have received a copy of the GNU General Public License #
|
16
|
-
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
|
-
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
|
-
##################################################################################
|
20
|
-
|
21
|
-
#TODO: Pull in the Optimist gem once the required PR's have been merged:
|
22
|
-
# https://github.com/ManageIQ/optimist/pull/145
|
23
|
-
# https://github.com/ManageIQ/optimist/pull/146
|
24
|
-
# https://github.com/ManageIQ/optimist/pull/147
|
25
|
-
require 'rbcli/util/optimist'
|
26
|
-
|
27
|
-
module Rbcli::Parser
|
28
|
-
|
29
|
-
@cliopts = nil
|
30
|
-
|
31
|
-
def self.parse
|
32
|
-
# We show deprecation warnings before anything else, encouraging the developer to update their code.
|
33
|
-
Rbcli::DeprecationWarning.display_warnings
|
34
|
-
|
35
|
-
@cliopts = Optimist::options do
|
36
|
-
data = Rbcli.configuration(:me)
|
37
|
-
version "#{data[:scriptname]} version: #{data[:version]}"
|
38
|
-
banner <<-EOS
|
39
|
-
#{data[:description]}
|
40
|
-
For more information on individual commands, run `#{data[:scriptname]} <command> -h`.
|
41
|
-
|
42
|
-
Usage:
|
43
|
-
#{data[:scriptname]} [options] command [parameters]
|
44
|
-
|
45
|
-
Commands:
|
46
|
-
#{Rbcli::Command.descriptions 6, 21}
|
47
|
-
|
48
|
-
[options]:
|
49
|
-
EOS
|
50
|
-
data[:options].each do |name, opts|
|
51
|
-
opts[:default] = nil unless opts.key? :default
|
52
|
-
opts[:required] = false unless opts.key? :required
|
53
|
-
opts[:permitted] = nil unless opts.key? :permitted
|
54
|
-
opt name.to_sym, opts[:description], type: opts[:type], default: opts[:default], required: opts[:required], permitted: opts[:permitted], short: opts[:short]
|
55
|
-
end
|
56
|
-
if data[:remote_execution]
|
57
|
-
opt :remote_exec, 'Remote user@host:port to execute command on', type: :string, default: nil
|
58
|
-
opt :identity, 'Identity for remote execution', type: :string, default: nil
|
59
|
-
end
|
60
|
-
opt :json_output, 'Output result in machine-friendly JSON format', short: :none, type: :boolean, default: false if data[:allow_json]
|
61
|
-
opt :config_file, 'Specify a config file manually', short: :none, type: :string, default: data[:config_userfile] unless data[:config_userfile].nil?
|
62
|
-
opt :generate_config, 'Generate a new config file', short: :none unless data[:config_userfile].nil? #defaults to false
|
63
|
-
stop_on Rbcli::Command.commands.keys
|
64
|
-
end
|
65
|
-
|
66
|
-
@cmd = [ARGV.shift] # get the subcommand
|
67
|
-
if @cliopts[:generate_config]
|
68
|
-
Rbcli::Config::generate_userconf @cliopts[:config_file]
|
69
|
-
puts "User config generated at #{@cliopts[:config_file]} using default values."
|
70
|
-
elsif @cmd[0].nil?
|
71
|
-
default_action = Rbcli.configuration(:me, :default_action) || Rbcli.configuration(:hooks, :default_action)
|
72
|
-
if default_action.nil?
|
73
|
-
Optimist::educate
|
74
|
-
else
|
75
|
-
default_action.call @cliopts
|
76
|
-
end
|
77
|
-
elsif Rbcli::Command.commands.key? @cmd[0]
|
78
|
-
@cmd << Rbcli::Command.commands[@cmd[0]].class.parseopts
|
79
|
-
|
80
|
-
if (@cliopts[:remote_exec_given] and not @cliopts[:identity_given]) or (not @cliopts[:remote_exec_given] and @cliopts[:identity_given])
|
81
|
-
Optimist::die 'Must use `--remote-exec` and `--identity` together.'
|
82
|
-
end
|
83
|
-
|
84
|
-
Rbcli.configuration(:me, :pre_hook).call @cliopts unless Rbcli.configuration(:me, :pre_hook).nil?
|
85
|
-
Rbcli.configuration(:hooks, :pre_hook).call @cliopts unless Rbcli.configuration(:hooks, :pre_hook).nil?
|
86
|
-
Rbcli::Command.runcmd(@cmd.shift, @cmd[0], @cliopts)
|
87
|
-
Rbcli.configuration(:me, :post_hook).call @cliopts unless Rbcli.configuration(:me, :post_hook).nil?
|
88
|
-
Rbcli.configuration(:hooks, :post_hook).call @cliopts unless Rbcli.configuration(:hooks, :post_hook).nil?
|
89
|
-
else
|
90
|
-
Optimist::die "Unknown subcommand #{@cmd[0].inspect}"
|
91
|
-
end
|
92
|
-
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
module Rbcli
|
98
|
-
def self.parse
|
99
|
-
first_run_hook = Rbcli.configuration(:me, :first_run) || Rbcli.configuration(:hooks, :first_run)
|
100
|
-
if first_run_hook
|
101
|
-
if Rbcli.local_state
|
102
|
-
if Rbcli.local_state.rbclidata.key? :first_run
|
103
|
-
Rbcli::Parser::parse
|
104
|
-
else
|
105
|
-
first_run_hook.call
|
106
|
-
Rbcli.local_state.set_rbclidata :first_run, true
|
107
|
-
Rbcli::Parser::parse unless Rbcli.configuration(:me, :halt_after_first_run) or Rbcli.configuration(:hooks, :halt_after_first_run)
|
108
|
-
end
|
109
|
-
else
|
110
|
-
raise StandardError.new "Error: Can not use `first_run` without also configuring `local_state`."
|
111
|
-
end
|
112
|
-
else
|
113
|
-
Rbcli::Parser::parse
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
##################################################################################
|
2
|
-
# RBCli -- A framework for developing command line applications in Ruby #
|
3
|
-
# Copyright (C) 2018 Andrew Khoury #
|
4
|
-
# #
|
5
|
-
# This program is free software: you can redistribute it and/or modify #
|
6
|
-
# it under the terms of the GNU General Public License as published by #
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or #
|
8
|
-
# (at your option) any later version. #
|
9
|
-
# #
|
10
|
-
# This program is distributed in the hope that it will be useful, #
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
13
|
-
# GNU General Public License for more details. #
|
14
|
-
# #
|
15
|
-
# You should have received a copy of the GNU General Public License #
|
16
|
-
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
|
-
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
|
-
##################################################################################
|
20
|
-
|
21
|
-
#TODO: Detect invalid network connections and skip
|
22
|
-
#TODO: Add a timeout
|
23
|
-
|
24
|
-
require 'rubygems'
|
25
|
-
module Rbcli::Autoupdate
|
26
|
-
module Common
|
27
|
-
def get_latest_version
|
28
|
-
raise Exception.new "Autoupdater type #{self.class.name} must define a 'check_for_updates' method."
|
29
|
-
end
|
30
|
-
|
31
|
-
def update_message
|
32
|
-
raise Exception.new "Autoupdater type #{self.class.name} must define an 'update_message' method."
|
33
|
-
end
|
34
|
-
|
35
|
-
def update_available?
|
36
|
-
@latest_version = get_latest_version
|
37
|
-
Gem::Version.new(@latest_version) > Gem::Version.new(Rbcli.configuration(:me, :version))
|
38
|
-
end
|
39
|
-
|
40
|
-
def show_message
|
41
|
-
puts "WARNING: An update is available to #{Rbcli.configuration(:me, :scriptname)}. You are currently running version #{Rbcli.configuration(:me, :version)}; the latest is #{@latest_version || get_latest_version}."
|
42
|
-
puts @message || update_message
|
43
|
-
puts "\n"
|
44
|
-
if @force_update
|
45
|
-
puts "This application requires that you update to the latest version to continue using it. It will now exit."
|
46
|
-
exit 0
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
##################################################################################
|
2
|
-
# RBCli -- A framework for developing command line applications in Ruby #
|
3
|
-
# Copyright (C) 2018 Andrew Khoury #
|
4
|
-
# #
|
5
|
-
# This program is free software: you can redistribute it and/or modify #
|
6
|
-
# it under the terms of the GNU General Public License as published by #
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or #
|
8
|
-
# (at your option) any later version. #
|
9
|
-
# #
|
10
|
-
# This program is distributed in the hope that it will be useful, #
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
13
|
-
# GNU General Public License for more details. #
|
14
|
-
# #
|
15
|
-
# You should have received a copy of the GNU General Public License #
|
16
|
-
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
|
-
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
|
-
##################################################################################
|
20
|
-
|
21
|
-
require 'rbcli/features/autoupdate/common/autoupdate'
|
22
|
-
require 'net/http'
|
23
|
-
require 'json'
|
24
|
-
|
25
|
-
module Rbcli::Autoupdate
|
26
|
-
class GemUpdater
|
27
|
-
include Common
|
28
|
-
|
29
|
-
def initialize gemname, force_update, message
|
30
|
-
@gemname = gemname
|
31
|
-
@uri = URI.parse "https://rubygems.org/api/v1/versions/#{gemname}/latest.json"
|
32
|
-
@force_update = force_update
|
33
|
-
@message = message
|
34
|
-
end
|
35
|
-
|
36
|
-
def get_latest_version
|
37
|
-
begin
|
38
|
-
response = Net::HTTP.get(@uri)
|
39
|
-
JSON.parse(response)['version']
|
40
|
-
rescue SocketError => e
|
41
|
-
# Capture connection errors
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def update_message
|
46
|
-
"Please run `gem update #{@gemname}` to upgrade to the latest version. You can see it at: https://rubygems.org/gems/#{@gemname}/versions/#{@latest_version}"
|
47
|
-
end
|
48
|
-
|
49
|
-
# def self.save_defaults
|
50
|
-
# Rbcli::Config::add_categorized_defaults :gem_update, 'Automatically Check for Updates from RubyGems', {
|
51
|
-
# access_token: {
|
52
|
-
# description: 'Access token for GitHub API. This is only required for private repos. For help, see: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/',
|
53
|
-
# value: nil
|
54
|
-
# },
|
55
|
-
# enterprise_hostname: {
|
56
|
-
# description: 'Hostname for GitHub Enterprise. Leave as null (~) for public GitHub.',
|
57
|
-
# value: nil
|
58
|
-
# }
|
59
|
-
# }
|
60
|
-
# end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,76 +0,0 @@
|
|
1
|
-
##################################################################################
|
2
|
-
# RBCli -- A framework for developing command line applications in Ruby #
|
3
|
-
# Copyright (C) 2018 Andrew Khoury #
|
4
|
-
# #
|
5
|
-
# This program is free software: you can redistribute it and/or modify #
|
6
|
-
# it under the terms of the GNU General Public License as published by #
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or #
|
8
|
-
# (at your option) any later version. #
|
9
|
-
# #
|
10
|
-
# This program is distributed in the hope that it will be useful, #
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
13
|
-
# GNU General Public License for more details. #
|
14
|
-
# #
|
15
|
-
# You should have received a copy of the GNU General Public License #
|
16
|
-
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
|
-
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
|
-
##################################################################################
|
20
|
-
|
21
|
-
require 'rbcli/features/autoupdate/common/autoupdate'
|
22
|
-
require 'octokit'
|
23
|
-
|
24
|
-
module Rbcli::Autoupdate
|
25
|
-
class GithubUpdater
|
26
|
-
include Common
|
27
|
-
|
28
|
-
def initialize reponame, access_token, enterprise_hostname, force_update, message
|
29
|
-
@reponame = reponame
|
30
|
-
@force_update = force_update
|
31
|
-
@message = message
|
32
|
-
|
33
|
-
access_token = Rbcli.config.key?(:github_updatecheck) ? (Rbcli.config[:github_updatecheck][:access_token] || access_token) : access_token
|
34
|
-
enterprise_hostname = Rbcli.config.key?(:github_updatecheck) ? (Rbcli.config[:github_updatecheck][:enterprise_hostname] || enterprise_hostname) : enterprise_hostname
|
35
|
-
|
36
|
-
# Enterprise Connection
|
37
|
-
if enterprise_hostname
|
38
|
-
Octokit.configure do |c|
|
39
|
-
c.api_endpoint = "https://#{enterprise_hostname}/api/v3/"
|
40
|
-
end
|
41
|
-
# Public Github Connection
|
42
|
-
end
|
43
|
-
#OAuth connection - not used
|
44
|
-
#@client = Octokit::Client.new :client_id => client_id, :client_secret => client_secret
|
45
|
-
@client = Octokit::Client.new(:access_token => access_token)
|
46
|
-
end
|
47
|
-
|
48
|
-
def get_latest_version
|
49
|
-
begin
|
50
|
-
@client.repo(@reponame).rels[:tags].get.data.map{ |t| t[:name] }[0].sub(/^[v]*/,"")
|
51
|
-
rescue Faraday::ConnectionFailed => e
|
52
|
-
# This is to capture connection errors without bothering the user.
|
53
|
-
rescue NoMethodError => e
|
54
|
-
# This ignores repos with no tags
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
def update_message
|
60
|
-
"Please check the github repo #{@reponame} for instructions."
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.save_defaults
|
64
|
-
Rbcli::Config::add_categorized_defaults :github_update, 'Automatically Check for Updates from GitHub', {
|
65
|
-
access_token: {
|
66
|
-
description: 'Access token for GitHub API. This is only required for private repos. For help, see: https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/',
|
67
|
-
value: nil
|
68
|
-
},
|
69
|
-
enterprise_hostname: {
|
70
|
-
description: 'Hostname for GitHub Enterprise. Leave as null (~) for public GitHub.',
|
71
|
-
value: nil
|
72
|
-
}
|
73
|
-
}
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
##################################################################################
|
2
|
-
# RBCli -- A framework for developing command line applications in Ruby #
|
3
|
-
# Copyright (C) 2018 Andrew Khoury #
|
4
|
-
# #
|
5
|
-
# This program is free software: you can redistribute it and/or modify #
|
6
|
-
# it under the terms of the GNU General Public License as published by #
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or #
|
8
|
-
# (at your option) any later version. #
|
9
|
-
# #
|
10
|
-
# This program is distributed in the hope that it will be useful, #
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
13
|
-
# GNU General Public License for more details. #
|
14
|
-
# #
|
15
|
-
# You should have received a copy of the GNU General Public License #
|
16
|
-
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
|
-
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
|
-
##################################################################################
|
20
|
-
|
21
|
-
|
22
|
-
####
|
23
|
-
# Logging Module
|
24
|
-
####
|
25
|
-
# The logging module automatically initializes and formats the Ruby logger, and makes it available for the application.
|
26
|
-
# Note that all of the built-in log commands are available.
|
27
|
-
#
|
28
|
-
# Additionally, a convenience function Rbcli::debug is available, which does not log, but prints an object.to_s
|
29
|
-
# in red so that it is easily identifiable in the coutput.
|
30
|
-
#
|
31
|
-
# Usage
|
32
|
-
#
|
33
|
-
# Rbcli::log.info {'Some Message'}
|
34
|
-
#
|
35
|
-
# Rbcli::debug myobj
|
36
|
-
#
|
37
|
-
####
|
38
|
-
|
39
|
-
require 'logger'
|
40
|
-
require 'colorize'
|
41
|
-
|
42
|
-
module Rbcli::Logger
|
43
|
-
|
44
|
-
@default_level = 'info'
|
45
|
-
@default_target = nil
|
46
|
-
|
47
|
-
def self.save_defaults level: nil, target: nil
|
48
|
-
@default_level = level if level
|
49
|
-
@default_target = target if target
|
50
|
-
|
51
|
-
Rbcli::Config::add_categorized_defaults :logger, 'Log Settings', {
|
52
|
-
log_level: {
|
53
|
-
description: '0-5, or DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN. Set to null (~) to disable logging.',
|
54
|
-
value: @default_level || nil
|
55
|
-
},
|
56
|
-
log_target: {
|
57
|
-
description: 'STDOUT, STDERR, or a file path. Set to null (~) to disable logging.',
|
58
|
-
value: @default_target || nil
|
59
|
-
}
|
60
|
-
}
|
61
|
-
end
|
62
|
-
self.save_defaults
|
63
|
-
|
64
|
-
def self.make_logger
|
65
|
-
if Rbcli::config[:logger][:log_target].nil?
|
66
|
-
target = '/dev/null'
|
67
|
-
elsif Rbcli::config[:logger][:log_target].downcase == 'stdout'
|
68
|
-
target = STDOUT
|
69
|
-
elsif Rbcli::config[:logger][:log_target].downcase == 'stderr'
|
70
|
-
target = STDERR
|
71
|
-
else
|
72
|
-
target = Rbcli::config[:logger][:log_target]
|
73
|
-
end
|
74
|
-
@logger = Logger.new(target)
|
75
|
-
@logger.level = Rbcli::config[:logger][:log_level]
|
76
|
-
|
77
|
-
original_formatter = Logger::Formatter.new
|
78
|
-
@logger.formatter = proc do |severity, datetime, progname, msg|
|
79
|
-
original_formatter.call(severity, datetime, progname || caller_locations[3].path.split('/')[-1], msg.dump)
|
80
|
-
end
|
81
|
-
@logger
|
82
|
-
end
|
83
|
-
|
84
|
-
def self.log
|
85
|
-
@logger || self.make_logger
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
module Rbcli
|
91
|
-
def self.log
|
92
|
-
Rbcli::Logger::log
|
93
|
-
end
|
94
|
-
|
95
|
-
def self.debug obj
|
96
|
-
puts obj.to_s.red
|
97
|
-
end
|
98
|
-
end
|
@@ -1,187 +0,0 @@
|
|
1
|
-
##################################################################################
|
2
|
-
# RBCli -- A framework for developing command line applications in Ruby #
|
3
|
-
# Copyright (C) 2018 Andrew Khoury #
|
4
|
-
# #
|
5
|
-
# This program is free software: you can redistribute it and/or modify #
|
6
|
-
# it under the terms of the GNU General Public License as published by #
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or #
|
8
|
-
# (at your option) any later version. #
|
9
|
-
# #
|
10
|
-
# This program is distributed in the hope that it will be useful, #
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
13
|
-
# GNU General Public License for more details. #
|
14
|
-
# #
|
15
|
-
# You should have received a copy of the GNU General Public License #
|
16
|
-
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
|
-
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
|
-
##################################################################################
|
20
|
-
|
21
|
-
require 'net/ssh'
|
22
|
-
require 'net/scp'
|
23
|
-
require 'json'
|
24
|
-
|
25
|
-
class Rbcli::RemoteExec
|
26
|
-
|
27
|
-
def initialize cmd, connection_string, remote_identity, params, args, global_opts, config
|
28
|
-
@cmd = cmd
|
29
|
-
@params = params.to_json.gsub("\"", "\\\"")
|
30
|
-
@args = args.to_json.gsub("\"", "\\\"")
|
31
|
-
@global_opts = global_opts.to_json.gsub("\"", "\\\"")
|
32
|
-
@config = config.to_json.gsub("\"", "\\\"")
|
33
|
-
|
34
|
-
@remote_host = parse_connection connection_string, remote_identity
|
35
|
-
|
36
|
-
## SCRIPT COMMANDS
|
37
|
-
if !@cmd.script.nil?
|
38
|
-
@execution_block = lambda do |ssh|
|
39
|
-
# Set paths
|
40
|
-
tmpdir = ssh.exec! 'mktemp -d /tmp/rbcli.XXXXXXXXXXXX'
|
41
|
-
remote_script_path = "#{tmpdir.strip}/script.sh"
|
42
|
-
local_rbclilib_path = "#{File.dirname(__FILE__)}/../../../lib-sh/lib-rbcli.sh"
|
43
|
-
remote_rbclilib_path = "#{tmpdir.strip}/lib-rbcli.sh"
|
44
|
-
|
45
|
-
# Upload scripts
|
46
|
-
ssh.scp.upload @cmd.script.path, remote_script_path
|
47
|
-
ssh.scp.upload local_rbclilib_path, remote_rbclilib_path
|
48
|
-
ssh.exec! "chmod 0700 #{remote_script_path}"
|
49
|
-
|
50
|
-
# We need to test for JQ -- if it is not present we ask the user for the sudo password
|
51
|
-
jq_found = ssh.exec!('which jq').exitstatus == 0
|
52
|
-
if jq_found
|
53
|
-
sudopw = nil
|
54
|
-
else
|
55
|
-
print "JQ not found on remote system. Please enter sudo password to install it, or leave blank if no password needed: "
|
56
|
-
sudopw = gets.chomp
|
57
|
-
end
|
58
|
-
|
59
|
-
# Since we need to sudo, we need to send the sudo password when prompted
|
60
|
-
#result = ''
|
61
|
-
channel = ssh.open_channel do |channel, success|
|
62
|
-
channel.on_data do |channel, data|
|
63
|
-
print data.to_s
|
64
|
-
if !jq_found and data =~ /^\[sudo\] password for /
|
65
|
-
channel.send_data "#{sudopw}\n"
|
66
|
-
# else
|
67
|
-
# result += data.to_s
|
68
|
-
end
|
69
|
-
end
|
70
|
-
channel.request_pty
|
71
|
-
channel.exec "__RBCLI_PARAMS=\"#{@params}\" __RBCLI_ARGS=\"#{@args}\" __RBCLI_GLOBAL=\"#{@global_opts}\" __RBCLI_CONFIG=\"#{@config}\" source #{remote_script_path}"
|
72
|
-
channel.wait
|
73
|
-
end
|
74
|
-
channel.wait
|
75
|
-
#puts result
|
76
|
-
|
77
|
-
# Cleanup
|
78
|
-
ssh.exec! "rm -rf #{tmpdir}"
|
79
|
-
end
|
80
|
-
|
81
|
-
## EXTERN COMMANDS
|
82
|
-
elsif !@cmd.extern.nil?
|
83
|
-
@execution_block = lambda do |ssh|
|
84
|
-
channel = ssh.open_channel do |channel, success|
|
85
|
-
channel.on_data do |channel, data|
|
86
|
-
print data.to_s
|
87
|
-
end
|
88
|
-
channel.request_pty
|
89
|
-
channel.exec "__RBCLI_PARAMS=\"#{@params}\" __RBCLI_ARGS=\"#{@args}\" __RBCLI_GLOBAL=\"#{@global_opts}\" __RBCLI_CONFIG=\"#{@config}\" __RBCLI_MYVARS=\"#{@myvars}\" #{@cmd.extern.path}"
|
90
|
-
channel.wait
|
91
|
-
end
|
92
|
-
channel.wait
|
93
|
-
end
|
94
|
-
|
95
|
-
## STANDARD COMMANDS
|
96
|
-
else
|
97
|
-
@execution_block = lambda do |ssh|
|
98
|
-
raise Exception.new "Warning: Remote SSH Execution does not yetexist for Standard Ruby commands. Please use a Script or External command to use this feature."
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
def run
|
105
|
-
|
106
|
-
case @remote_host[:credstype]
|
107
|
-
when :keyfile
|
108
|
-
Net::SSH.start(@remote_host[:hostname], @remote_host[:username], port: @remote_host[:port], keys: @remote_host[:creds], keys_only: true, &@execution_block)
|
109
|
-
when :keytext
|
110
|
-
Net::SSH.start(@remote_host[:hostname], @remote_host[:username], port: @remote_host[:port], key_data: @remote_host[:creds], keys_only: true, &@execution_block)
|
111
|
-
when :password
|
112
|
-
Net::SSH.start(@remote_host[:hostname], @remote_host[:username], port: @remote_host[:port], password: @remote_host[:creds], keys_only: false, &@execution_block)
|
113
|
-
else
|
114
|
-
raise Exception.new "Invalid SSH Connection: No credentials specified for host #{@remote_host[:hostname]}"
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
|
-
private
|
120
|
-
|
121
|
-
def parse_connection connstring, ident
|
122
|
-
## We want to split the connection string up
|
123
|
-
_, _, user, host, _, port = connstring.match(/^(([^:@\/]+)@)?([^:@\/]+)?(:([\d]+))?/).to_a
|
124
|
-
exiting = false
|
125
|
-
if host.nil?
|
126
|
-
puts "Please enter a valid hostname or IP address for remote execution."
|
127
|
-
exiting = true
|
128
|
-
end
|
129
|
-
begin
|
130
|
-
port ||= 22
|
131
|
-
port = port.to_i
|
132
|
-
rescue
|
133
|
-
puts "Please enter a valid port number"
|
134
|
-
exiting = true
|
135
|
-
end
|
136
|
-
exit 1 if exiting
|
137
|
-
|
138
|
-
if File.exist? File.expand_path(ident)
|
139
|
-
credstype = :keyfile
|
140
|
-
else
|
141
|
-
credstype = :password
|
142
|
-
end
|
143
|
-
|
144
|
-
{
|
145
|
-
hostname: host,
|
146
|
-
port: port,
|
147
|
-
username: user,
|
148
|
-
creds: ident,
|
149
|
-
credstype: credstype
|
150
|
-
}
|
151
|
-
end
|
152
|
-
|
153
|
-
end
|
154
|
-
|
155
|
-
|
156
|
-
# class Rbcli::Command
|
157
|
-
#
|
158
|
-
# def self.remote_exec cmd, params, args, global_opts, config
|
159
|
-
# executor = Rbcli::RemoteExec.new cmd, cmd.remote_host, params, args, global_opts, config
|
160
|
-
# executor.run
|
161
|
-
# end
|
162
|
-
#
|
163
|
-
# def self.remote_host hostname, port: 22, username: nil, password: nil, keytext: nil, keyfile: nil
|
164
|
-
# @remote_host = {
|
165
|
-
# hostname: hostname,
|
166
|
-
# port: port,
|
167
|
-
# username: username,
|
168
|
-
# creds: keyfile || keytext || password,
|
169
|
-
# credstype: (keyfile.nil?) ? ((keytext.nil?) ? ((password.nil?) ? nil : :password) : :keytext) : :keyfile
|
170
|
-
# }
|
171
|
-
# end
|
172
|
-
#
|
173
|
-
# def remote_host
|
174
|
-
# self.class.instance_variable_get :@remote_host
|
175
|
-
# end
|
176
|
-
#
|
177
|
-
# ##
|
178
|
-
# # Run command on a remote machine
|
179
|
-
# ##
|
180
|
-
# def self.remote_cmd cmd, params, args, global_opts, config
|
181
|
-
# # We do something different depending on if it is a Ruby command, Script, or Extern
|
182
|
-
# unless @commands[cmd].script.nil?
|
183
|
-
# script = @commands[cmd].script
|
184
|
-
#
|
185
|
-
# end
|
186
|
-
# end
|
187
|
-
# end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
##################################################################################
|
2
|
-
# RBCli -- A framework for developing command line applications in Ruby #
|
3
|
-
# Copyright (C) 2018 Andrew Khoury #
|
4
|
-
# #
|
5
|
-
# This program is free software: you can redistribute it and/or modify #
|
6
|
-
# it under the terms of the GNU General Public License as published by #
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or #
|
8
|
-
# (at your option) any later version. #
|
9
|
-
# #
|
10
|
-
# This program is distributed in the hope that it will be useful, #
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
13
|
-
# GNU General Public License for more details. #
|
14
|
-
# #
|
15
|
-
# You should have received a copy of the GNU General Public License #
|
16
|
-
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
17
|
-
# #
|
18
|
-
# For questions regarding licensing, please contact andrew@blacknex.us #
|
19
|
-
##################################################################################
|
20
|
-
|
21
|
-
require 'json'
|
22
|
-
class Rbcli::Scriptwrapper
|
23
|
-
def initialize path, envvars = nil, block = nil, script = false
|
24
|
-
@path = path
|
25
|
-
@envvars = envvars || {}
|
26
|
-
@block = block
|
27
|
-
@script = script
|
28
|
-
end
|
29
|
-
|
30
|
-
attr_reader :path
|
31
|
-
|
32
|
-
def execute params, args, global_opts, config
|
33
|
-
####
|
34
|
-
#### The following code will flatten one level of the hashes into separate variables
|
35
|
-
#### It is deprecated in favor of passing along json to be parsed with JQ
|
36
|
-
####
|
37
|
-
# env_hash = {}
|
38
|
-
# {
|
39
|
-
# '__PARAMS' => params,
|
40
|
-
# '__ARGS' => args,
|
41
|
-
# '__GLOBAL' => global_opts,
|
42
|
-
# '__CONFIG' => config
|
43
|
-
# }.each do |name, hsh|
|
44
|
-
# hsh.each do |k, v|
|
45
|
-
# env_hash["#{name}_#{k.upcase}"] = v.to_json
|
46
|
-
# end
|
47
|
-
# end
|
48
|
-
# env_hash.merge!(@envvars.deep_stringify!) unless @envvars.nil?
|
49
|
-
|
50
|
-
if @block || @script
|
51
|
-
env_hash = {
|
52
|
-
'__RBCLI_PARAMS' => params.to_json,
|
53
|
-
'__RBCLI_ARGS' => args.to_json,
|
54
|
-
'__RBCLI_GLOBAL' => global_opts.to_json,
|
55
|
-
'__RBCLI_CONFIG' => config.to_json,
|
56
|
-
'__RBCLI_MYVARS' => @envvars.to_json
|
57
|
-
}
|
58
|
-
if @block
|
59
|
-
path = @block.call params, args, global_opts, config
|
60
|
-
else
|
61
|
-
path = @path
|
62
|
-
end
|
63
|
-
system(env_hash, path)
|
64
|
-
else
|
65
|
-
system(@envvars.collect{|k,v| [k.to_s, v]}.to_h, @path)
|
66
|
-
end
|
67
|
-
|
68
|
-
# IO.popen(env_hash, path) do |io|
|
69
|
-
# while (line = io.gets) do
|
70
|
-
# puts line
|
71
|
-
# end
|
72
|
-
# end
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|