shopify-cli 1.3.1 → 1.7.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/.github/CODEOWNERS +2 -2
- data/.github/CONTRIBUTING.md +9 -1
- data/.github/PULL_REQUEST_TEMPLATE.md +10 -1
- data/.github/workflows/release.yml +61 -0
- data/.github/workflows/triage.yml +22 -0
- data/.gitignore +0 -1
- data/.rubocop.yml +61 -8
- data/.rubocop_todo.yml +11 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +30 -0
- data/Gemfile +12 -11
- data/Gemfile.lock +39 -37
- data/README.md +39 -7
- data/RELEASING.md +19 -29
- data/Rakefile +32 -28
- data/bin/load_shopify.rb +6 -6
- data/bin/shopify +2 -2
- data/dev.yml +2 -2
- data/docs/_config.yml +1 -18
- data/docs/app/node/commands/index.md +2 -80
- data/docs/app/node/index.md +2 -33
- data/docs/app/rails/commands/index.md +2 -78
- data/docs/app/rails/index.md +2 -34
- data/docs/core/index.md +2 -84
- data/docs/getting-started/index.md +2 -25
- data/docs/getting-started/install/index.md +1 -118
- data/docs/getting-started/migrate/index.md +2 -94
- data/docs/getting-started/uninstall/index.md +2 -35
- data/docs/getting-started/upgrade/index.md +2 -39
- data/docs/help/start-app/index.md +2 -4
- data/docs/index.md +2 -24
- data/ext/shopify-cli/extconf.rb +7 -7
- data/install.sh +1 -1
- data/lib/docgen/markdown.rb +11 -11
- data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
- data/lib/project_types/extension/cli.rb +64 -47
- data/lib/project_types/extension/commands/build.rb +3 -3
- data/lib/project_types/extension/commands/create.rb +16 -9
- data/lib/project_types/extension/commands/extension_command.rb +8 -5
- data/lib/project_types/extension/commands/push.rb +8 -8
- data/lib/project_types/extension/commands/register.rb +19 -30
- data/lib/project_types/extension/commands/serve.rb +2 -2
- data/lib/project_types/extension/commands/tunnel.rb +12 -12
- data/lib/project_types/extension/extension_project.rb +4 -4
- data/lib/project_types/extension/extension_project_keys.rb +4 -4
- data/lib/project_types/extension/features/argo.rb +117 -0
- data/lib/project_types/extension/features/argo_config.rb +5 -5
- data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
- data/lib/project_types/extension/features/argo_setup.rb +2 -2
- data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
- data/lib/project_types/extension/forms/create.rb +28 -34
- data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
- data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
- data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
- data/lib/project_types/extension/messages/messages.rb +53 -52
- data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
- data/lib/project_types/extension/models/specification.rb +35 -0
- data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
- data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
- data/lib/project_types/extension/models/specifications.rb +77 -0
- data/lib/project_types/extension/tasks/configure_features.rb +52 -0
- data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
- data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
- data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
- data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
- data/lib/project_types/extension/tasks/create_extension.rb +4 -4
- data/lib/project_types/extension/tasks/fetch_specifications.rb +38 -0
- data/lib/project_types/extension/tasks/get_app.rb +4 -4
- data/lib/project_types/extension/tasks/get_apps.rb +3 -3
- data/lib/project_types/extension/tasks/update_draft.rb +4 -4
- data/lib/project_types/extension/tasks/user_errors.rb +4 -4
- data/lib/project_types/node/cli.rb +19 -16
- data/lib/project_types/node/commands/connect.rb +15 -0
- data/lib/project_types/node/commands/create.rb +46 -38
- data/lib/project_types/node/commands/deploy.rb +4 -4
- data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
- data/lib/project_types/node/commands/generate.rb +9 -18
- data/lib/project_types/node/commands/open.rb +2 -2
- data/lib/project_types/node/commands/populate.rb +6 -6
- data/lib/project_types/node/commands/populate/customer.rb +5 -5
- data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
- data/lib/project_types/node/commands/populate/product.rb +5 -5
- data/lib/project_types/node/commands/serve.rb +9 -9
- data/lib/project_types/node/commands/tunnel.rb +7 -7
- data/lib/project_types/node/forms/create.rb +7 -7
- data/lib/project_types/node/messages/messages.rb +19 -53
- data/lib/project_types/rails/cli.rb +21 -18
- data/lib/project_types/rails/commands/connect.rb +15 -0
- data/lib/project_types/rails/commands/create.rb +60 -54
- data/lib/project_types/rails/commands/deploy.rb +4 -4
- data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
- data/lib/project_types/rails/commands/generate.rb +7 -7
- data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
- data/lib/project_types/rails/commands/open.rb +2 -2
- data/lib/project_types/rails/commands/populate.rb +6 -6
- data/lib/project_types/rails/commands/populate/customer.rb +5 -5
- data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
- data/lib/project_types/rails/commands/populate/product.rb +5 -5
- data/lib/project_types/rails/commands/serve.rb +11 -11
- data/lib/project_types/rails/commands/tunnel.rb +7 -7
- data/lib/project_types/rails/forms/create.rb +24 -24
- data/lib/project_types/rails/gem.rb +24 -24
- data/lib/project_types/rails/messages/messages.rb +12 -9
- data/lib/project_types/rails/ruby.rb +2 -2
- data/lib/project_types/script/cli.rb +42 -38
- data/lib/project_types/script/commands/create.rb +13 -10
- data/lib/project_types/script/commands/disable.rb +3 -3
- data/lib/project_types/script/commands/enable.rb +19 -9
- data/lib/project_types/script/commands/push.rb +10 -17
- data/lib/project_types/script/config/extension_points.yml +17 -12
- data/lib/project_types/script/errors.rb +38 -0
- data/lib/project_types/script/forms/create.rb +29 -5
- data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
- data/lib/project_types/script/layers/application/build_script.rb +18 -19
- data/lib/project_types/script/layers/application/create_script.rb +13 -11
- data/lib/project_types/script/layers/application/disable_script.rb +2 -2
- data/lib/project_types/script/layers/application/enable_script.rb +2 -2
- data/lib/project_types/script/layers/application/extension_points.rb +24 -0
- data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
- data/lib/project_types/script/layers/application/push_script.rb +12 -18
- data/lib/project_types/script/layers/domain/errors.rb +7 -0
- data/lib/project_types/script/layers/domain/extension_point.rb +62 -7
- data/lib/project_types/script/layers/domain/metadata.rb +55 -0
- data/lib/project_types/script/layers/domain/push_package.rb +29 -6
- data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +19 -54
- data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +49 -18
- data/lib/project_types/script/layers/infrastructure/errors.rb +17 -1
- data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
- data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
- data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
- data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
- data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
- data/lib/project_types/script/layers/infrastructure/script_service.rb +26 -16
- data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
- data/lib/project_types/script/messages/messages.rb +67 -10
- data/lib/project_types/script/script_project.rb +47 -16
- data/lib/project_types/script/ui/error_handler.rb +115 -45
- data/lib/project_types/script/ui/printing_spinner.rb +1 -1
- data/lib/project_types/script/ui/strict_spinner.rb +1 -1
- data/lib/project_types/theme/cli.rb +40 -0
- data/lib/project_types/theme/commands/connect.rb +54 -0
- data/lib/project_types/theme/commands/create.rb +48 -0
- data/lib/project_types/theme/commands/deploy.rb +38 -0
- data/lib/project_types/theme/commands/generate.rb +20 -0
- data/lib/project_types/theme/commands/generate/env.rb +79 -0
- data/lib/project_types/theme/commands/push.rb +55 -0
- data/lib/project_types/theme/commands/serve.rb +31 -0
- data/lib/project_types/theme/forms/connect.rb +34 -0
- data/lib/project_types/theme/forms/create.rb +22 -0
- data/lib/project_types/theme/messages/messages.rb +147 -0
- data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
- data/lib/project_types/theme/themekit.rb +113 -0
- data/lib/rubygems_plugin.rb +3 -3
- data/lib/shopify-cli/admin_api.rb +52 -12
- data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
- data/lib/shopify-cli/admin_api/schema.rb +3 -3
- data/lib/shopify-cli/api.rb +38 -37
- data/lib/shopify-cli/command.rb +1 -1
- data/lib/shopify-cli/commands.rb +9 -9
- data/lib/shopify-cli/commands/config.rb +28 -28
- data/lib/shopify-cli/commands/connect.rb +35 -18
- data/lib/shopify-cli/commands/create.rb +5 -5
- data/lib/shopify-cli/commands/help.rb +6 -6
- data/lib/shopify-cli/commands/logout.rb +3 -3
- data/lib/shopify-cli/commands/system.rb +40 -31
- data/lib/shopify-cli/commands/version.rb +2 -2
- data/lib/shopify-cli/context.rb +43 -22
- data/lib/shopify-cli/core.rb +4 -4
- data/lib/shopify-cli/core/entry_point.rb +6 -6
- data/lib/shopify-cli/core/executor.rb +1 -1
- data/lib/shopify-cli/core/help_resolver.rb +2 -2
- data/lib/shopify-cli/core/monorail.rb +21 -19
- data/lib/shopify-cli/db.rb +2 -2
- data/lib/shopify-cli/feature.rb +1 -3
- data/lib/shopify-cli/form.rb +1 -1
- data/lib/shopify-cli/git.rb +17 -17
- data/lib/shopify-cli/helpers.rb +1 -1
- data/lib/shopify-cli/helpers/haikunator.rb +1 -1
- data/lib/shopify-cli/heroku.rb +28 -28
- data/lib/shopify-cli/http_request.rb +27 -0
- data/lib/shopify-cli/js_deps.rb +13 -13
- data/lib/shopify-cli/js_system.rb +5 -5
- data/lib/shopify-cli/lazy_delegator.rb +55 -0
- data/lib/shopify-cli/messages/messages.rb +24 -10
- data/lib/shopify-cli/method_object.rb +104 -0
- data/lib/shopify-cli/oauth.rb +25 -25
- data/lib/shopify-cli/oauth/servlet.rb +9 -9
- data/lib/shopify-cli/options.rb +3 -3
- data/lib/shopify-cli/packager.rb +24 -24
- data/lib/shopify-cli/partners_api.rb +38 -16
- data/lib/shopify-cli/partners_api/organizations.rb +10 -10
- data/lib/shopify-cli/process_supervision.rb +8 -8
- data/lib/shopify-cli/project.rb +27 -23
- data/lib/shopify-cli/project_type.rb +21 -5
- data/lib/shopify-cli/resolve_constant.rb +25 -0
- data/lib/shopify-cli/resources.rb +1 -1
- data/lib/shopify-cli/resources/env_file.rb +9 -9
- data/lib/shopify-cli/result.rb +432 -0
- data/lib/shopify-cli/shopifolk.rb +84 -0
- data/lib/shopify-cli/sub_command.rb +1 -1
- data/lib/shopify-cli/task.rb +9 -1
- data/lib/shopify-cli/tasks.rb +7 -7
- data/lib/shopify-cli/tasks/create_api_client.rb +17 -6
- data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
- data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
- data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
- data/lib/shopify-cli/tasks/select_org_and_shop.rb +29 -24
- data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
- data/lib/shopify-cli/transform_data_structure.rb +86 -0
- data/lib/shopify-cli/tunnel.rb +36 -30
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +57 -51
- data/shopify-cli.gemspec +6 -6
- data/shopify.fish +1 -1
- data/shopify.sh +1 -1
- data/vendor/deps/cli-kit/REVISION +1 -1
- data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
- data/vendor/deps/cli-ui/REVISION +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
- data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
- data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
- data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
- data/vendor/deps/webrick/.gitignore +9 -0
- data/vendor/deps/webrick/Gemfile +3 -0
- data/vendor/deps/webrick/LICENSE.txt +22 -0
- data/vendor/deps/webrick/README.md +61 -0
- data/vendor/deps/webrick/Rakefile +10 -0
- data/vendor/deps/webrick/lib/webrick.rb +232 -0
- data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
- data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
- data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
- data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
- data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
- data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
- data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
- data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
- data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
- data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
- data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
- data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
- data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
- data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
- data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
- data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
- data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
- data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
- data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
- data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
- data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
- data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
- data/vendor/deps/webrick/webrick.gemspec +74 -0
- data/vendor/gen/template/bin/update-deps +9 -9
- metadata +84 -29
- data/docs/Gemfile +0 -5
- data/docs/Gemfile.lock +0 -258
- data/docs/_data/nav.yml +0 -35
- data/docs/_includes/footer.html +0 -15
- data/docs/_includes/head.html +0 -19
- data/docs/_includes/sidebar_nav.html +0 -22
- data/docs/_includes/toc.html +0 -112
- data/docs/_layouts/default.html +0 -79
- data/docs/css/docs.css +0 -157
- data/docs/images/header.png +0 -0
- data/docs/installing-ruby.md +0 -28
- data/lib/project_types/extension/features/argo/admin.rb +0 -20
- data/lib/project_types/extension/features/argo/base.rb +0 -129
- data/lib/project_types/extension/features/argo/checkout.rb +0 -20
- data/lib/project_types/extension/forms/register.rb +0 -47
- data/lib/project_types/extension/models/type.rb +0 -81
- data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
- data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
- data/lib/project_types/node/commands/generate/billing.rb +0 -39
- data/lib/project_types/node/commands/generate/page.rb +0 -59
- data/lib/project_types/node/commands/generate/webhook.rb +0 -37
- data/lib/project_types/script/layers/domain/script.rb +0 -18
- data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
- data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
- data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
- data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
6eadd6c7f7fc9217008c2cfb0bc3101cb6cf3b41
|
|
@@ -61,7 +61,7 @@ module CLI
|
|
|
61
61
|
#
|
|
62
62
|
# @param msg [String] the message to log
|
|
63
63
|
def debug(msg)
|
|
64
|
-
$stdout.puts CLI::UI.fmt(msg) if
|
|
64
|
+
$stdout.puts CLI::UI.fmt(msg) if debug?
|
|
65
65
|
@debug_logger.debug(format_debug(msg))
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -73,7 +73,7 @@ module CLI
|
|
|
73
73
|
"[#{CLI::UI::StdoutRouter.current_id[:id]}] #{msg}"
|
|
74
74
|
end
|
|
75
75
|
|
|
76
|
-
def
|
|
76
|
+
def debug?
|
|
77
77
|
val = ENV[@env_debug_name]
|
|
78
78
|
val && val != '0' && val != ''
|
|
79
79
|
end
|
|
@@ -94,11 +94,11 @@ module CLI
|
|
|
94
94
|
delegate_open3(*a, sudo: sudo, env: env, method: :popen2, **kwargs, &block)
|
|
95
95
|
end
|
|
96
96
|
|
|
97
|
-
def popen2e(*a, sudo: false, env: ENV, **kwargs)
|
|
97
|
+
def popen2e(*a, sudo: false, env: ENV, **kwargs, &block)
|
|
98
98
|
delegate_open3(*a, sudo: sudo, env: env, method: :popen2e, **kwargs, &block)
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
-
def popen3(*a, sudo: false, env: ENV, **kwargs)
|
|
101
|
+
def popen3(*a, sudo: false, env: ENV, **kwargs, &block)
|
|
102
102
|
delegate_open3(*a, sudo: sudo, env: env, method: :popen3, **kwargs, &block)
|
|
103
103
|
end
|
|
104
104
|
|
|
@@ -112,7 +112,7 @@ module CLI
|
|
|
112
112
|
# - `**kwargs`: additional keyword arguments to pass to Process.spawn
|
|
113
113
|
#
|
|
114
114
|
# #### Returns
|
|
115
|
-
# - `status`:
|
|
115
|
+
# - `status`: The `Process:Status` result for the command execution
|
|
116
116
|
#
|
|
117
117
|
# #### Usage
|
|
118
118
|
# `stat = CLI::Kit::System.system('ls', 'a_folder')`
|
data/vendor/deps/cli-ui/REVISION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
168ce68b31d8436b2b222d6f063e5c7225785bd4
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
module CLI
|
|
2
2
|
module UI
|
|
3
|
-
autoload :ANSI,
|
|
4
|
-
autoload :Glyph,
|
|
5
|
-
autoload :Color,
|
|
6
|
-
autoload :Frame,
|
|
7
|
-
autoload :OS,
|
|
8
|
-
autoload :Printer,
|
|
9
|
-
autoload :Progress,
|
|
10
|
-
autoload :Prompt,
|
|
11
|
-
autoload :Terminal,
|
|
12
|
-
autoload :Truncater,
|
|
13
|
-
autoload :Formatter,
|
|
14
|
-
autoload :Spinner,
|
|
15
|
-
autoload :Widgets,
|
|
3
|
+
autoload :ANSI, 'cli/ui/ansi'
|
|
4
|
+
autoload :Glyph, 'cli/ui/glyph'
|
|
5
|
+
autoload :Color, 'cli/ui/color'
|
|
6
|
+
autoload :Frame, 'cli/ui/frame'
|
|
7
|
+
autoload :OS, 'cli/ui/os'
|
|
8
|
+
autoload :Printer, 'cli/ui/printer'
|
|
9
|
+
autoload :Progress, 'cli/ui/progress'
|
|
10
|
+
autoload :Prompt, 'cli/ui/prompt'
|
|
11
|
+
autoload :Terminal, 'cli/ui/terminal'
|
|
12
|
+
autoload :Truncater, 'cli/ui/truncater'
|
|
13
|
+
autoload :Formatter, 'cli/ui/formatter'
|
|
14
|
+
autoload :Spinner, 'cli/ui/spinner'
|
|
15
|
+
autoload :Widgets, 'cli/ui/widgets'
|
|
16
|
+
autoload :Wrap, 'cli/ui/wrap'
|
|
16
17
|
|
|
17
18
|
# Convenience accessor to +CLI::UI::Spinner::SpinGroup+
|
|
18
19
|
SpinGroup = Spinner::SpinGroup
|
|
@@ -29,7 +30,7 @@ module CLI
|
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
# Color resolution using +CLI::UI::Color.lookup+
|
|
32
|
-
# Will lookup using +Color.lookup+
|
|
33
|
+
# Will lookup using +Color.lookup+ unless it's already a CLI::UI::Color (or nil)
|
|
33
34
|
#
|
|
34
35
|
# ==== Attributes
|
|
35
36
|
#
|
|
@@ -37,26 +38,25 @@ module CLI
|
|
|
37
38
|
#
|
|
38
39
|
def self.resolve_color(input)
|
|
39
40
|
case input
|
|
40
|
-
when
|
|
41
|
-
CLI::UI::Color.lookup(input)
|
|
42
|
-
else
|
|
41
|
+
when CLI::UI::Color, nil
|
|
43
42
|
input
|
|
43
|
+
else
|
|
44
|
+
CLI::UI::Color.lookup(input)
|
|
44
45
|
end
|
|
45
46
|
end
|
|
46
47
|
|
|
47
48
|
# Frame style resolution using +CLI::UI::Frame::FrameStyle.lookup+.
|
|
48
|
-
# Will lookup using +FrameStyle.lookup+
|
|
49
|
-
# we assume it's a valid FrameStyle
|
|
49
|
+
# Will lookup using +FrameStyle.lookup+ unless it's already a CLI::UI::Frame::FrameStyle(or nil)
|
|
50
50
|
#
|
|
51
51
|
# ==== Attributes
|
|
52
52
|
#
|
|
53
53
|
# * +input+ - frame style to resolve
|
|
54
54
|
def self.resolve_style(input)
|
|
55
55
|
case input
|
|
56
|
-
when
|
|
57
|
-
CLI::UI::Frame::FrameStyle.lookup(input)
|
|
58
|
-
else
|
|
56
|
+
when CLI::UI::Frame::FrameStyle, nil
|
|
59
57
|
input
|
|
58
|
+
else
|
|
59
|
+
CLI::UI::Frame::FrameStyle.lookup(input)
|
|
60
60
|
end
|
|
61
61
|
end
|
|
62
62
|
|
|
@@ -114,6 +114,10 @@ module CLI
|
|
|
114
114
|
CLI::UI::Formatter.new(input).format(enable_color: enable_color)
|
|
115
115
|
end
|
|
116
116
|
|
|
117
|
+
def self.wrap(input)
|
|
118
|
+
CLI::UI::Wrap.new(input).wrap
|
|
119
|
+
end
|
|
120
|
+
|
|
117
121
|
# Convenience Method for +CLI::UI::Printer.puts+
|
|
118
122
|
#
|
|
119
123
|
# ==== Attributes
|
|
@@ -21,6 +21,8 @@ module CLI
|
|
|
21
21
|
when 0x200d # zero-width joiner
|
|
22
22
|
zwj = true
|
|
23
23
|
acc
|
|
24
|
+
when "\n"
|
|
25
|
+
acc
|
|
24
26
|
else
|
|
25
27
|
acc + 1
|
|
26
28
|
end
|
|
@@ -138,17 +140,13 @@ module CLI
|
|
|
138
140
|
# Move to the next line
|
|
139
141
|
#
|
|
140
142
|
def self.next_line
|
|
141
|
-
|
|
142
|
-
cmd += control('1', 'D') if CLI::UI::OS.current.shift_cursor_on_line_reset?
|
|
143
|
-
cmd
|
|
143
|
+
cursor_down + cursor_horizontal_absolute
|
|
144
144
|
end
|
|
145
145
|
|
|
146
146
|
# Move to the previous line
|
|
147
147
|
#
|
|
148
148
|
def self.previous_line
|
|
149
|
-
|
|
150
|
-
cmd += control('1', 'D') if CLI::UI::OS.current.shift_cursor_on_line_reset?
|
|
151
|
-
cmd
|
|
149
|
+
cursor_up + cursor_horizontal_absolute
|
|
152
150
|
end
|
|
153
151
|
|
|
154
152
|
def self.clear_to_end_of_line
|
|
@@ -90,7 +90,7 @@ module CLI
|
|
|
90
90
|
|
|
91
91
|
t_start = Time.now
|
|
92
92
|
CLI::UI.raw do
|
|
93
|
-
print
|
|
93
|
+
print(prefix.chop)
|
|
94
94
|
puts frame_style.open(text, color: color)
|
|
95
95
|
end
|
|
96
96
|
FrameStack.push(color: color, style: frame_style)
|
|
@@ -153,7 +153,7 @@ module CLI
|
|
|
153
153
|
frame_style = CLI::UI.resolve_style(frame_style) || fs_item.frame_style
|
|
154
154
|
|
|
155
155
|
CLI::UI.raw do
|
|
156
|
-
print
|
|
156
|
+
print(prefix.chop)
|
|
157
157
|
puts frame_style.divider(text, color: color)
|
|
158
158
|
end
|
|
159
159
|
|
|
@@ -197,7 +197,7 @@ module CLI
|
|
|
197
197
|
end
|
|
198
198
|
|
|
199
199
|
CLI::UI.raw do
|
|
200
|
-
print
|
|
200
|
+
print(prefix.chop)
|
|
201
201
|
puts frame_style.close(text, color: color, **kwargs)
|
|
202
202
|
end
|
|
203
203
|
end
|
|
@@ -5,13 +5,12 @@ module CLI
|
|
|
5
5
|
COLOR_ENVVAR = 'CLI_FRAME_STACK'
|
|
6
6
|
STYLE_ENVVAR = 'CLI_STYLE_STACK'
|
|
7
7
|
|
|
8
|
-
StackItem
|
|
9
|
-
|
|
10
|
-
@color ||= CLI::UI.resolve_color(color_name)
|
|
11
|
-
end
|
|
8
|
+
class StackItem
|
|
9
|
+
attr_reader :color, :frame_style
|
|
12
10
|
|
|
13
|
-
def
|
|
14
|
-
@
|
|
11
|
+
def initialize(color_name, style_name)
|
|
12
|
+
@color = CLI::UI.resolve_color(color_name)
|
|
13
|
+
@frame_style = CLI::UI.resolve_style(style_name)
|
|
15
14
|
end
|
|
16
15
|
end
|
|
17
16
|
|
|
@@ -55,7 +54,7 @@ module CLI
|
|
|
55
54
|
end
|
|
56
55
|
end
|
|
57
56
|
|
|
58
|
-
item ||= StackItem.new(color
|
|
57
|
+
item ||= StackItem.new(color, style)
|
|
59
58
|
|
|
60
59
|
curr = items
|
|
61
60
|
curr << item
|
|
@@ -85,8 +84,8 @@ module CLI
|
|
|
85
84
|
styles = []
|
|
86
85
|
|
|
87
86
|
items.each do |item|
|
|
88
|
-
colors << item.
|
|
89
|
-
styles << item.
|
|
87
|
+
colors << item.color.name
|
|
88
|
+
styles << item.frame_style.name
|
|
90
89
|
end
|
|
91
90
|
|
|
92
91
|
ENV[COLOR_ENVVAR] = colors.join(':')
|
|
@@ -39,7 +39,7 @@ module CLI
|
|
|
39
39
|
def message
|
|
40
40
|
keys = FrameStyle.loaded_styles.map(&:inspect).join(',')
|
|
41
41
|
"invalid frame style: #{@name.inspect}" \
|
|
42
|
-
"-- must be one of CLI::UI::Frame::FrameStyle.loaded_styles " \
|
|
42
|
+
" -- must be one of CLI::UI::Frame::FrameStyle.loaded_styles " \
|
|
43
43
|
"(#{keys})"
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -57,6 +57,7 @@ module CLI
|
|
|
57
57
|
BUG = new('b', 0x1f41b, '!', Color::WHITE) # Bug emoji (🐛)
|
|
58
58
|
CHEVRON = new('>', 0xbb, '»', Color::YELLOW) # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (»)
|
|
59
59
|
HOURGLASS = new('H', [0x231b, 0xfe0e], 'H', Color::BLUE) # HOURGLASS + VARIATION SELECTOR 15 (⌛︎)
|
|
60
|
+
WARNING = new('!', [0x26a0, 0xfe0f], '!', Color::YELLOW) # WARNING SIGN + VARIATION SELECTOR 16 (⚠️ )
|
|
60
61
|
|
|
61
62
|
# Looks up a glyph by name
|
|
62
63
|
#
|
|
@@ -18,6 +18,7 @@ module CLI
|
|
|
18
18
|
# * +:encoding+ - Force the output to be in a certain encoding. Defaults to UTF-8.
|
|
19
19
|
# * +:format+ - Whether to format the string using CLI::UI.fmt. Defaults to true.
|
|
20
20
|
# * +:graceful+ - Whether to gracefully ignore common I/O errors. Defaults to true.
|
|
21
|
+
# * +:wrap+ - Whether to wrap text at word boundaries to terminal width. Defaults to true.
|
|
21
22
|
#
|
|
22
23
|
# ==== Returns
|
|
23
24
|
# Returns whether the message was successfully printed,
|
|
@@ -25,11 +26,22 @@ module CLI
|
|
|
25
26
|
#
|
|
26
27
|
# ==== Example
|
|
27
28
|
#
|
|
28
|
-
# CLI::UI::Printer.puts('{x} Ouch',
|
|
29
|
-
#
|
|
30
|
-
def self.puts(
|
|
29
|
+
# CLI::UI::Printer.puts('{{x}} Ouch', to: $stderr)
|
|
30
|
+
#
|
|
31
|
+
def self.puts(
|
|
32
|
+
msg,
|
|
33
|
+
frame_color:
|
|
34
|
+
nil,
|
|
35
|
+
to:
|
|
36
|
+
$stdout,
|
|
37
|
+
encoding: Encoding::UTF_8,
|
|
38
|
+
format: true,
|
|
39
|
+
graceful: true,
|
|
40
|
+
wrap: true
|
|
41
|
+
)
|
|
31
42
|
msg = (+msg).force_encoding(encoding) if encoding
|
|
32
43
|
msg = CLI::UI.fmt(msg) if format
|
|
44
|
+
msg = CLI::UI.wrap(msg) if wrap
|
|
33
45
|
|
|
34
46
|
if frame_color
|
|
35
47
|
CLI::UI::Frame.with_frame_color_override(frame_color) { to.puts(msg) }
|
|
@@ -334,22 +334,15 @@ module CLI
|
|
|
334
334
|
end
|
|
335
335
|
|
|
336
336
|
def read_char
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
337
|
+
if $stdin.tty? && !ENV['TEST']
|
|
338
|
+
$stdin.getch # raw mode for tty
|
|
339
|
+
else
|
|
340
|
+
$stdin.getc
|
|
340
341
|
end
|
|
341
342
|
rescue IOError
|
|
342
343
|
"\e"
|
|
343
344
|
end
|
|
344
345
|
|
|
345
|
-
def raw_tty!
|
|
346
|
-
if ENV['TEST'] || !$stdin.tty?
|
|
347
|
-
yield
|
|
348
|
-
else
|
|
349
|
-
$stdin.raw { yield }
|
|
350
|
-
end
|
|
351
|
-
end
|
|
352
|
-
|
|
353
346
|
def presented_options(recalculate: false)
|
|
354
347
|
return @presented_options unless recalculate
|
|
355
348
|
|
|
@@ -12,11 +12,9 @@ module CLI
|
|
|
12
12
|
|
|
13
13
|
RUNES = CLI::UI::OS.current.supports_emoji? ? %w(⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏).freeze : %w(\\ | / - \\ | / -).freeze
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
GLYPHS = colors.zip(RUNES).map(&:join)
|
|
19
|
-
end
|
|
15
|
+
colors = [CLI::UI::Color::CYAN.code] * (RUNES.size / 2).ceil +
|
|
16
|
+
[CLI::UI::Color::MAGENTA.code] * (RUNES.size / 2).to_i
|
|
17
|
+
GLYPHS = colors.zip(RUNES).map(&:join)
|
|
20
18
|
|
|
21
19
|
class << self
|
|
22
20
|
attr_accessor(:index)
|
|
@@ -23,17 +23,17 @@ module CLI
|
|
|
23
23
|
|
|
24
24
|
def self.winsize
|
|
25
25
|
@winsize ||= begin
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
winsize = IO.console.winsize
|
|
27
|
+
setup_winsize_trap
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
29
|
+
if winsize.any?(&:zero?)
|
|
30
|
+
[DEFAULT_HEIGHT, DEFAULT_WIDTH]
|
|
31
|
+
else
|
|
32
|
+
winsize
|
|
33
|
+
end
|
|
34
|
+
rescue
|
|
35
|
+
[DEFAULT_HEIGHT, DEFAULT_WIDTH]
|
|
36
|
+
end
|
|
37
37
|
end
|
|
38
38
|
|
|
39
39
|
def self.setup_winsize_trap
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
require 'cli/ui'
|
|
3
|
+
require 'cli/ui/frame/frame_stack'
|
|
4
|
+
require 'cli/ui/frame/frame_style'
|
|
5
|
+
|
|
6
|
+
module CLI
|
|
7
|
+
module UI
|
|
8
|
+
class Wrap
|
|
9
|
+
def initialize(input)
|
|
10
|
+
@input = input
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def wrap
|
|
14
|
+
max_width = Terminal.width - Frame.prefix_width
|
|
15
|
+
width = 0
|
|
16
|
+
final = []
|
|
17
|
+
# Create an alternation of format codes of parameter lengths 1-20, since + and {1,n} not allowed in lookbehind
|
|
18
|
+
format_codes = (1..20).map { |n| /\x1b\[[\d;]{#{n}}m/ }.join('|')
|
|
19
|
+
codes = ''
|
|
20
|
+
@input.split(/(?=\s|\x1b\[[\d;]+m|\r)|(?<=\s|#{format_codes})/).each do |token|
|
|
21
|
+
case token
|
|
22
|
+
when '\x1B[0?m'
|
|
23
|
+
codes = ''
|
|
24
|
+
final << token
|
|
25
|
+
when /\x1b\[[\d;]+m/
|
|
26
|
+
codes += token # Track in use format codes so that they are resent after frame coloring
|
|
27
|
+
final << token
|
|
28
|
+
when "\n"
|
|
29
|
+
final << "\n#{codes}"
|
|
30
|
+
width = 0
|
|
31
|
+
when /\s/
|
|
32
|
+
token_width = ANSI.printing_width(token)
|
|
33
|
+
if width + token_width <= max_width
|
|
34
|
+
final << token
|
|
35
|
+
width += token_width
|
|
36
|
+
else
|
|
37
|
+
final << "\n#{codes}"
|
|
38
|
+
width = 0
|
|
39
|
+
end
|
|
40
|
+
else
|
|
41
|
+
token_width = ANSI.printing_width(token)
|
|
42
|
+
if width + token_width <= max_width
|
|
43
|
+
final << token
|
|
44
|
+
width += token_width
|
|
45
|
+
else
|
|
46
|
+
final << "\n#{codes}"
|
|
47
|
+
final << token
|
|
48
|
+
width = token_width
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
final.join
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
|
|
2
|
+
|
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
|
4
|
+
modification, are permitted provided that the following conditions
|
|
5
|
+
are met:
|
|
6
|
+
1. Redistributions of source code must retain the above copyright
|
|
7
|
+
notice, this list of conditions and the following disclaimer.
|
|
8
|
+
2. Redistributions in binary form must reproduce the above copyright
|
|
9
|
+
notice, this list of conditions and the following disclaimer in the
|
|
10
|
+
documentation and/or other materials provided with the distribution.
|
|
11
|
+
|
|
12
|
+
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
13
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
14
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
15
|
+
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
16
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
17
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
18
|
+
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
19
|
+
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
20
|
+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
21
|
+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
22
|
+
SUCH DAMAGE.
|