fluid_cli 0.1.2
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 +7 -0
- data/README.md +1 -0
- data/dev.yml +5 -0
- data/exe/fluid +24 -0
- data/lib/fluid_cli/api.rb +135 -0
- data/lib/fluid_cli/assets/post_auth_page/index.html.erb +34 -0
- data/lib/fluid_cli/assets/post_auth_page/style.css +58 -0
- data/lib/fluid_cli/command.rb +55 -0
- data/lib/fluid_cli/commands/help.rb +21 -0
- data/lib/fluid_cli/commands/login.rb +30 -0
- data/lib/fluid_cli/commands/logout.rb +38 -0
- data/lib/fluid_cli/commands/switch.rb +23 -0
- data/lib/fluid_cli/commands/theme/common/company_helper.rb +15 -0
- data/lib/fluid_cli/commands/theme/common/root_helper.rb +95 -0
- data/lib/fluid_cli/commands/theme/dev.rb +61 -0
- data/lib/fluid_cli/commands/theme/help.rb +21 -0
- data/lib/fluid_cli/commands/theme/init.rb +46 -0
- data/lib/fluid_cli/commands/theme/pull.rb +68 -0
- data/lib/fluid_cli/commands/theme/push.rb +132 -0
- data/lib/fluid_cli/commands/theme.rb +23 -0
- data/lib/fluid_cli/commands/whoami.rb +23 -0
- data/lib/fluid_cli/commands.rb +19 -0
- data/lib/fluid_cli/company_switcher.rb +69 -0
- data/lib/fluid_cli/context.rb +691 -0
- data/lib/fluid_cli/db.rb +114 -0
- data/lib/fluid_cli/entry_point.rb +10 -0
- data/lib/fluid_cli/environment.rb +32 -0
- data/lib/fluid_cli/file_system_listener.rb +29 -0
- data/lib/fluid_cli/form.rb +42 -0
- data/lib/fluid_cli/git.rb +319 -0
- data/lib/fluid_cli/http_request.rb +54 -0
- data/lib/fluid_cli/identity_auth/servlet.rb +39 -0
- data/lib/fluid_cli/identity_auth.rb +126 -0
- data/lib/fluid_cli/options.rb +38 -0
- data/lib/fluid_cli/theme/dev_server/certificate_manager.rb +79 -0
- data/lib/fluid_cli/theme/dev_server/errors.rb +9 -0
- data/lib/fluid_cli/theme/dev_server/header_hash.rb +98 -0
- data/lib/fluid_cli/theme/dev_server/hooks/file_change_hook.rb +39 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/resources/hot-reload-no-script.html +27 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/resources/hot_reload.js +28 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/resources/sse_client.js +43 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/resources/theme.js +16 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload/script_injector.rb +54 -0
- data/lib/fluid_cli/theme/dev_server/hot_reload.rb +75 -0
- data/lib/fluid_cli/theme/dev_server/local_assets.rb +92 -0
- data/lib/fluid_cli/theme/dev_server/proxy.rb +235 -0
- data/lib/fluid_cli/theme/dev_server/proxy_param_builder.rb +82 -0
- data/lib/fluid_cli/theme/dev_server/reload_mode.rb +34 -0
- data/lib/fluid_cli/theme/dev_server/sse.rb +75 -0
- data/lib/fluid_cli/theme/dev_server/watcher.rb +57 -0
- data/lib/fluid_cli/theme/dev_server/web_server.rb +140 -0
- data/lib/fluid_cli/theme/dev_server.rb +289 -0
- data/lib/fluid_cli/theme/development_theme.rb +101 -0
- data/lib/fluid_cli/theme/file.rb +105 -0
- data/lib/fluid_cli/theme/forms/select.rb +33 -0
- data/lib/fluid_cli/theme/mime_type.rb +34 -0
- data/lib/fluid_cli/theme/presenters/theme_presenter.rb +49 -0
- data/lib/fluid_cli/theme/presenters/themes_presenter.rb +31 -0
- data/lib/fluid_cli/theme/root.rb +62 -0
- data/lib/fluid_cli/theme/syncer/checksums.rb +66 -0
- data/lib/fluid_cli/theme/syncer/downloader.rb +54 -0
- data/lib/fluid_cli/theme/syncer/error_reporter.rb +45 -0
- data/lib/fluid_cli/theme/syncer/merger.rb +53 -0
- data/lib/fluid_cli/theme/syncer/operation.rb +58 -0
- data/lib/fluid_cli/theme/syncer/standard_reporter.rb +32 -0
- data/lib/fluid_cli/theme/syncer/unsupported_script_warning.rb +90 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/apply_to_all.rb +41 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/apply_to_all_form.rb +37 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/base_strategy_form.rb +64 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/select_delete_strategy.rb +29 -0
- data/lib/fluid_cli/theme/syncer/uploader/forms/select_update_strategy.rb +30 -0
- data/lib/fluid_cli/theme/syncer/uploader/json_delete_handler.rb +49 -0
- data/lib/fluid_cli/theme/syncer/uploader/json_update_handler.rb +71 -0
- data/lib/fluid_cli/theme/syncer/uploader.rb +105 -0
- data/lib/fluid_cli/theme/syncer.rb +412 -0
- data/lib/fluid_cli/theme/theme.rb +186 -0
- data/lib/fluid_cli/theme/ui/sync_progress_bar.rb +22 -0
- data/lib/fluid_cli/thread_pool/job.rb +35 -0
- data/lib/fluid_cli/thread_pool.rb +49 -0
- data/lib/fluid_cli/version.rb +3 -0
- data/lib/fluid_cli.rb +59 -0
- data/vendor/deps/base64/.document +5 -0
- data/vendor/deps/base64/.gitignore +9 -0
- data/vendor/deps/base64/BSDL +22 -0
- data/vendor/deps/base64/COPYING +56 -0
- data/vendor/deps/base64/Gemfile +9 -0
- data/vendor/deps/base64/LEGAL +60 -0
- data/vendor/deps/base64/README.md +48 -0
- data/vendor/deps/base64/Rakefile +31 -0
- data/vendor/deps/base64/base64.gemspec +28 -0
- data/vendor/deps/base64/bin/console +14 -0
- data/vendor/deps/base64/bin/setup +8 -0
- data/vendor/deps/base64/lib/base64.rb +382 -0
- data/vendor/deps/base64/sig/base64.rbs +358 -0
- data/vendor/deps/base64/test/base64/test_base64.rb +115 -0
- data/vendor/deps/base64/test_sig/test_base64.rb +44 -0
- data/vendor/deps/cli-kit/REVISION +1 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/definition.rb +286 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/evaluation.rb +215 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/parser/node.rb +128 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/parser.rb +125 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args/tokenizer.rb +130 -0
- data/vendor/deps/cli-kit/lib/cli/kit/args.rb +16 -0
- data/vendor/deps/cli-kit/lib/cli/kit/base_command.rb +30 -0
- data/vendor/deps/cli-kit/lib/cli/kit/command_help.rb +268 -0
- data/vendor/deps/cli-kit/lib/cli/kit/command_registry.rb +150 -0
- data/vendor/deps/cli-kit/lib/cli/kit/config.rb +137 -0
- data/vendor/deps/cli-kit/lib/cli/kit/core_ext.rb +28 -0
- data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +166 -0
- data/vendor/deps/cli-kit/lib/cli/kit/executor.rb +92 -0
- data/vendor/deps/cli-kit/lib/cli/kit/ini.rb +91 -0
- data/vendor/deps/cli-kit/lib/cli/kit/levenshtein.rb +92 -0
- data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +94 -0
- data/vendor/deps/cli-kit/lib/cli/kit/opts.rb +248 -0
- data/vendor/deps/cli-kit/lib/cli/kit/parse_args.rb +55 -0
- data/vendor/deps/cli-kit/lib/cli/kit/resolver.rb +66 -0
- data/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +260 -0
- data/vendor/deps/cli-kit/lib/cli/kit/support.rb +11 -0
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +290 -0
- data/vendor/deps/cli-kit/lib/cli/kit/util.rb +118 -0
- data/vendor/deps/cli-kit/lib/cli/kit/version.rb +7 -0
- data/vendor/deps/cli-kit/lib/cli/kit.rb +139 -0
- data/vendor/deps/cli-ui/REVISION +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +218 -0
- data/vendor/deps/cli-ui/lib/cli/ui/color.rb +101 -0
- data/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +219 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +67 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +179 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +152 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +127 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +286 -0
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +92 -0
- data/vendor/deps/cli-ui/lib/cli/ui/os.rb +63 -0
- data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +64 -0
- data/vendor/deps/cli-ui/lib/cli/ui/progress.rb +132 -0
- data/vendor/deps/cli-ui/lib/cli/ui/progress_reporter.rb +209 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +583 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +36 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +381 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/async.rb +48 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +602 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +79 -0
- data/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +399 -0
- data/vendor/deps/cli-ui/lib/cli/ui/table.rb +83 -0
- data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +55 -0
- data/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +106 -0
- data/vendor/deps/cli-ui/lib/cli/ui/version.rb +8 -0
- data/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +46 -0
- data/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +79 -0
- data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +89 -0
- data/vendor/deps/cli-ui/lib/cli/ui/work_queue.rb +142 -0
- data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +61 -0
- data/vendor/deps/cli-ui/lib/cli/ui.rb +359 -0
- data/vendor/deps/cli-ui/vendor/reentrant_mutex.rb +78 -0
- data/vendor/deps/debug/CONTRIBUTING.md +573 -0
- data/vendor/deps/debug/Gemfile +10 -0
- data/vendor/deps/debug/LICENSE.txt +22 -0
- data/vendor/deps/debug/README.md +996 -0
- data/vendor/deps/debug/Rakefile +57 -0
- data/vendor/deps/debug/TODO.md +23 -0
- data/vendor/deps/debug/debug.gemspec +33 -0
- data/vendor/deps/debug/exe/rdbg +53 -0
- data/vendor/deps/debug/ext/debug/Makefile +273 -0
- data/vendor/deps/debug/ext/debug/debug.c +228 -0
- data/vendor/deps/debug/ext/debug/debug_version.h +1 -0
- data/vendor/deps/debug/ext/debug/extconf.rb +27 -0
- data/vendor/deps/debug/ext/debug/iseq_collector.c +93 -0
- data/vendor/deps/debug/lib/debug/abbrev_command.rb +77 -0
- data/vendor/deps/debug/lib/debug/breakpoint.rb +556 -0
- data/vendor/deps/debug/lib/debug/client.rb +263 -0
- data/vendor/deps/debug/lib/debug/color.rb +123 -0
- data/vendor/deps/debug/lib/debug/config.rb +592 -0
- data/vendor/deps/debug/lib/debug/console.rb +224 -0
- data/vendor/deps/debug/lib/debug/dap_custom/traceInspector.rb +336 -0
- data/vendor/deps/debug/lib/debug/debug.bundle +0 -0
- data/vendor/deps/debug/lib/debug/frame_info.rb +190 -0
- data/vendor/deps/debug/lib/debug/irb_integration.rb +37 -0
- data/vendor/deps/debug/lib/debug/local.rb +115 -0
- data/vendor/deps/debug/lib/debug/open.rb +13 -0
- data/vendor/deps/debug/lib/debug/open_nonstop.rb +15 -0
- data/vendor/deps/debug/lib/debug/prelude.rb +50 -0
- data/vendor/deps/debug/lib/debug/server.rb +534 -0
- data/vendor/deps/debug/lib/debug/server_cdp.rb +1348 -0
- data/vendor/deps/debug/lib/debug/server_dap.rb +1108 -0
- data/vendor/deps/debug/lib/debug/session.rb +2667 -0
- data/vendor/deps/debug/lib/debug/source_repository.rb +150 -0
- data/vendor/deps/debug/lib/debug/start.rb +5 -0
- data/vendor/deps/debug/lib/debug/thread_client.rb +1457 -0
- data/vendor/deps/debug/lib/debug/tracer.rb +241 -0
- data/vendor/deps/debug/lib/debug/version.rb +5 -0
- data/vendor/deps/debug/lib/debug.rb +9 -0
- data/vendor/deps/debug/misc/README.md.erb +660 -0
- data/vendor/deps/listen/.github/release-drafter.yml +17 -0
- data/vendor/deps/listen/.github/workflows/development.yml +67 -0
- data/vendor/deps/listen/.github/workflows/push.yml +12 -0
- data/vendor/deps/listen/.gitignore +28 -0
- data/vendor/deps/listen/.rspec +3 -0
- data/vendor/deps/listen/.rubocop.yml +283 -0
- data/vendor/deps/listen/.yardopts +11 -0
- data/vendor/deps/listen/CHANGELOG.md +1 -0
- data/vendor/deps/listen/CONTRIBUTING.md +45 -0
- data/vendor/deps/listen/Gemfile +33 -0
- data/vendor/deps/listen/Guardfile +26 -0
- data/vendor/deps/listen/LICENSE.txt +22 -0
- data/vendor/deps/listen/README.md +490 -0
- data/vendor/deps/listen/Rakefile +154 -0
- data/vendor/deps/listen/bin/listen +11 -0
- data/vendor/deps/listen/lib/listen/adapter/base.rb +129 -0
- data/vendor/deps/listen/lib/listen/adapter/bsd.rb +104 -0
- data/vendor/deps/listen/lib/listen/adapter/config.rb +31 -0
- data/vendor/deps/listen/lib/listen/adapter/darwin.rb +77 -0
- data/vendor/deps/listen/lib/listen/adapter/linux.rb +108 -0
- data/vendor/deps/listen/lib/listen/adapter/polling.rb +40 -0
- data/vendor/deps/listen/lib/listen/adapter/windows.rb +96 -0
- data/vendor/deps/listen/lib/listen/adapter.rb +43 -0
- data/vendor/deps/listen/lib/listen/backend.rb +40 -0
- data/vendor/deps/listen/lib/listen/change.rb +69 -0
- data/vendor/deps/listen/lib/listen/cli.rb +65 -0
- data/vendor/deps/listen/lib/listen/directory.rb +93 -0
- data/vendor/deps/listen/lib/listen/error.rb +11 -0
- data/vendor/deps/listen/lib/listen/event/config.rb +39 -0
- data/vendor/deps/listen/lib/listen/event/loop.rb +92 -0
- data/vendor/deps/listen/lib/listen/event/processor.rb +128 -0
- data/vendor/deps/listen/lib/listen/event/queue.rb +52 -0
- data/vendor/deps/listen/lib/listen/file.rb +95 -0
- data/vendor/deps/listen/lib/listen/fsm.rb +131 -0
- data/vendor/deps/listen/lib/listen/listener/config.rb +41 -0
- data/vendor/deps/listen/lib/listen/listener.rb +136 -0
- data/vendor/deps/listen/lib/listen/logger.rb +65 -0
- data/vendor/deps/listen/lib/listen/monotonic_time.rb +27 -0
- data/vendor/deps/listen/lib/listen/options.rb +24 -0
- data/vendor/deps/listen/lib/listen/queue_optimizer.rb +129 -0
- data/vendor/deps/listen/lib/listen/record/entry.rb +66 -0
- data/vendor/deps/listen/lib/listen/record/symlink_detector.rb +47 -0
- data/vendor/deps/listen/lib/listen/record.rb +122 -0
- data/vendor/deps/listen/lib/listen/silencer/controller.rb +50 -0
- data/vendor/deps/listen/lib/listen/silencer.rb +106 -0
- data/vendor/deps/listen/lib/listen/thread.rb +54 -0
- data/vendor/deps/listen/lib/listen/version.rb +5 -0
- data/vendor/deps/listen/lib/listen.rb +47 -0
- data/vendor/deps/listen/listen.gemspec +40 -0
- data/vendor/deps/listen/spec/acceptance/listen_spec.rb +320 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/base_spec.rb +101 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/bsd_spec.rb +13 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/config_spec.rb +122 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/darwin_spec.rb +82 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/linux_spec.rb +199 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/polling_spec.rb +83 -0
- data/vendor/deps/listen/spec/lib/listen/adapter/windows_spec.rb +13 -0
- data/vendor/deps/listen/spec/lib/listen/adapter_spec.rb +69 -0
- data/vendor/deps/listen/spec/lib/listen/backend_spec.rb +82 -0
- data/vendor/deps/listen/spec/lib/listen/change_spec.rb +102 -0
- data/vendor/deps/listen/spec/lib/listen/cli_spec.rb +116 -0
- data/vendor/deps/listen/spec/lib/listen/directory_spec.rb +284 -0
- data/vendor/deps/listen/spec/lib/listen/event/config_spec.rb +33 -0
- data/vendor/deps/listen/spec/lib/listen/event/loop_spec.rb +118 -0
- data/vendor/deps/listen/spec/lib/listen/event/processor_spec.rb +250 -0
- data/vendor/deps/listen/spec/lib/listen/event/queue_spec.rb +118 -0
- data/vendor/deps/listen/spec/lib/listen/file_spec.rb +254 -0
- data/vendor/deps/listen/spec/lib/listen/fsm_spec.rb +147 -0
- data/vendor/deps/listen/spec/lib/listen/listener/config_spec.rb +29 -0
- data/vendor/deps/listen/spec/lib/listen/listener_spec.rb +321 -0
- data/vendor/deps/listen/spec/lib/listen/logger_spec.rb +212 -0
- data/vendor/deps/listen/spec/lib/listen/monotonic_time_spec.rb +58 -0
- data/vendor/deps/listen/spec/lib/listen/queue_optimizer_spec.rb +111 -0
- data/vendor/deps/listen/spec/lib/listen/record_spec.rb +424 -0
- data/vendor/deps/listen/spec/lib/listen/silencer/controller_spec.rb +97 -0
- data/vendor/deps/listen/spec/lib/listen/silencer_spec.rb +109 -0
- data/vendor/deps/listen/spec/lib/listen/thread_spec.rb +133 -0
- data/vendor/deps/listen/spec/lib/listen_spec.rb +25 -0
- data/vendor/deps/listen/spec/spec_helper.rb +49 -0
- data/vendor/deps/listen/spec/support/acceptance_helper.rb +260 -0
- data/vendor/deps/listen/spec/support/fixtures_helper.rb +32 -0
- data/vendor/deps/listen/spec/support/platform_helper.rb +17 -0
- data/vendor/deps/observer/.github/dependabot.yml +6 -0
- data/vendor/deps/observer/.github/workflows/test.yml +33 -0
- data/vendor/deps/observer/.gitignore +8 -0
- data/vendor/deps/observer/BSDL +22 -0
- data/vendor/deps/observer/COPYING +56 -0
- data/vendor/deps/observer/Gemfile +9 -0
- data/vendor/deps/observer/README.md +139 -0
- data/vendor/deps/observer/Rakefile +10 -0
- data/vendor/deps/observer/bin/console +14 -0
- data/vendor/deps/observer/bin/setup +8 -0
- data/vendor/deps/observer/lib/observer.rb +229 -0
- data/vendor/deps/observer/observer.gemspec +32 -0
- data/vendor/deps/observer/test/test_observer.rb +66 -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/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/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/httpauth.rb +96 -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/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/httpservlet.rb +23 -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/lib/webrick.rb +232 -0
- data/vendor/deps/webrick/webrick.gemspec +74 -0
- metadata +412 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: d274a741ad9269d0d48c3ab12241f61b2ded2fcc2cbca333ddb99cb5d0cd106a
|
|
4
|
+
data.tar.gz: 3c8d4d513e15143633e3d12b9223a6697d5172a8aa9362d9a82462fa5cf98534
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 02151415ea46eebd33d6acbb23adea014e5f262002a7d6d9664e48f8322f6e3ce988f6acf907037ced608ffc0a83905f66c38980570621563f6533d90981bdc6
|
|
7
|
+
data.tar.gz: 5ab472aed0268946d4dab19b7997dd80c5f4c88deb87a7916977f4d642499a398ef5b12a1ca8a7131ab71a578edaff410ba3f0cd06485d6072eafa25fcefd4b7
|
data/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# fluid_cli
|
data/dev.yml
ADDED
data/exe/fluid
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env ruby --disable-gems
|
|
2
|
+
|
|
3
|
+
Encoding.default_external = Encoding::UTF_8
|
|
4
|
+
Encoding.default_internal = Encoding::UTF_8
|
|
5
|
+
|
|
6
|
+
unshift_path = ->(path) {
|
|
7
|
+
p = File.expand_path("../../#{path}", __FILE__)
|
|
8
|
+
$LOAD_PATH.unshift(p) unless $LOAD_PATH.include?(p)
|
|
9
|
+
}
|
|
10
|
+
unshift_path.call('vendor/deps/cli-ui/lib')
|
|
11
|
+
unshift_path.call('vendor/deps/cli-kit/lib')
|
|
12
|
+
unshift_path.call('vendor/deps/debug/lib')
|
|
13
|
+
unshift_path.call('vendor/deps/webrick/lib')
|
|
14
|
+
unshift_path.call('vendor/deps/base64/lib')
|
|
15
|
+
# unshift_path.call('vendor/deps/listen/lib')
|
|
16
|
+
# unshift_path.call('vendor/deps/observer/lib')
|
|
17
|
+
unshift_path.call('lib')
|
|
18
|
+
|
|
19
|
+
require 'bundler/setup'
|
|
20
|
+
require 'fluid_cli'
|
|
21
|
+
|
|
22
|
+
exit(FluidCLI::ErrorHandler.call do
|
|
23
|
+
FluidCLI::EntryPoint.call(ARGV.dup)
|
|
24
|
+
end)
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
require "fluid_cli"
|
|
2
|
+
require "securerandom"
|
|
3
|
+
|
|
4
|
+
module FluidCLI
|
|
5
|
+
class API
|
|
6
|
+
|
|
7
|
+
class APIRequestError < StandardError
|
|
8
|
+
attr_reader :response
|
|
9
|
+
|
|
10
|
+
def initialize(message = nil, response: nil)
|
|
11
|
+
super(message)
|
|
12
|
+
@response = response
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class APIRequestNotFoundError < APIRequestError; end
|
|
17
|
+
class APIRequestClientError < APIRequestError; end
|
|
18
|
+
class APIRequestUnauthorizedError < APIRequestClientError; end
|
|
19
|
+
class APIRequestForbiddenError < APIRequestClientError; end
|
|
20
|
+
class APIRequestUnexpectedError < APIRequestError; end
|
|
21
|
+
class APIRequestRetriableError < APIRequestError; end
|
|
22
|
+
class APIRequestTimeoutError < APIRequestRetriableError; end
|
|
23
|
+
class APIRequestServerError < APIRequestRetriableError; end
|
|
24
|
+
class APIRequestThrottledError < APIRequestRetriableError; end
|
|
25
|
+
|
|
26
|
+
def initialize(ctx)
|
|
27
|
+
@ctx = ctx
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def get(path:, **args, &block)
|
|
31
|
+
rest_request(method: "GET", path: path, **args, &block)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def put(path:, **args, &block)
|
|
35
|
+
rest_request(method: "PUT", path: path, **args, &block)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def post(path:, **args, &block)
|
|
39
|
+
rest_request(method: "POST", path: path, **args, &block)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def delete(path:, **args, &block)
|
|
43
|
+
rest_request(method: "DELETE", path: path, **args, &block)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def multipart_put(path:, **args, &block)
|
|
47
|
+
rest_request(method: "MULTIPART_PUT", path: path, **args, &block)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def rest_request(path:, query: nil, body: nil, method: "GET", token: nil)
|
|
51
|
+
CLI::Kit::Util.begin do
|
|
52
|
+
url = URI::HTTPS.build(
|
|
53
|
+
host: FluidCLI::API_HOST,
|
|
54
|
+
path: "/api/#{path}",
|
|
55
|
+
query: query,
|
|
56
|
+
)
|
|
57
|
+
resp = request(url: url.to_s, body: body, headers: auth_headers, method: method)
|
|
58
|
+
resp
|
|
59
|
+
|
|
60
|
+
end.retry_after(API::APIRequestUnauthorizedError) do
|
|
61
|
+
FluidCLI::IdentityAuth.new(ctx: @ctx).reauthenticate unless path == "/me"
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def get_company_or_abort
|
|
66
|
+
env_store = FluidCLI::Environment.company
|
|
67
|
+
return env_store unless env_store.nil?
|
|
68
|
+
|
|
69
|
+
if FluidCLI::DB.exists?(:company)
|
|
70
|
+
FluidCLI::DB.get(:company)
|
|
71
|
+
else
|
|
72
|
+
resp = FluidCLI::IdentityAuth.new(ctx: @ctx).attempt_reauthenticate
|
|
73
|
+
@ctx.abort(
|
|
74
|
+
"No company found. Please login again"
|
|
75
|
+
) unless resp
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def request(url:, body: nil, headers: {}, method: "POST")
|
|
82
|
+
CLI::Kit::Util.begin do
|
|
83
|
+
uri = URI.parse(url)
|
|
84
|
+
unless uri.is_a?(URI::HTTP)
|
|
85
|
+
@ctx.abort("Invalid URL: #{url}")
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
# we delay this require so as to avoid a performance hit on starting the CLI
|
|
90
|
+
require "fluid_cli/http_request"
|
|
91
|
+
@ctx.debug("#{method} #{uri} with X-Request-Id: #{headers["X-Request-Id"]}")
|
|
92
|
+
response = if method == "POST"
|
|
93
|
+
HttpRequest.post(uri, body, headers)
|
|
94
|
+
elsif method == "PUT"
|
|
95
|
+
HttpRequest.put(uri, body, headers)
|
|
96
|
+
elsif method == "GET"
|
|
97
|
+
HttpRequest.get(uri, body, headers)
|
|
98
|
+
elsif method == "DELETE"
|
|
99
|
+
HttpRequest.delete(uri, body, headers)
|
|
100
|
+
elsif method == "MULTIPART_PUT"
|
|
101
|
+
HttpRequest.multipart_put(uri, body, headers)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
case response.code.to_i
|
|
106
|
+
when 200..399
|
|
107
|
+
[response.code.to_i, JSON.parse(response.body), response]
|
|
108
|
+
when 401
|
|
109
|
+
raise APIRequestUnauthorizedError.new("#{response.code}\n#{response.body}", response: response)
|
|
110
|
+
when 403
|
|
111
|
+
raise APIRequestForbiddenError.new("#{response.code}\n#{response.body}", response: response)
|
|
112
|
+
when 404
|
|
113
|
+
raise APIRequestNotFoundError.new("#{response.code}\n#{response.body}", response: response)
|
|
114
|
+
when 429
|
|
115
|
+
raise APIRequestThrottledError.new("#{response.code}\n#{response.body}", response: response)
|
|
116
|
+
when 400..499
|
|
117
|
+
raise APIRequestClientError.new("#{response.code}\n#{response.body}", response: response)
|
|
118
|
+
when 500..599
|
|
119
|
+
raise APIRequestServerError.new("#{response.code}\n#{response.body}", response: response)
|
|
120
|
+
else
|
|
121
|
+
raise APIRequestUnexpectedError.new("#{response.code}\n#{response.body}", response: response)
|
|
122
|
+
end
|
|
123
|
+
rescue Errno::ETIMEDOUT, Timeout::Error
|
|
124
|
+
@ctx.debug("timeout in #{method} #{uri} with X-Request-Id: #{headers["X-Request-Id"]}")
|
|
125
|
+
raise APIRequestTimeoutError, "Timeout"
|
|
126
|
+
end.retry_after(APIRequestRetriableError, retries: 3) do |e|
|
|
127
|
+
sleep(1) if e.is_a?(APIRequestThrottledError)
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def auth_headers
|
|
132
|
+
{ "Authorization" => "Bearer #{FluidCLI::Environment.auth_token || FluidCLI::DB.get(:jwt)}" }
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Fluid CLI</title>
|
|
8
|
+
<style><%= locals[:css] %></style>
|
|
9
|
+
<link rel="icon" href="https://cdn.fluid.app/favicon-32x32.png" type="image/png">
|
|
10
|
+
</head>
|
|
11
|
+
|
|
12
|
+
<% if successful %>
|
|
13
|
+
<body class="body-success">
|
|
14
|
+
<div class="app-success">
|
|
15
|
+
<div class="container">
|
|
16
|
+
<h1><%= locals[:message] %></h1>
|
|
17
|
+
<p>You can close this tab and return to your terminal.</p>
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</body>
|
|
21
|
+
<% else %>
|
|
22
|
+
<body class="body-error">
|
|
23
|
+
<div class="app-error">
|
|
24
|
+
<div class="container">
|
|
25
|
+
<h1>Something went wrong!</h1>
|
|
26
|
+
<p><%= locals[:message] %></p>
|
|
27
|
+
<br>
|
|
28
|
+
<br>
|
|
29
|
+
<p>Return to your terminal and try running the previous command again.</p>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</body>
|
|
33
|
+
<% end %>
|
|
34
|
+
</html>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
html {
|
|
2
|
+
font-family: -apple-system, BlinkMacSystemFont, San Francisco, Segoe UI, Roboto, Helvetica Neue, sans-serif;
|
|
3
|
+
text-size-adjust: 100%;
|
|
4
|
+
text-rendering: optimizeLegibility;
|
|
5
|
+
-webkit-font-smoothing: antialiased;
|
|
6
|
+
-moz-osx-font-smoothing: grayscale;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
body {
|
|
10
|
+
font-size: 26px;
|
|
11
|
+
line-height: normal;
|
|
12
|
+
margin: 0;
|
|
13
|
+
padding: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
button, input, optgroup, select, textarea {
|
|
17
|
+
font-family: inherit;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
h1 {
|
|
21
|
+
font-weight: 600;
|
|
22
|
+
font-size: 1em;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
p {
|
|
26
|
+
font-weight: 400;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.body-success {
|
|
30
|
+
color: #F6F6F7;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.body-error {
|
|
34
|
+
color: #202223;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.app-success {
|
|
38
|
+
width: 100vw;
|
|
39
|
+
height: 100vh;
|
|
40
|
+
background-color: #054A49;
|
|
41
|
+
display: flex;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.app-error {
|
|
45
|
+
width: 100vw;
|
|
46
|
+
height: 100vh;
|
|
47
|
+
background-color: #F6F6F7;
|
|
48
|
+
display: flex;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.container {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
width: 100%;
|
|
56
|
+
height: 100%;
|
|
57
|
+
padding-left: 7.5em;
|
|
58
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "fluid_cli"
|
|
3
|
+
|
|
4
|
+
module FluidCLI
|
|
5
|
+
class Command < CLI::Kit::BaseCommand
|
|
6
|
+
attr_writer :ctx
|
|
7
|
+
attr_accessor :options
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
attr_writer :ctx
|
|
11
|
+
|
|
12
|
+
def call(args, command_name, *)
|
|
13
|
+
subcommand, resolved_name = subcommand_registry.lookup_command(args.first)
|
|
14
|
+
if subcommand
|
|
15
|
+
subcommand.ctx = @ctx
|
|
16
|
+
subcommand.call(args.drop(1), resolved_name, command_name)
|
|
17
|
+
else
|
|
18
|
+
cmd = new(@ctx)
|
|
19
|
+
cmd.options.parse(@_options, args)
|
|
20
|
+
cmd.call(args, command_name)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def options(&block)
|
|
25
|
+
existing_options = @_options
|
|
26
|
+
# We prevent new options calls to override existing blocks by nesting them.
|
|
27
|
+
@_options = ->(parser, flags) {
|
|
28
|
+
existing_options&.call(parser, flags)
|
|
29
|
+
block.call(parser, flags)
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def subcommand(const, cmd, path = nil)
|
|
34
|
+
autoload(const, path) if path
|
|
35
|
+
subcommand_registry.add(->() { const_get(const) }, cmd.to_s)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def subcommand_registry
|
|
39
|
+
@subcommand_registry ||= CLI::Kit::CommandRegistry.new(
|
|
40
|
+
default: nil)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def call_help(*cmds)
|
|
44
|
+
help = Commands::Help.new(@ctx)
|
|
45
|
+
help.call(cmds, nil)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def initialize(ctx = nil)
|
|
50
|
+
super()
|
|
51
|
+
@ctx = ctx || FluidCLI::Context.new
|
|
52
|
+
self.options = Options.new
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'fluid_cli'
|
|
2
|
+
|
|
3
|
+
module FluidCLI
|
|
4
|
+
module Commands
|
|
5
|
+
class Help < FluidCLI::Command
|
|
6
|
+
def call(args, _name)
|
|
7
|
+
puts CLI::UI.fmt("{{bold:Available commands}}")
|
|
8
|
+
puts ""
|
|
9
|
+
|
|
10
|
+
FluidCLI::Commands::Registry.resolved_commands.each do |name, klass|
|
|
11
|
+
next if name == 'help'
|
|
12
|
+
puts CLI::UI.fmt("{{command:#{FluidCLI::TOOL_NAME} #{name}}}")
|
|
13
|
+
if help = klass.help
|
|
14
|
+
puts CLI::UI.fmt(help)
|
|
15
|
+
end
|
|
16
|
+
puts ""
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require "fluid_cli"
|
|
2
|
+
|
|
3
|
+
module FluidCLI
|
|
4
|
+
module Commands
|
|
5
|
+
class Login < FluidCLI::Command
|
|
6
|
+
PROTOCOL_REGEX = /^https?\:\/\//
|
|
7
|
+
PERMANENT_DOMAIN_SUFFIX = /\.myshopify\.(com|io)$/
|
|
8
|
+
|
|
9
|
+
options do |parser, flags|
|
|
10
|
+
parser.on("-c", "--company=COMPANY") { |url| flags[:company] = url }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def call(*)
|
|
14
|
+
company_identifier = (options.flags[:company] || @ctx.getenv("FLUID_COMPANY" || nil))
|
|
15
|
+
IdentityAuth.new(ctx: @ctx).authenticate(spinner: true)
|
|
16
|
+
company = FluidCLI::CompanySwitcher.new(
|
|
17
|
+
ctx: @ctx,
|
|
18
|
+
company: company_identifier,
|
|
19
|
+
switched_after_login: true
|
|
20
|
+
).switch
|
|
21
|
+
Whoami.call([], "whoami")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def self.help
|
|
25
|
+
"Log in to your Fluid account"
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require "fluid_cli"
|
|
2
|
+
require "fluid_cli/theme/development_theme"
|
|
3
|
+
|
|
4
|
+
module FluidCLI
|
|
5
|
+
module Commands
|
|
6
|
+
class Logout < FluidCLI::Command
|
|
7
|
+
def call(*)
|
|
8
|
+
try_delete_development_theme
|
|
9
|
+
|
|
10
|
+
FluidCLI::IdentityAuth.delete_tokens_and_keys
|
|
11
|
+
FluidCLI::DB.del(:company) if has_company?
|
|
12
|
+
@ctx.puts("Logged out successfully.")
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.help
|
|
16
|
+
"Logs out the current user."
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def has_company?
|
|
22
|
+
FluidCLI::DB.exists?(:company)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def try_delete_development_theme
|
|
26
|
+
return unless has_company?
|
|
27
|
+
|
|
28
|
+
FluidCLI::Theme::DevelopmentTheme.delete(@ctx)
|
|
29
|
+
rescue FluidCLI::API::APIRequestError, CLI::Kit::Abort, CLI::Kit::AbortSilent => e
|
|
30
|
+
@ctx.debug("[Logout Error]: #{e.message}")
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def has_company?
|
|
34
|
+
FluidCLI::DB.exists?(:company)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require "fluid_cli"
|
|
2
|
+
|
|
3
|
+
module FluidCLI
|
|
4
|
+
module Commands
|
|
5
|
+
class Switch < FluidCLI::Command
|
|
6
|
+
options do |parser, flags|
|
|
7
|
+
parser.on("-c", "--company=COMPANY") { |url| flags[:company] = url }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def call(*)
|
|
11
|
+
company = FluidCLI::CompanySwitcher.new(
|
|
12
|
+
ctx: @ctx,
|
|
13
|
+
company: options.flags[:company]
|
|
14
|
+
).switch
|
|
15
|
+
@ctx.puts("Switched to company '#{company['name']}' successfully.")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.help
|
|
19
|
+
"Switches the current company context."
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
require 'fluid_cli'
|
|
2
|
+
|
|
3
|
+
module FluidCLI
|
|
4
|
+
module Commands
|
|
5
|
+
class Theme
|
|
6
|
+
module Common
|
|
7
|
+
module RootHelper
|
|
8
|
+
REQUIRED_FOLDERS = %w(config layouts sections product shop_page).freeze
|
|
9
|
+
|
|
10
|
+
def root_value(options, name)
|
|
11
|
+
argv = default_argv(options)
|
|
12
|
+
command_index = argv.index(name.to_s)
|
|
13
|
+
|
|
14
|
+
return "." if command_index.nil?
|
|
15
|
+
|
|
16
|
+
next_index = command_index + 1
|
|
17
|
+
option_by_key = options_map(options)
|
|
18
|
+
|
|
19
|
+
while next_index < argv.size
|
|
20
|
+
element = argv[next_index]
|
|
21
|
+
key, value = key_value_tuple(element)
|
|
22
|
+
option = option_by_key[key]
|
|
23
|
+
|
|
24
|
+
return element if option.nil?
|
|
25
|
+
|
|
26
|
+
# Skip the option argument
|
|
27
|
+
next_index += 1 if !option.arg.nil? && !value
|
|
28
|
+
|
|
29
|
+
# PATTERN arguments take precedence over the `root`
|
|
30
|
+
if option.arg =~ /PATTERN/ && !value
|
|
31
|
+
next_index += 1 while option_argument?(argv, next_index, option_by_key)
|
|
32
|
+
next
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
next_index += 1
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
"."
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def valid_theme_directory?(root)
|
|
42
|
+
REQUIRED_FOLDERS.all? { |required_folder| Dir.exist?(File.join(root, required_folder)) } ||
|
|
43
|
+
current_directory_confirmed?
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def exist_and_not_empty?(root)
|
|
47
|
+
Dir.exist?(root) && !Dir[File.join(root, "*")].empty?
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
private
|
|
51
|
+
|
|
52
|
+
def current_directory_confirmed?
|
|
53
|
+
return true if options.flags[:force]
|
|
54
|
+
|
|
55
|
+
@ctx.warn("Warning: The specified directory does not appear to be a valid theme directory.")
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
return true if !FluidCLI::Environment.interactive?
|
|
59
|
+
|
|
60
|
+
CLI::UI::Prompt.confirm("Do you want to continue?", default: false)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def default_argv(options)
|
|
64
|
+
options.parser.default_argv.compact
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def options_map(options)
|
|
68
|
+
map = {}
|
|
69
|
+
options_list(options).each do |option|
|
|
70
|
+
map[option.short.first] = option
|
|
71
|
+
map[option.long.first] = option
|
|
72
|
+
end
|
|
73
|
+
map
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def options_list(options)
|
|
77
|
+
options.parser.top.list
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def option_argument?(argv, next_index, option_by_key)
|
|
81
|
+
return false unless next_index < argv.size
|
|
82
|
+
|
|
83
|
+
element = argv[next_index]
|
|
84
|
+
key, _value = key_value_tuple(element)
|
|
85
|
+
option_by_key[key].nil?
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def key_value_tuple(element)
|
|
89
|
+
element.split("=")
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require "fluid_cli/theme/dev_server"
|
|
3
|
+
require "fluid_cli/commands/theme/common/root_helper"
|
|
4
|
+
# require "fluid_cli/theme/conversions/include_glob"
|
|
5
|
+
# require "fluid_cli/theme/conversions/ignore_glob"
|
|
6
|
+
module FluidCLI
|
|
7
|
+
module Commands
|
|
8
|
+
class Theme
|
|
9
|
+
class Dev < FluidCLI::Command
|
|
10
|
+
include Common::RootHelper
|
|
11
|
+
|
|
12
|
+
# recommend_default_ruby_range
|
|
13
|
+
|
|
14
|
+
DEFAULT_HTTP_HOST = "127.0.0.1"
|
|
15
|
+
|
|
16
|
+
options do |parser, flags|
|
|
17
|
+
# Conversions::IncludeGlob.register(parser)
|
|
18
|
+
# Conversions::IgnoreGlob.register(parser)
|
|
19
|
+
|
|
20
|
+
parser.on("--host=HOST") { |host| flags[:host] = host.to_s }
|
|
21
|
+
parser.on("--port=PORT") { |port| flags[:port] = port.to_i }
|
|
22
|
+
parser.on("--poll") { flags[:poll] = true }
|
|
23
|
+
parser.on("--live-reload=MODE") { |mode| flags[:mode] = as_reload_mode(mode) }
|
|
24
|
+
parser.on("-t", "--theme=NAME_OR_ID") { |theme| flags[:theme] = theme }
|
|
25
|
+
parser.on("-f", "--force") { flags[:force] = true }
|
|
26
|
+
parser.on("--overwrite-json") { flags[:overwrite_json] = true }
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def call(_args, name)
|
|
30
|
+
valid_authentication_method!
|
|
31
|
+
|
|
32
|
+
root = root_value(options, name)
|
|
33
|
+
return unless valid_theme_directory?(root)
|
|
34
|
+
|
|
35
|
+
flags = options.flags.dup
|
|
36
|
+
host = flags[:host] || DEFAULT_HTTP_HOST
|
|
37
|
+
|
|
38
|
+
FluidCLI::Theme::DevServer.start(@ctx, root, host: host, **flags) do |syncer|
|
|
39
|
+
FluidCLI::Theme::UI::SyncProgressBar.new(syncer).progress(:upload_theme!, delay_low_priority_files: true)
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.as_reload_mode(mode)
|
|
44
|
+
FluidCLI::Theme::DevServer::ReloadMode.get!(mode)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def self.help
|
|
48
|
+
FluidCLI::Context.message("theme.serve.help", FluidCLI::TOOL_NAME)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
private
|
|
52
|
+
|
|
53
|
+
def valid_authentication_method!
|
|
54
|
+
if FluidCLI::Environment.auth_token.nil? && FluidCLI::DB.get(:jwt).nil?
|
|
55
|
+
FluidCLI::Context.abort("Auth token is missing", "Please login using 'fluid_cli login' command.")
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'fluid_cli'
|
|
2
|
+
|
|
3
|
+
module FluidCLI
|
|
4
|
+
module Commands
|
|
5
|
+
class Theme
|
|
6
|
+
class Help
|
|
7
|
+
def call(_args, _name)
|
|
8
|
+
puts 'neato'
|
|
9
|
+
|
|
10
|
+
if rand < 0.05
|
|
11
|
+
raise(CLI::Kit::Abort, "you got unlucky!")
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def self.help
|
|
16
|
+
"A dummy command.\nUsage: {{command:#{FluidCLI::TOOL_NAME} example}}"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'fluid_cli'
|
|
2
|
+
|
|
3
|
+
module FluidCLI
|
|
4
|
+
module Commands
|
|
5
|
+
class Theme
|
|
6
|
+
class Init < FluidCLI::Command
|
|
7
|
+
options do |parser, flags|
|
|
8
|
+
parser.on("-u", "--clone-url URL") { |url| flags[:clone_url] = url }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
DEFAULT_CLONE_URL = "git@github.com:fluid-commerce/base-theme.git"
|
|
12
|
+
|
|
13
|
+
def call(args, _name)
|
|
14
|
+
name = args.first || ask_name
|
|
15
|
+
clone_url = options.flags[:clone_url] || DEFAULT_CLONE_URL
|
|
16
|
+
puts "Cloning theme from #{clone_url} into #{name}..."
|
|
17
|
+
|
|
18
|
+
clone(clone_url, name)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.help
|
|
22
|
+
"Initialize a new theme by cloning the base theme."
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
def ask_name
|
|
28
|
+
CLI::UI::Prompt.ask("Theme name")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def clone(url, name)
|
|
32
|
+
FluidCLI::Git.clone(url, name)
|
|
33
|
+
|
|
34
|
+
@ctx.root = File.join(@ctx.root, name)
|
|
35
|
+
|
|
36
|
+
begin
|
|
37
|
+
@ctx.rm_r(".git")
|
|
38
|
+
@ctx.rm_r(".github")
|
|
39
|
+
rescue Errno::ENOENT => e
|
|
40
|
+
@ctx.debug(e)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|