shopify-cli 1.5.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (305) hide show
  1. checksums.yaml +4 -4
  2. data/.github/PULL_REQUEST_TEMPLATE.md +1 -0
  3. data/.rubocop_todo.yml +15 -2
  4. data/.travis.yml +1 -0
  5. data/CHANGELOG.md +26 -0
  6. data/Gemfile +12 -12
  7. data/Gemfile.lock +14 -14
  8. data/README.md +39 -7
  9. data/Rakefile +32 -28
  10. data/bin/load_shopify.rb +6 -6
  11. data/bin/shopify +2 -2
  12. data/dev.yml +5 -2
  13. data/docs/_config.yml +1 -18
  14. data/docs/app/node/commands/index.md +2 -80
  15. data/docs/app/node/index.md +2 -33
  16. data/docs/app/rails/commands/index.md +2 -78
  17. data/docs/app/rails/index.md +2 -34
  18. data/docs/core/index.md +2 -84
  19. data/docs/getting-started/index.md +2 -25
  20. data/docs/getting-started/install/index.md +1 -118
  21. data/docs/getting-started/migrate/index.md +2 -94
  22. data/docs/getting-started/uninstall/index.md +2 -35
  23. data/docs/getting-started/upgrade/index.md +2 -39
  24. data/docs/help/start-app/index.md +2 -4
  25. data/docs/index.md +2 -24
  26. data/ext/shopify-cli/extconf.rb +7 -7
  27. data/install.sh +1 -1
  28. data/lib/docgen/markdown.rb +12 -12
  29. data/lib/graphql/extension_create.graphql +17 -2
  30. data/lib/graphql/fetch_specifications.graphql +14 -0
  31. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  32. data/lib/project_types/extension/cli.rb +56 -48
  33. data/lib/project_types/extension/commands/build.rb +3 -3
  34. data/lib/project_types/extension/commands/create.rb +17 -10
  35. data/lib/project_types/extension/commands/extension_command.rb +14 -7
  36. data/lib/project_types/extension/commands/push.rb +10 -10
  37. data/lib/project_types/extension/commands/register.rb +22 -32
  38. data/lib/project_types/extension/commands/serve.rb +1 -7
  39. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  40. data/lib/project_types/extension/extension_project.rb +22 -7
  41. data/lib/project_types/extension/extension_project_keys.rb +5 -4
  42. data/lib/project_types/extension/features/argo.rb +123 -0
  43. data/lib/project_types/extension/features/argo_config.rb +5 -5
  44. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  45. data/lib/project_types/extension/features/argo_renderer_package.rb +32 -0
  46. data/lib/project_types/extension/features/argo_serve.rb +69 -0
  47. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  48. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  49. data/lib/project_types/extension/forms/create.rb +28 -34
  50. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  51. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  52. data/lib/project_types/extension/forms/questions/ask_type.rb +47 -0
  53. data/lib/project_types/extension/messages/message_loading.rb +3 -1
  54. data/lib/project_types/extension/messages/messages.rb +55 -52
  55. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  56. data/lib/project_types/extension/models/registration.rb +1 -0
  57. data/lib/project_types/extension/models/specification.rb +39 -0
  58. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
  59. data/lib/project_types/extension/models/specification_handlers/default.rb +75 -0
  60. data/lib/project_types/extension/models/specifications.rb +88 -0
  61. data/lib/project_types/extension/tasks/configure_features.rb +54 -0
  62. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  63. data/lib/project_types/extension/tasks/converters/registration_converter.rb +8 -6
  64. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  65. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  66. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  67. data/lib/project_types/extension/tasks/fetch_specifications.rb +18 -0
  68. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  69. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  70. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  71. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  72. data/lib/project_types/node/cli.rb +19 -19
  73. data/lib/project_types/node/commands/connect.rb +3 -3
  74. data/lib/project_types/node/commands/create.rb +42 -38
  75. data/lib/project_types/node/commands/deploy.rb +4 -4
  76. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  77. data/lib/project_types/node/commands/generate.rb +3 -34
  78. data/lib/project_types/node/commands/open.rb +2 -2
  79. data/lib/project_types/node/commands/populate.rb +6 -6
  80. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  81. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  82. data/lib/project_types/node/commands/populate/product.rb +5 -5
  83. data/lib/project_types/node/commands/serve.rb +9 -9
  84. data/lib/project_types/node/commands/tunnel.rb +7 -7
  85. data/lib/project_types/node/forms/create.rb +17 -8
  86. data/lib/project_types/node/messages/messages.rb +13 -47
  87. data/lib/project_types/rails/cli.rb +21 -21
  88. data/lib/project_types/rails/commands/connect.rb +3 -3
  89. data/lib/project_types/rails/commands/create.rb +56 -54
  90. data/lib/project_types/rails/commands/deploy.rb +4 -4
  91. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  92. data/lib/project_types/rails/commands/generate.rb +7 -7
  93. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  94. data/lib/project_types/rails/commands/open.rb +2 -2
  95. data/lib/project_types/rails/commands/populate.rb +6 -6
  96. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  97. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  98. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  99. data/lib/project_types/rails/commands/serve.rb +11 -11
  100. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  101. data/lib/project_types/rails/forms/create.rb +35 -25
  102. data/lib/project_types/rails/gem.rb +24 -24
  103. data/lib/project_types/rails/messages/messages.rb +6 -5
  104. data/lib/project_types/rails/ruby.rb +2 -2
  105. data/lib/project_types/script/cli.rb +38 -39
  106. data/lib/project_types/script/commands/create.rb +12 -14
  107. data/lib/project_types/script/commands/push.rb +10 -17
  108. data/lib/project_types/script/config/extension_points.yml +29 -10
  109. data/lib/project_types/script/errors.rb +1 -2
  110. data/lib/project_types/script/forms/create.rb +18 -5
  111. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +9 -1
  112. data/lib/project_types/script/graphql/script_service_proxy.graphql +1 -2
  113. data/lib/project_types/script/layers/application/build_script.rb +10 -7
  114. data/lib/project_types/script/layers/application/create_script.rb +37 -25
  115. data/lib/project_types/script/layers/application/extension_points.rb +25 -0
  116. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  117. data/lib/project_types/script/layers/application/push_script.rb +13 -18
  118. data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
  119. data/lib/project_types/script/layers/domain/errors.rb +20 -0
  120. data/lib/project_types/script/layers/domain/extension_point.rb +82 -11
  121. data/lib/project_types/script/layers/domain/metadata.rb +48 -0
  122. data/lib/project_types/script/layers/domain/push_package.rb +25 -6
  123. data/lib/project_types/script/layers/domain/script_project.rb +34 -0
  124. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +42 -13
  125. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +24 -49
  126. data/lib/project_types/script/layers/infrastructure/errors.rb +32 -19
  127. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  128. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  129. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +22 -17
  130. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  131. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  132. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +145 -0
  133. data/lib/project_types/script/layers/infrastructure/script_service.rb +32 -75
  134. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  135. data/lib/project_types/script/messages/messages.rb +58 -59
  136. data/lib/project_types/script/ui/error_handler.rb +115 -72
  137. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  138. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  139. data/lib/project_types/theme/cli.rb +40 -0
  140. data/lib/project_types/theme/commands/connect.rb +54 -0
  141. data/lib/project_types/theme/commands/create.rb +48 -0
  142. data/lib/project_types/theme/commands/deploy.rb +38 -0
  143. data/lib/project_types/theme/commands/generate.rb +20 -0
  144. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  145. data/lib/project_types/theme/commands/push.rb +55 -0
  146. data/lib/project_types/theme/commands/serve.rb +31 -0
  147. data/lib/project_types/theme/forms/connect.rb +34 -0
  148. data/lib/project_types/theme/forms/create.rb +22 -0
  149. data/lib/project_types/theme/messages/messages.rb +147 -0
  150. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  151. data/lib/project_types/theme/themekit.rb +113 -0
  152. data/lib/rubygems_plugin.rb +3 -3
  153. data/lib/shopify-cli/admin_api.rb +52 -12
  154. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  155. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  156. data/lib/shopify-cli/api.rb +34 -31
  157. data/lib/shopify-cli/command.rb +1 -1
  158. data/lib/shopify-cli/commands.rb +9 -9
  159. data/lib/shopify-cli/commands/config.rb +28 -52
  160. data/lib/shopify-cli/commands/connect.rb +10 -10
  161. data/lib/shopify-cli/commands/create.rb +5 -5
  162. data/lib/shopify-cli/commands/help.rb +6 -6
  163. data/lib/shopify-cli/commands/logout.rb +3 -3
  164. data/lib/shopify-cli/commands/system.rb +33 -33
  165. data/lib/shopify-cli/commands/version.rb +2 -2
  166. data/lib/shopify-cli/context.rb +71 -22
  167. data/lib/shopify-cli/core.rb +4 -4
  168. data/lib/shopify-cli/core/entry_point.rb +5 -5
  169. data/lib/shopify-cli/core/executor.rb +1 -1
  170. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  171. data/lib/shopify-cli/core/monorail.rb +16 -16
  172. data/lib/shopify-cli/db.rb +2 -2
  173. data/lib/shopify-cli/feature.rb +1 -3
  174. data/lib/shopify-cli/form.rb +1 -1
  175. data/lib/shopify-cli/git.rb +17 -17
  176. data/lib/shopify-cli/helpers.rb +1 -1
  177. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  178. data/lib/shopify-cli/heroku.rb +28 -28
  179. data/lib/shopify-cli/http_request.rb +21 -9
  180. data/lib/shopify-cli/js_deps.rb +12 -12
  181. data/lib/shopify-cli/js_system.rb +5 -5
  182. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  183. data/lib/shopify-cli/messages/messages.rb +9 -16
  184. data/lib/shopify-cli/method_object.rb +104 -0
  185. data/lib/shopify-cli/oauth.rb +25 -25
  186. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  187. data/lib/shopify-cli/options.rb +3 -3
  188. data/lib/shopify-cli/packager.rb +24 -24
  189. data/lib/shopify-cli/partners_api.rb +24 -18
  190. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  191. data/lib/shopify-cli/process_supervision.rb +7 -7
  192. data/lib/shopify-cli/project.rb +16 -16
  193. data/lib/shopify-cli/project_type.rb +4 -4
  194. data/lib/shopify-cli/resolve_constant.rb +25 -0
  195. data/lib/shopify-cli/resources.rb +1 -1
  196. data/lib/shopify-cli/resources/env_file.rb +9 -9
  197. data/lib/shopify-cli/result.rb +432 -0
  198. data/lib/shopify-cli/shopifolk.rb +6 -8
  199. data/lib/shopify-cli/sub_command.rb +1 -1
  200. data/lib/shopify-cli/task.rb +3 -3
  201. data/lib/shopify-cli/tasks.rb +7 -7
  202. data/lib/shopify-cli/tasks/create_api_client.rb +5 -5
  203. data/lib/shopify-cli/tasks/ensure_dev_store.rb +12 -12
  204. data/lib/shopify-cli/tasks/ensure_env.rb +15 -15
  205. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  206. data/lib/shopify-cli/tasks/select_org_and_shop.rb +25 -24
  207. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  208. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  209. data/lib/shopify-cli/tunnel.rb +36 -30
  210. data/lib/shopify-cli/version.rb +1 -1
  211. data/lib/shopify_cli.rb +57 -52
  212. data/shopify-cli.gemspec +6 -6
  213. data/shopify.fish +1 -1
  214. data/shopify.sh +1 -1
  215. data/vendor/deps/cli-kit/REVISION +1 -1
  216. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  217. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  218. data/vendor/deps/cli-ui/REVISION +1 -1
  219. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  220. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  221. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  222. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  223. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  224. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  225. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  226. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  227. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  228. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  229. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  230. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  231. data/vendor/deps/webrick/.gitignore +9 -0
  232. data/vendor/deps/webrick/Gemfile +3 -0
  233. data/vendor/deps/webrick/LICENSE.txt +22 -0
  234. data/vendor/deps/webrick/README.md +61 -0
  235. data/vendor/deps/webrick/Rakefile +10 -0
  236. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  237. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  238. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  239. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  240. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  241. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  242. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  243. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  244. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  245. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  246. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  251. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  252. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  253. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  254. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  255. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  256. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  257. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  258. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  259. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  263. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  264. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  265. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  266. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  267. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  268. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  269. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  270. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  271. data/vendor/deps/webrick/webrick.gemspec +74 -0
  272. data/vendor/gen/template/bin/update-deps +9 -9
  273. metadata +83 -35
  274. data/docs/Gemfile +0 -5
  275. data/docs/Gemfile.lock +0 -258
  276. data/docs/_data/nav.yml +0 -35
  277. data/docs/_includes/footer.html +0 -15
  278. data/docs/_includes/head.html +0 -19
  279. data/docs/_includes/sidebar_nav.html +0 -22
  280. data/docs/_includes/toc.html +0 -112
  281. data/docs/_layouts/default.html +0 -79
  282. data/docs/css/docs.css +0 -157
  283. data/docs/images/header.png +0 -0
  284. data/docs/installing-ruby.md +0 -28
  285. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  286. data/lib/project_types/extension/features/argo/base.rb +0 -129
  287. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  288. data/lib/project_types/extension/forms/register.rb +0 -47
  289. data/lib/project_types/extension/models/type.rb +0 -81
  290. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  291. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  292. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  293. data/lib/project_types/node/commands/generate/page.rb +0 -59
  294. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  295. data/lib/project_types/script/commands/disable.rb +0 -25
  296. data/lib/project_types/script/commands/enable.rb +0 -78
  297. data/lib/project_types/script/graphql/shop_script_delete.graphql +0 -14
  298. data/lib/project_types/script/graphql/shop_script_update_or_create.graphql +0 -28
  299. data/lib/project_types/script/layers/application/disable_script.rb +0 -21
  300. data/lib/project_types/script/layers/application/enable_script.rb +0 -23
  301. data/lib/project_types/script/layers/domain/script.rb +0 -18
  302. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -47
  303. data/lib/project_types/script/script_project.rb +0 -54
  304. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  305. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -1,4 +1,4 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  module Commands
