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
@@ -26,18 +26,18 @@ module ShopifyCli
26
26
  end
27
27
 
28
28
  def do_GET(req, res) # rubocop:disable Naming/MethodName
29
- if !req.query['error'].nil?
29
+ if !req.query["error"].nil?
30
30
  respond_with(
31
31
  res,
32
32
  400,
33
- Context.message('core.oauth.servlet.invalid_request_response', req.query['error_description'])
33
+ Context.message("core.oauth.servlet.invalid_request_response", req.query["error_description"])
34
34
  )
35
- elsif req.query['state'] != @state_token
36
- response_message = Context.message('core.oauth.servlet.invalid_state_response')
37
- req.query.merge!('error' => 'invalid_state', 'error_description' => response_message)
35
+ elsif req.query["state"] != @state_token
36
+ response_message = Context.message("core.oauth.servlet.invalid_state_response")
37
+ req.query.merge!("error" => "invalid_state", "error_description" => response_message)
38
38
  respond_with(res, 403, response_message)
39
39
  else
40
- respond_with(res, 200, Context.message('core.oauth.servlet.success_response'))
40
+ respond_with(res, 200, Context.message("core.oauth.servlet.success_response"))
41
41
  end
42
42
  @oauth.response_query = req.query
43
43
  @server.shutdown
@@ -48,10 +48,10 @@ module ShopifyCli
48
48
  locals = {
49
49
  status: status,
50
50
  message: message,
51
- color: successful ? 'black' : 'red',
51
+ color: successful ? "black" : "red",
52
52
  title:
53
- Context.message(successful ? 'core.oauth.servlet.authenticated' : 'core.oauth.servlet.not_authenticated'),
54
- autoclose: successful ? AUTOCLOSE_TEMPLATE : '',
53
+ Context.message(successful ? "core.oauth.servlet.authenticated" : "core.oauth.servlet.not_authenticated"),
54
+ autoclose: successful ? AUTOCLOSE_TEMPLATE : "",
55
55
  }
56
56
  response.status = status
57
57
  response.body = format(TEMPLATE, locals)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
3
- require 'optparse'
2
+ require "shopify_cli"
3
+ require "optparse"
4
4
 
5
5
  module ShopifyCli
6
6
  class Options
@@ -31,7 +31,7 @@ module ShopifyCli
31
31
  def parser
32
32
  @parser ||= begin
33
33
  opt = OptionParser.new
34
- opt.on('--help', '-h', Context.message('core.options.help_text')) do |v|
34
+ opt.on("--help", "-h", Context.message("core.options.help_text")) do |v|
35
35
  @help = v
36
36
  end
37
37
  end
@@ -1,17 +1,17 @@
1
1
  module ShopifyCli
2
2
  class Packager
3
- PACKAGING_DIR = File.join(ShopifyCli::ROOT, 'packaging')
4
- BUILDS_DIR = File.join(PACKAGING_DIR, 'builds', ShopifyCli::VERSION)
3
+ PACKAGING_DIR = File.join(ShopifyCli::ROOT, "packaging")
4
+ BUILDS_DIR = File.join(PACKAGING_DIR, "builds", ShopifyCli::VERSION)
5
5
 
6
6
  def initialize
7
7
  FileUtils.mkdir_p(BUILDS_DIR)
8
8
  end
9
9
 
10
10
  def build_debian
11
- ensure_program_installed('dpkg-deb', 'brew install dpkg')
11
+ ensure_program_installed("dpkg-deb", "brew install dpkg")
12
12
 
13
- root_dir = File.join(PACKAGING_DIR, 'debian')
14
- debian_dir = File.join(root_dir, 'shopify-cli', 'DEBIAN')
13
+ root_dir = File.join(PACKAGING_DIR, "debian")
14
+ debian_dir = File.join(root_dir, "shopify-cli", "DEBIAN")
15
15
  FileUtils.mkdir_p(debian_dir)
16
16
 
17
17
  puts "\nBuilding Debian package"
@@ -24,15 +24,15 @@ module ShopifyCli
24
24
  file_path = File.join(debian_dir, file)
25
25
 
26
26
  file_contents = File.read(File.join(root_dir, "#{file}.base"))
27
- file_contents = file_contents.gsub('SHOPIFY_CLI_VERSION', ShopifyCli::VERSION)
28
- File.open(file_path, 'w', 0775) { |f| f.write(file_contents) }
27
+ file_contents = file_contents.gsub("SHOPIFY_CLI_VERSION", ShopifyCli::VERSION)
28
+ File.open(file_path, "w", 0775) { |f| f.write(file_contents) }
29
29
  end
30
30
 
31
31
  puts "Building package..."
32
32
  Dir.chdir(root_dir)
33
- raise "Failed to build package" unless system('dpkg-deb', '-b', 'shopify-cli')
33
+ raise "Failed to build package" unless system("dpkg-deb", "-b", "shopify-cli")
34
34
 
35
- output_path = File.join(root_dir, 'shopify-cli.deb')
35
+ output_path = File.join(root_dir, "shopify-cli.deb")
36
36
  final_path = File.join(BUILDS_DIR, "shopify-cli-#{ShopifyCli::VERSION}.deb")
37
37
 
38
38
  puts "Moving generated package: \n From: #{output_path}\n To: #{final_path}\n\n"
@@ -40,34 +40,34 @@ module ShopifyCli
40
40
  end
41
41
 
42
42
  def build_rpm
43
- ensure_program_installed('rpmbuild', 'brew install rpm')
43
+ ensure_program_installed("rpmbuild", "brew install rpm")
44
44
 
45
- root_dir = File.join(PACKAGING_DIR, 'rpm')
46
- rpm_build_dir = File.join(root_dir, 'build')
45
+ root_dir = File.join(PACKAGING_DIR, "rpm")
46
+ rpm_build_dir = File.join(root_dir, "build")
47
47
  FileUtils.mkdir_p(rpm_build_dir)
48
48
 
49
- spec_path = File.join(root_dir, 'shopify-cli.spec')
49
+ spec_path = File.join(root_dir, "shopify-cli.spec")
50
50
  puts "\nBuilding RPM package"
51
51
 
52
52
  puts "Generating spec file..."
53
53
  File.delete(spec_path) if File.exist?(spec_path)
54
54
 
55
- spec_contents = File.read(File.join(root_dir, 'shopify-cli.spec.base'))
56
- spec_contents = spec_contents.gsub('SHOPIFY_CLI_VERSION', ShopifyCli::VERSION)
55
+ spec_contents = File.read(File.join(root_dir, "shopify-cli.spec.base"))
56
+ spec_contents = spec_contents.gsub("SHOPIFY_CLI_VERSION", ShopifyCli::VERSION)
57
57
  File.write(spec_path, spec_contents)
58
58
 
59
59
  puts "Building package..."
60
60
  Dir.chdir(root_dir)
61
- system('rpmbuild', '-bb', File.basename(spec_path))
61
+ system("rpmbuild", "-bb", File.basename(spec_path))
62
62
 
63
- output_dir = File.join(root_dir, 'build', 'noarch')
63
+ output_dir = File.join(root_dir, "build", "noarch")
64
64
 
65
65
  puts "Moving generated packages: \n From: #{output_dir}\n To: #{BUILDS_DIR}\n\n"
66
66
  FileUtils.mv(Dir.glob("#{output_dir}/*.rpm"), BUILDS_DIR)
67
67
  end
68
68
 
69
69
  def build_homebrew
70
- root_dir = File.join(PACKAGING_DIR, 'homebrew')
70
+ root_dir = File.join(PACKAGING_DIR, "homebrew")
71
71
 
72
72
  build_path = File.join(BUILDS_DIR, "shopify-cli.rb")
73
73
  puts "\nBuilding Homebrew package"
@@ -75,18 +75,18 @@ module ShopifyCli
75
75
  puts "Generating formula..."