@@ -10,11 +10,11 @@ module ShopifyCli
10
10
 
11
11
  def call(args, command_name)
12
12
  unless args.empty?
13
- @ctx.puts(@ctx.message('core.create.error.invalid_app_type', args[0]))
13
+ @ctx.puts(@ctx.message("core.create.error.invalid_app_type", args[0]))
14
14
  return @ctx.puts(self.class.help)
15
15
  end
16
16
 
17
- type_name = CLI::UI::Prompt.ask(@ctx.message('core.create.project_type_select')) do |handler|
17
+ type_name = CLI::UI::Prompt.ask(@ctx.message("core.create.project_type_select")) do |handler|
18
18
  self.class.all_visible_type.each do |type|
19
19
  handler.option(type.project_name) { type.project_type }
20
20
  end
@@ -22,7 +22,7 @@ module ShopifyCli
22
22
 
23
23
  klass = ProjectType.load_type(type_name).create_command
24
24
  klass.ctx = @ctx
25
- klass.call(args, command_name, 'create')
25
+ klass.call(args, command_name, "create")
26
26
  end
27
27
 
28
28
  def self.all_visible_type
@@ -33,7 +33,7 @@ module ShopifyCli
33
33
 
34
34
  def self.help
35
35
  project_types = all_visible_type.map(&:project_type).sort.join(" | ")
36
- ShopifyCli::Context.message('core.create.help', ShopifyCli::TOOL_NAME, project_types)
36
+ ShopifyCli::Context.message("core.create.help", ShopifyCli::TOOL_NAME, project_types)
37
37
  end
38
38
 
39
39
  def self.extended_help
@@ -1,11 +1,11 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  module Commands
5
5
  class Help < ShopifyCli::Command
6
6
  def call(args, _name)
7
7
  command = args.shift
8
- if command && command != 'help'
8
+ if command && command != "help"
9
9
  if Registry.exist?(command)
10
10
  cmd, _ = Registry.lookup_command(command)
11
11
  subcmd, _ = cmd.subcommand_registry.lookup_command(args.first)
@@ -16,15 +16,15 @@ module ShopifyCli
16
16
  end
17
17
  return
18
18
  else
19
- @ctx.puts(@ctx.message('core.help.error.command_not_found', command))
19
+ @ctx.puts(@ctx.message("core.help.error.command_not_found", command))
20
20
  end
21
21
  end
22
22
 
23
- preamble = @ctx.message('core.help.preamble', ShopifyCli::TOOL_NAME)
23
+ preamble = @ctx.message("core.help.preamble", ShopifyCli::TOOL_NAME)
24
24
  @ctx.puts(preamble)