76
76
  File.delete(build_path) if File.exist?(build_path)
77
77
 
78
- spec_contents = File.read(File.join(root_dir, 'shopify-cli.base.rb'))
79
- spec_contents = spec_contents.gsub('SHOPIFY_CLI_VERSION', ShopifyCli::VERSION)
78
+ spec_contents = File.read(File.join(root_dir, "shopify-cli.base.rb"))
79
+ spec_contents = spec_contents.gsub("SHOPIFY_CLI_VERSION", ShopifyCli::VERSION)
80
80
 
81
81
  puts "Grabbing sha256 checksum from Rubygems.org"
82
- require 'digest/sha2'
83
- require 'open-uri'
82
+ require "digest/sha2"
83
+ require "open-uri"
84
84
  gem_checksum = open("https://rubygems.org/downloads/shopify-cli-#{ShopifyCli::VERSION}.gem") do |io|
85
85
  Digest::SHA256.new.hexdigest(io.read)
86
86
  end
87
87
 
88
88
  puts "Got sha256 checksum for gem: #{gem_checksum}"
89
- spec_contents = spec_contents.gsub('SHOPIFY_CLI_GEM_CHECKSUM', gem_checksum)
89
+ spec_contents = spec_contents.gsub("SHOPIFY_CLI_GEM_CHECKSUM", gem_checksum)
90
90
 
91
91
  puts "Writing generated formula\n To: #{build_path}\n\n"
92
92
  File.write(build_path, spec_contents)
@@ -95,7 +95,7 @@ module ShopifyCli
95
95
  private
96
96
 
97
97
  def ensure_program_installed(program, installation_cmd)
98
- unless system(program, '--version', out: File::NULL, err: File::NULL)
98
+ unless system(program, "--version", out: File::NULL, err: File::NULL)
99
99
  raise <<~MESSAGE
100
100
 
101
101
  Could not find program #{program} which is required to build the package.
@@ -1,4 +1,4 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  ##
@@ -6,17 +6,17 @@ module ShopifyCli
6
6
  # schema.
7
7
  #
8
8
  class PartnersAPI < API
9
- autoload :Organizations, 'shopify-cli/partners_api/organizations'
9
+ autoload :Organizations, "shopify-cli/partners_api/organizations"
10
10
 
11
11
  # Defines the environment variable that this API looks for to operate on local
12
12
  # services. If you set this environment variable in your shell then the partners
13
- # api will operation on your local instance
13
+ # API will operate on your local instance
14
14
  #
15
15
  # #### Example
16
16
  #
17
17
  # SHOPIFY_APP_CLI_LOCAL_PARTNERS=1 shopify create
18
18
  #
19
- LOCAL_DEBUG = 'SHOPIFY_APP_CLI_LOCAL_PARTNERS'
19
+ LOCAL_DEBUG = "SHOPIFY_APP_CLI_LOCAL_PARTNERS"
20
20
 
21
21
  class << self
22
22
  ##
@@ -52,7 +52,7 @@ module ShopifyCli
52
52
 
53
53
  def partners_url_for(organization_id, api_client_id, local_debug)
54
54
  if ShopifyCli::Shopifolk.acting_as_shopify_organization?
55
- organization_id = 'internal'
55
+ organization_id = "internal"
56
56
  end
57
57
  "#{partners_endpoint(local_debug)}/#{organization_id}/apps/#{api_client_id}"
58
58
  end
@@ -65,7 +65,7 @@ module ShopifyCli
65
65
  authenticate(ctx)
66
66
  retry
67
67
  rescue API::APIRequestNotFoundError
68
- ctx.puts(ctx.message('core.partners_api.error.account_not_found', ShopifyCli::TOOL_NAME))
68
+ ctx.puts(ctx.message("core.partners_api.error.account_not_found", ShopifyCli::TOOL_NAME))
69
69
  end
70
70
 
71
71
  def api_client(ctx)