25
25
 
26
26
  core_commands.each do |name, klass|
27
- next if name == 'help'
27
+ next if name == "help"
28
28
  @ctx.puts("{{command:#{name}}}: #{klass.help}\n")
29
29
  end
30
30
 
@@ -34,7 +34,7 @@ module ShopifyCli
34
34
  @ctx.puts("{{bold:Available commands for #{project_type_name} projects:}}\n\n")
35
35
 
36
36
  local_commands.each do |name, klass|
37
- next if name == 'help'
37
+ next if name == "help"
38
38
  @ctx.puts("{{command:#{name}}}: #{klass.help}\n")
39
39
  end
40
40
  end
@@ -1,4 +1,4 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  module Commands
@@ -12,11 +12,11 @@ module ShopifyCli
12
12
  LOGIN_TOKENS.each do |token|
13
13
  ShopifyCli::DB.del(token) if ShopifyCli::DB.exists?(token)
14
14
  end
15
- @ctx.puts(@ctx.message('core.logout.success'))
15
+ @ctx.puts(@ctx.message("core.logout.success"))
16
16
  end
17
17
 
18
18
  def self.help
19
- ShopifyCli::Context.message('core.logout.help', ShopifyCli::TOOL_NAME)
19
+ ShopifyCli::Context.message("core.logout.help", ShopifyCli::TOOL_NAME)
20
20
  end
21
21
  end
22
22
  end
@@ -1,5 +1,5 @@
1
- require 'shopify_cli'
2
- require 'rbconfig'
1
+ require "shopify_cli"
2
+ require "rbconfig"
3
3
 
4
4
  module ShopifyCli
5
5
  module Commands
@@ -9,13 +9,13 @@ module ShopifyCli
9
9
  def call(args, _name)
10
10
  show_all_details = false
11
11
  flag = args.shift
12
- if flag && flag != 'all'
13
- @ctx.puts(@ctx.message('core.system.error.unknown_option', flag))
12
+ if flag && flag != "all"
13
+ @ctx.puts(@ctx.message("core.system.error.unknown_option", flag))
14
14
  @ctx.puts("\n" + self.class.help)
15
15
  return
16
16
  end
17
17
 
18
- show_all_details = true if flag == 'all'
18
+ show_all_details = true if flag == "all"
19
19
 
20
20
  display_environment if show_all_details
21
21
 
@@ -27,7 +27,7 @@ module ShopifyCli
27
27
  end
28
28
 
29
29
  def self.help
30
- ShopifyCli::Context.message('core.system.help', ShopifyCli::TOOL_NAME)
30
+ ShopifyCli::Context.message("core.system.help", ShopifyCli::TOOL_NAME)
31
31
  end
32
32
 
33
33
  private
@@ -47,14 +47,14 @@ module ShopifyCli
47
47
 
48
48
  cli_constants += cli_constants_extra if show_all_details
49
49
 
50
- @ctx.puts(@ctx.message('core.system.header'))
50
+ @ctx.puts(@ctx.message("core.system.header"))
51
51
  cli_constants.each do |s|
52
- @ctx.puts(" " + @ctx.message('core.system.const', s, ShopifyCli.const_get(s.to_sym)) + "\n")
52
+ @ctx.puts(" " + @ctx.message("core.system.const", s, ShopifyCli.const_get(s.to_sym)) + "\n")
53
53
  end
54
54
 
55
55
  if show_all_details
56
56
  cli_path_methods.each do |m|
57
- @ctx.puts(" " + @ctx.message('core.system.const', m.upcase, ShopifyCli.send(m)) + "\n")
57
+ @ctx.puts(" " + @ctx.message("core.system.const", m.upcase, ShopifyCli.send(m)) + "\n")
58
58
  end
59
59
  end
60
60
  end
@@ -62,55 +62,55 @@ module ShopifyCli
62
62
  def display_cli_ruby(_show_all_details)
63
63
  rbconfig_constants = %w(host RUBY_VERSION_NAME)
64
64
 
65
- @ctx.puts("\n" + @ctx.message('core.system.ruby_header', RbConfig.ruby))
65
+ @ctx.puts("\n" + @ctx.message("core.system.ruby_header", RbConfig.ruby))
66
66
  rbconfig_constants.each do |s|
67
- @ctx.puts(" " + @ctx.message('core.system.rb_config', RbConfig::CONFIG[s], s))
67
+ @ctx.puts(" " + @ctx.message("core.system.rb_config", RbConfig::CONFIG[s], s))
68
68
  end
69
69
  end
70
70
 
71
71
  def display_utility_commands(_show_all_details)
72
72
  commands = %w(git curl tar)
73
73
 
74
- @ctx.puts("\n" + @ctx.message('core.system.command_header'))
74
+ @ctx.puts("\n" + @ctx.message("core.system.command_header"))
75
75
  commands.each do |s|
76
76
  cmd_path = @ctx.which(s)
77
77
 
78
78
  if !cmd_path.nil?