@@ -86,41 +86,47 @@ module ShopifyCli
86
86
  def authenticate(ctx)
87
87
  OAuth.new(
88
88
  ctx: ctx,
89
- service: 'identity',
89
+ service: "identity",
90
90
  client_id: cli_id,
91
- scopes: 'openid https://api.shopify.com/auth/partners.app.cli.access',
91
+ scopes: scopes.join(" "),
92
92
  request_exchange: partners_id,
93
93
  ).authenticate("#{auth_endpoint}/oauth")
94
94
  end
95
95
 
96
96
  def partners_id
97
- return '271e16d403dfa18082ffb3d197bd2b5f4479c3fc32736d69296829cbb28d41a6' if ENV[LOCAL_DEBUG].nil?
98
- 'df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978'
97
+ return "271e16d403dfa18082ffb3d197bd2b5f4479c3fc32736d69296829cbb28d41a6" if ENV[LOCAL_DEBUG].nil?
98
+ "df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978"
99
99
  end
100
100
 
101
101
  def cli_id
102
- return 'fbdb2649-e327-4907-8f67-908d24cfd7e3' if ENV[LOCAL_DEBUG].nil?
103
- 'e5380e02-312a-7408-5718-e07017e9cf52'
102
+ return "fbdb2649-e327-4907-8f67-908d24cfd7e3" if ENV[LOCAL_DEBUG].nil?
103
+ "e5380e02-312a-7408-5718-e07017e9cf52"
104
104
  end
105
105
 
106
106
  def auth_endpoint
107
- return 'https://accounts.shopify.com' if ENV[LOCAL_DEBUG].nil?
108
- 'https://identity.myshopify.io'
107
+ return "https://accounts.shopify.com" if ENV[LOCAL_DEBUG].nil?
108
+ "https://identity.myshopify.io"
109
109
  end
110
110
 
111
111
  def endpoint
112
- return 'https://partners.shopify.com' if ENV[LOCAL_DEBUG].nil?
113
- 'https://partners.myshopify.io/'
112
+ return "https://partners.shopify.com" if ENV[LOCAL_DEBUG].nil?
113
+ "https://partners.myshopify.io/"
114
114
  end
115
115
 
116
116
  def partners_endpoint(local_debug)
117
117
  domain = if local_debug
118
- 'partners.myshopify.io'
118
+ "partners.myshopify.io"
119
119
  else
120
- 'partners.shopify.com'
120
+ "partners.shopify.com"
121
121
  end
122
122
  "https://#{domain}"
123
123
  end
124
+
125
+ def scopes
126
+ %w[openid https://api.shopify.com/auth/partners.app.cli.access].tap do |result|
127
+ result << "employee" if ShopifyCli::Shopifolk.acting_as_shopify_organization?
128
+ end
129
+ end
124
130
  end
125
131
 
126
132
  def auth_headers(token)
@@ -3,26 +3,26 @@ module ShopifyCli
3
3
  class Organizations
4
4
  class << self
5
5
  def fetch_all(ctx)
6
- resp = PartnersAPI.query(ctx, 'all_organizations')
7
- (resp.dig('data', 'organizations', 'nodes') || []).map do |org|
8
- org['stores'] = (org.dig('stores', 'nodes') || [])
6
+ resp = PartnersAPI.query(ctx, "all_organizations")
7
+ (resp.dig("data", "organizations", "nodes") || []).map do |org|
8
+ org["stores"] = (org.dig("stores", "nodes") || [])
9
9
  org
10
10
  end
11
11
  end
12
12
 
13
13
  def fetch(ctx, id:)
14
- resp = PartnersAPI.query(ctx, 'find_organization', id: id)
15
- org = resp.dig('data', 'organizations', 'nodes').first
14
+ resp = PartnersAPI.query(ctx, "find_organization", id: id)
15
+ org = resp.dig("data", "organizations", "nodes").first
16
16
  return nil if org.nil?
17
- org['stores'] = (org.dig('stores', 'nodes') || [])
17
+ org["stores"] = (org.dig("stores", "nodes") || [])
18
18
  org
19
19
  end
20
20
 
21
21
  def fetch_with_app(ctx)
22
- resp = PartnersAPI.query(ctx, 'all_orgs_with_apps')
23
- (resp.dig('data', 'organizations', 'nodes') || []).map do |org|
24
- org['stores'] = (org.dig('stores', 'nodes') || [])
25
- org['apps'] = (org.dig('apps', 'nodes') || [])
22
+ resp = PartnersAPI.query(ctx, "all_orgs_with_apps")
23
+ (resp.dig("data", "organizations", "nodes") || []).map do |org|
24
+ org["stores"] = (org.dig("stores", "nodes") || [])
25
+ org["apps"] = (org.dig("apps", "nodes") || [])
26
26
  org
27
27
  end
28
28
  end
@@ -1,4 +1,4 @@
1
- require 'fileutils'
1
+ require "fileutils"
2
2
 
3
3
  module ShopifyCli
4
4
  ##
@@ -19,7 +19,7 @@ module ShopifyCli
19
19
  class << self
20
20
  def run_dir
21
21
  # is the directory where the pid and logfile are kept
22
- File.join(ShopifyCli.cache_dir, 'sv')
22
+ File.join(ShopifyCli.cache_dir, "sv")
23
23
  end
24
24
 
25
25
  ##
@@ -36,7 +36,7 @@ module ShopifyCli
36
36
  # will be nil if the process is not running.
37
37
  #
38
38
  def for_ident(identifier)
39
- pid, time = File.read(File.join(ShopifyCli::ProcessSupervision.run_dir, "#{identifier}.pid")).split(':')
39
+ pid, time = File.read(File.join(ShopifyCli::ProcessSupervision.run_dir, "#{identifier}.pid")).split(":")
40
40
  new(identifier, pid: Integer(pid), time: time)
41
41
  rescue Errno::ENOENT
42
42
  nil
@@ -66,7 +66,7 @@ module ShopifyCli
66
66
  pid_file = new(identifier)
67
67
 
68
68
  # Make sure the file exists and is empty, otherwise Windows fails
69
- File.open(pid_file.log_path, 'w') {}
69
+ File.open(pid_file.log_path, "w") {}
70
70
  pid = Process.spawn(
71
71
  *args,
72
72
  out: pid_file.log_path,
@@ -128,7 +128,7 @@ module ShopifyCli
128
128
  end
129
129
  end
130
130
 
131
- def initialize(identifier, pid: nil, time: Time.now.strftime('%s')) # :nodoc:
131
+ def initialize(identifier, pid: nil, time: Time.now.strftime("%s")) # :nodoc:
132
132
  @identifier = identifier
133
133
  @pid = pid
134
134
  @time = time
@@ -204,13 +204,13 @@ module ShopifyCli
204
204
 
205
205
  # Windows does not handle SIGTERM, go straight to SIGKILL
206
206
  unless ctx.windows?
207
- Process.kill('TERM', id)
207
+ Process.kill("TERM", id)
208
208
  50.times do
209
209
  sleep(0.1)
210
210
  break unless stat(id)
211
211
  end
212
212
  end
213
- Process.kill('KILL', id) if stat(id)
213
+ Process.kill("KILL", id) if stat(id)
214
214
  sleep(0.1) if ctx.windows? # Give Windows a second to actually close the process
215
215
  end
216
216
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
2
+ require "shopify_cli"
3
3
 
4
4
  module ShopifyCli
5
5
  ##
@@ -64,7 +64,7 @@ module ShopifyCli
64
64
  #
65
65
  def current_project_type
66
66
  return unless has_current?
67
- current.config['project_type'].to_sym
67
+ current.config["project_type"].to_sym
68
68
  end
69
69
 
70
70
  ##
@@ -84,13 +84,13 @@ module ShopifyCli
84
84
  # type = ShopifyCli::Project.current_project_type
85
85
  #
86
86
  def write(ctx, project_type:, organization_id:, **identifiers)
87
- require 'yaml' # takes 20ms, so deferred as late as possible.
87
+ require "yaml" # takes 20ms, so deferred as late as possible.
88
88
  content = Hash[{ project_type: project_type, organization_id: organization_id.to_i }
89
89
  .merge(identifiers)
90
90
  .collect { |k, v| [k.to_s, v] }]
91
- content['shopify_organization'] = true if Shopifolk.acting_as_shopify_organization?
91
+ content["shopify_organization"] = true if Shopifolk.acting_as_shopify_organization?
92
92
 
93
- ctx.write('.shopify-cli.yml', YAML.dump(content))
93
+ ctx.write(".shopify-cli.yml", YAML.dump(content))
94
94
  clear
95
95
  end
96
96
 
@@ -113,7 +113,7 @@ module ShopifyCli
113
113
  def at(dir)
114
114
  proj_dir = directory(dir)
115
115
  unless proj_dir
116
- raise(ShopifyCli::Abort, Context.message('core.project.error.not_in_project'))
116
+ raise(ShopifyCli::Abort, Context.message("core.project.error.not_in_project"))
117
117
  end
118
118
  @at ||= Hash.new { |h, k| h[k] = new(directory: k) }
119
119
  @at[proj_dir]
@@ -121,8 +121,8 @@ module ShopifyCli
121
121
 
122
122
  def __directory(curr)
123
123
  loop do
124
- return nil if curr == '/' || /^[A-Z]:\/$/.match?(curr)
125
- file = File.join(curr, '.shopify-cli.yml')
124
+ return nil if curr == "/" || /^[A-Z]:\/$/.match?(curr)
125
+ file = File.join(curr, ".shopify-cli.yml")
126
126
  return curr if File.exist?(file)
127
127
  curr = File.dirname(curr)
128
128
  end
@@ -168,15 +168,15 @@ module ShopifyCli
168
168
  #
169
169
  def config
170
170
  @config ||= begin
171
- config = load_yaml_file('.shopify-cli.yml')
171
+ config = load_yaml_file(".shopify-cli.yml")
172
172
  unless config.is_a?(Hash)
173
- raise ShopifyCli::Abort, Context.message('core.yaml.error.not_hash', '.shopify-cli.yml')
173
+ raise ShopifyCli::Abort, Context.message("core.yaml.error.not_hash", ".shopify-cli.yml")
174
174
  end
175
175
 
176
176
  # The app_type key was deprecated in favour of project_type, so replace it
177
- if config.key?('app_type')
178
- config['project_type'] = config['app_type']
179
- config.delete('app_type')
177
+ if config.key?("app_type")
178
+ config["project_type"] = config["app_type"]
179
+ config.delete("app_type")
180
180
  end
181
181
 
182
182
  config
@@ -187,16 +187,16 @@ module ShopifyCli
187
187
 
188
188
  def load_yaml_file(relative_path)
189
189
  f = File.join(directory, relative_path)
190
- require 'yaml' # takes 20ms, so deferred as late as possible.
190
+ require "yaml" # takes 20ms, so deferred as late as possible.
191
191
  begin
192
192
  YAML.load_file(f)
193
193
  rescue Psych::SyntaxError => e
194
- raise(ShopifyCli::Abort, Context.message('core.yaml.error.invalid', relative_path, e.message))
194
+ raise(ShopifyCli::Abort, Context.message("core.yaml.error.invalid", relative_path, e.message))
195
195
  # rescue Errno::EACCES => e
196
196
  # TODO
197
197
  # Dev::Helpers::EaccesHandler.diagnose_and_raise(f, e, mode: :read)
198
198
  rescue Errno::ENOENT
199
- raise ShopifyCli::Abort, Context.message('core.yaml.error.not_found', f)
199
+ raise ShopifyCli::Abort, Context.message("core.yaml.error.not_found", f)
200
200
  end
201
201
  end
202
202
  end