79
- @ctx.puts(" " + @ctx.message('core.system.command_with_path', s, cmd_path))
79
+ @ctx.puts(" " + @ctx.message("core.system.command_with_path", s, cmd_path))
80
80
  else
81
- @ctx.puts(" " + @ctx.message('core.system.command_not_found', s))
81
+ @ctx.puts(" " + @ctx.message("core.system.command_not_found", s))
82
82
  end
83
83
  end
84
84
  end
85
85
 
86
86
  def display_ngrok
87
- ngrok_location = File.join(ShopifyCli.cache_dir, @ctx.windows? ? 'ngrok.exe' : 'ngrok')
87
+ ngrok_location = File.join(ShopifyCli.cache_dir, "ngrok#{@ctx.executable_file_extension}")
88
88
  if File.exist?(ngrok_location)
89
- @ctx.puts(" " + @ctx.message('core.system.ngrok_available', ngrok_location))
89
+ @ctx.puts(" " + @ctx.message("core.system.ngrok_available", ngrok_location))
90
90
  else
91
- @ctx.puts(" " + @ctx.message('core.system.ngrok_not_available'))
91
+ @ctx.puts(" " + @ctx.message("core.system.ngrok_not_available"))
92
92
  end
93
93
  end
94
94
 
95
95
  def display_project_commands(_show_all_details)
96
96
  case Project.current_project_type
97
97
  when :node
98
- display_project('Node.js', %w(npm node yarn))
98
+ display_project("Node.js", %w(npm node yarn))
99
99
  when :rails
100
- display_project('Rails', %w(gem rails rake ruby))
100
+ display_project("Rails", %w(gem rails rake ruby))
101
101
  end
102
102
  end
103
103
 
104
104
  def display_project(project_type, commands)
105
- @ctx.puts("\n" + @ctx.message('core.system.project.header', project_type))
105
+ @ctx.puts("\n" + @ctx.message("core.system.project.header", project_type))
106
106
  commands.each do |s|
107
107
  cmd_path = @ctx.which(s)
108
108
  if !cmd_path.nil?
109
- version_output, _ = @ctx.capture2e(s, '--version')
109
+ version_output, _ = @ctx.capture2e(s, "--version")
110
110
  version = version_output.match(/(\d+\.[^\s]+)/)[0]
111
- @ctx.puts(" " + @ctx.message('core.system.project.command_with_path', s, cmd_path.strip, version.strip))
111
+ @ctx.puts(" " + @ctx.message("core.system.project.command_with_path", s, cmd_path.strip, version.strip))
112
112
  else
113
- @ctx.puts(" " + @ctx.message('core.system.project.command_not_found', s))
113
+ @ctx.puts(" " + @ctx.message("core.system.project.command_not_found", s))
114
114
  end
115
115
  end
116
116
  display_ngrok
@@ -118,25 +118,25 @@ module ShopifyCli
118
118
  end
119
119
 
120
120
  def display_project_environment
121
- @ctx.puts("\n " + @ctx.message('core.system.project.env_header'))
122
- if File.exist?('./.env')
121
+ @ctx.puts("\n " + @ctx.message("core.system.project.env_header"))
122
+ if File.exist?("./.env")
123
123
  Project.current.env.to_h.each do |k, v|
124
- display_value = if v.nil? || v.strip == ''
125
- @ctx.message('core.system.project.env_not_set')
124
+ display_value = if v.nil? || v.strip == ""
125
+ @ctx.message("core.system.project.env_not_set")
126
126
  else
127
127
  k.match(/^SHOPIFY_API/) ? "********" : v
128
128
  end
129
- @ctx.puts(" " + @ctx.message('core.system.project.env', k, display_value))
129
+ @ctx.puts(" " + @ctx.message("core.system.project.env", k, display_value))
130
130
  end
131
131
  else
132
- @ctx.puts(" " + @ctx.message('core.system.project.no_env'))
132
+ @ctx.puts(" " + @ctx.message("core.system.project.no_env"))
133
133
  end
134
134
  end
135
135
 
136
136
  def display_environment
137
- @ctx.puts(@ctx.message('core.system.environment_header'))
137
+ @ctx.puts(@ctx.message("core.system.environment_header"))
138
138
  %w(TERM SHELL PATH USING_SHOPIFY_CLI LANG).each do |k|
139
- @ctx.puts(" " + @ctx.message('core.system.env', k, ENV[k])) unless ENV[k].nil?
139
+ @ctx.puts(" " + @ctx.message("core.system.env", k, ENV[k])) unless ENV[k].nil?
140
140
  end
141
141
  @ctx.puts("")
142
142
  end
@@ -144,8 +144,8 @@ module ShopifyCli
144
144
  def display_shopify_staff_identity
145
145
  is_shopifolk = ShopifyCli::Shopifolk.check
146
146
  if is_shopifolk
147
- @ctx.puts("\n" + @ctx.message('core.system.identity_header'))
148
- @ctx.puts(" " + @ctx.message('core.system.identity_is_shopifolk'))
147
+ @ctx.puts("\n" + @ctx.message("core.system.identity_header"))
148
+ @ctx.puts(" " + @ctx.message("core.system.identity_is_shopifolk"))
149
149
  end
150
150
  end
151
151
  end
@@ -1,10 +1,10 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  module Commands
5
5
  class Version < ShopifyCli::Command
6
6
  def self.help
7
- ShopifyCli::Context.message('core.version.help', ShopifyCli::TOOL_NAME)
7
+ ShopifyCli::Context.message("core.version.help", ShopifyCli::TOOL_NAME)
8
8
  end
9
9
 
10
10
  def call(_args, _name)
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
3
- require 'fileutils'
4
- require 'rbconfig'
5
- require 'net/http'
6
- require 'json'
2
+ require "shopify_cli"
3
+ require "fileutils"
4
+ require "rbconfig"
5
+ require "net/http"
6
+ require "json"
7
7
 
8
8
  module ShopifyCli
9
9
  ##
@@ -13,9 +13,9 @@ module ShopifyCli
13
13
  # resoures.
14
14
  #
15
15
  class Context
16
- GEM_LATEST_URI = URI.parse('https://rubygems.org/api/v1/versions/shopify-cli/latest.json')
17
- VERSION_CHECK_SECTION = 'versioncheck'
18
- LAST_CHECKED_AT_FIELD = 'last_checked_at'
16
+ GEM_LATEST_URI = URI.parse("https://rubygems.org/api/v1/versions/shopify-cli/latest.json")
17
+ VERSION_CHECK_SECTION = "versioncheck"
18
+ LAST_CHECKED_AT_FIELD = "last_checked_at"
19
19
  VERSION_CHECK_INTERVAL = 86400
20
20
 
21
21
  class << self
@@ -40,7 +40,7 @@ module ShopifyCli
40
40
  # * `key` - a symbol representing the message
41
41
  # * `params` - the parameters to format the string with
42
42
  def message(key, *params)
43
- key_parts = key.split('.').map(&:to_sym)
43
+ key_parts = key.split(".").map(&:to_sym)
44
44
  str = Context.messages.dig(*key_parts)
45
45
  str ? str % params : key
46
46
  end
@@ -86,7 +86,7 @@ module ShopifyCli
86
86
  # See `#development?` for checking for development environment.
87
87
  #
88
88
  def system?
89
- !Dir.exist?(File.join(ShopifyCli::ROOT, 'test'))
89
+ !Dir.exist?(File.join(ShopifyCli::ROOT, "test"))
90
90
  end
91
91
 
92
92
  # will return true if the cli is running on your development instance.
@@ -97,13 +97,13 @@ module ShopifyCli
97
97
 
98
98
  # will return true while tests are running, either locally or on CI
99
99
  def testing?
100
- ci? || ENV['TEST']
100
+ ci? || ENV["TEST"]
101
101
  end
102
102
 
103
103
  ##
104
104
  # will return true if the cli is being tested on CI
105
105
  def ci?
106
- ENV['CI']
106
+ ENV["CI"]
107
107
  end
108
108
 
109
109
  # get a environment variable value by name.
@@ -116,7 +116,7 @@ module ShopifyCli
116
116
  #
117
117
  def getenv(name)
118
118
  v = @env[name]
119
- v == '' ? nil : v
119
+ v == "" ? nil : v
120
120
  end
121
121
 
122
122
  # set a environment variable value by name.
@@ -144,6 +144,34 @@ module ShopifyCli
144
144
  File.write(ctx_path(fname), content)
145
145
  end
146
146
 
147
+ # will read a binary file relative to the context root unless the file path is absolute.
148
+ #
149
+ # #### Parameters
150
+ # * `fname` - filename of the file that you are reading, relative to root unless it is absolute.
151
+ #
152
+ # #### Example
153
+ #
154
+ # @ctx.read('binary.out')
155
+ #
156
+ def binread(fname)
157
+ File.binread(ctx_path(fname))
158
+ end
159
+
160
+ # will write/overwrite a binary file with the provided contents, relative to the context root
161
+ # unless the file path is absolute.
162
+ #
163
+ # #### Parameters
164
+ # * `fname` - filename of the file that you are writing, relative to root unless it is absolute.
165
+ # * `content` - the body contents of the file that you are writing
166
+ #
167
+ # #### Example
168
+ #
169
+ # @ctx.binwrite('binary.out', 'ASCII-8BIT encoded binary')
170
+ #
171
+ def binwrite(fname, content)
172
+ File.binwrite(ctx_path(fname), content)
173
+ end
174
+
147
175
  # will change directories and update the root, the filepath is relative to the command root unless absolute
148
176
  #
149
177
  # #### Parameters
@@ -254,7 +282,7 @@ module ShopifyCli
254
282
  # * `uri` - a http URI to open in a browser
255
283
  #
256
284
  def open_url!(uri)
257
- help = message('core.context.open_url', uri)
285
+ help = message("core.context.open_url", uri)
258
286
  puts(help)
259
287
  end
260
288
 
@@ -303,7 +331,7 @@ module ShopifyCli
303
331
  # * `text` - a string message to output
304
332
  #
305
333
  def debug(text)
306
- puts("{{red:DEBUG}} #{text}") if getenv('DEBUG')
334
+ puts("{{red:DEBUG}} #{text}") if getenv("DEBUG")
307
335
  end
308
336
 
309
337
  # proxy call to Context.message.
@@ -329,14 +357,18 @@ module ShopifyCli
329
357
  # - `**kwargs`: additional keyword arguments to pass to Process.spawn
330
358
  #
331
359
  # #### Returns
332
- # - `status`: boolean success status of the command execution
360
+ # - `status`: The `Process::Status` result of the command execution.
333
361
  #
334
362
  # #### Usage
335
363
  #
336
364
  # stat = @ctx.system('ls', 'a_folder')
337
365
  #
338
366
  def system(*args, **kwargs)
339
- CLI::Kit::System.system(*args, env: @env, **kwargs)
367
+ process_status = CLI::Kit::System.system(*args, env: @env, **kwargs)
368
+ unless process_status.success?
369
+ abort("System call failed: #{args.join(" ")}")
370
+ end
371
+ process_status
340
372
  end
341
373
 
342
374
  # Execute a command in the user's environment
@@ -410,13 +442,13 @@ module ShopifyCli
410
442
  #
411
443
  def on_siginfo
412
444
  # Reset any previous SIGINFO handling we had so the only action we take is the given block
413
- trap('INFO', 'DEFAULT')
445
+ trap("INFO", "DEFAULT")
414
446
 
415
447
  fork do
416
448
  begin
417
449
  r, w = IO.pipe
418
450
  @signal = false
419
- trap('SIGINFO') do
451
+ trap("SIGINFO") do
420
452
  @signal = true
421
453
  w.write(0)
422
454
  end
@@ -442,8 +474,8 @@ module ShopifyCli
442
474
  # @todo This is currently a duplicate of CLI::Kit::System.which() - we should make that method public when we make
443
475
  # Kit changes and make this a wrapper instead.
444
476
  def which(cmd)
445
- exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
446
- ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
477
+ exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [""]
478
+ ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
447
479
  exts.each do |ext|
448
480
  exe = File.join(File.expand_path(path), "#{cmd}#{ext}")
449
481
  return exe if File.executable?(exe) && !File.directory?(exe)
@@ -470,10 +502,27 @@ module ShopifyCli
470
502
  end
471
503
  end
472
504
 
505
+ # Returns file extension depending on OS
506
+ # since windows has multiple extensions, the default is .exe unless otherwise specified
507
+ #
508
+ # #### Parameters
509
+ # - ext: optional extension for windows file
510
+ #
511
+ # #### Returns
512
+ # - ext: string for file extension on windows
513
+ # : empty string otherwise
514
+ def executable_file_extension(ext = ".exe")
515
+ if windows?
516
+ ext
517
+ else
518
+ ""
519
+ end
520
+ end
521
+
473
522
  private
474
523
 
475
524
  def ctx_path(fname)
476
- require 'pathname'
525
+ require "pathname"
477
526
  if Pathname.new(fname).absolute?
478
527
  fname
479
528
  else