shopify-cli 1.4.0 → 1.7.1

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 (302) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +2 -2
  3. data/.github/CONTRIBUTING.md +9 -1
  4. data/.github/PULL_REQUEST_TEMPLATE.md +10 -1
  5. data/.github/workflows/release.yml +61 -0
  6. data/.github/workflows/triage.yml +22 -0
  7. data/.rubocop.yml +56 -7
  8. data/.rubocop_todo.yml +4 -13
  9. data/.travis.yml +1 -0
  10. data/CHANGELOG.md +27 -1
  11. data/Gemfile +12 -10
  12. data/Gemfile.lock +33 -31
  13. data/README.md +39 -7
  14. data/RELEASING.md +5 -27
  15. data/Rakefile +32 -28
  16. data/bin/load_shopify.rb +6 -6
  17. data/bin/shopify +2 -2
  18. data/dev.yml +2 -2
  19. data/docs/_config.yml +1 -18
  20. data/docs/app/node/commands/index.md +2 -80
  21. data/docs/app/node/index.md +2 -33
  22. data/docs/app/rails/commands/index.md +2 -78
  23. data/docs/app/rails/index.md +2 -34
  24. data/docs/core/index.md +2 -84
  25. data/docs/getting-started/index.md +2 -25
  26. data/docs/getting-started/install/index.md +1 -118
  27. data/docs/getting-started/migrate/index.md +2 -94
  28. data/docs/getting-started/uninstall/index.md +2 -35
  29. data/docs/getting-started/upgrade/index.md +2 -39
  30. data/docs/help/start-app/index.md +2 -4
  31. data/docs/index.md +2 -24
  32. data/ext/shopify-cli/extconf.rb +7 -7
  33. data/install.sh +1 -1
  34. data/lib/docgen/markdown.rb +11 -11
  35. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  36. data/lib/project_types/extension/cli.rb +64 -47
  37. data/lib/project_types/extension/commands/build.rb +3 -3
  38. data/lib/project_types/extension/commands/create.rb +16 -9
  39. data/lib/project_types/extension/commands/extension_command.rb +8 -5
  40. data/lib/project_types/extension/commands/push.rb +8 -8
  41. data/lib/project_types/extension/commands/register.rb +19 -30
  42. data/lib/project_types/extension/commands/serve.rb +23 -3
  43. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  44. data/lib/project_types/extension/extension_project.rb +4 -4
  45. data/lib/project_types/extension/extension_project_keys.rb +4 -4
  46. data/lib/project_types/extension/features/argo.rb +117 -0
  47. data/lib/project_types/extension/features/argo_config.rb +5 -5
  48. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  49. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  50. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  51. data/lib/project_types/extension/forms/create.rb +28 -34
  52. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  53. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  54. data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
  55. data/lib/project_types/extension/messages/messages.rb +53 -52
  56. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  57. data/lib/project_types/extension/models/specification.rb +35 -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 +67 -0
  60. data/lib/project_types/extension/models/specifications.rb +77 -0
  61. data/lib/project_types/extension/tasks/configure_features.rb +52 -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 +6 -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 +38 -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 -16
  73. data/lib/project_types/node/commands/connect.rb +15 -0
  74. data/lib/project_types/node/commands/create.rb +44 -41
  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 +9 -18
  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 +7 -7
  86. data/lib/project_types/node/messages/messages.rb +19 -53
  87. data/lib/project_types/rails/cli.rb +21 -18
  88. data/lib/project_types/rails/commands/connect.rb +15 -0
  89. data/lib/project_types/rails/commands/create.rb +58 -57
  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 +24 -24
  102. data/lib/project_types/rails/gem.rb +24 -24
  103. data/lib/project_types/rails/messages/messages.rb +12 -9
  104. data/lib/project_types/rails/ruby.rb +2 -2
  105. data/lib/project_types/script/cli.rb +44 -38
  106. data/lib/project_types/script/commands/create.rb +15 -10
  107. data/lib/project_types/script/commands/disable.rb +3 -3
  108. data/lib/project_types/script/commands/enable.rb +19 -9
  109. data/lib/project_types/script/commands/push.rb +10 -17
  110. data/lib/project_types/script/config/extension_points.yml +17 -12
  111. data/lib/project_types/script/errors.rb +22 -0
  112. data/lib/project_types/script/forms/create.rb +29 -5
  113. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
  114. data/lib/project_types/script/layers/application/build_script.rb +19 -19
  115. data/lib/project_types/script/layers/application/create_script.rb +41 -12
  116. data/lib/project_types/script/layers/application/disable_script.rb +2 -2
  117. data/lib/project_types/script/layers/application/enable_script.rb +2 -2
  118. data/lib/project_types/script/layers/application/extension_points.rb +24 -0
  119. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  120. data/lib/project_types/script/layers/application/push_script.rb +15 -18
  121. data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
  122. data/lib/project_types/script/layers/domain/errors.rb +23 -0
  123. data/lib/project_types/script/layers/domain/extension_point.rb +62 -7
  124. data/lib/project_types/script/layers/domain/metadata.rb +55 -0
  125. data/lib/project_types/script/layers/domain/push_package.rb +29 -6
  126. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +19 -55
  127. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +49 -18
  128. data/lib/project_types/script/layers/infrastructure/config_ui_repository.rb +46 -0
  129. data/lib/project_types/script/layers/infrastructure/errors.rb +37 -1
  130. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  131. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  132. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
  133. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  134. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  135. data/lib/project_types/script/layers/infrastructure/script_service.rb +39 -17
  136. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  137. data/lib/project_types/script/messages/messages.rb +79 -10
  138. data/lib/project_types/script/script_project.rb +26 -16
  139. data/lib/project_types/script/ui/error_handler.rb +141 -45
  140. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  141. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  142. data/lib/project_types/theme/cli.rb +40 -0
  143. data/lib/project_types/theme/commands/connect.rb +54 -0
  144. data/lib/project_types/theme/commands/create.rb +48 -0
  145. data/lib/project_types/theme/commands/deploy.rb +38 -0
  146. data/lib/project_types/theme/commands/generate.rb +20 -0
  147. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  148. data/lib/project_types/theme/commands/push.rb +55 -0
  149. data/lib/project_types/theme/commands/serve.rb +31 -0
  150. data/lib/project_types/theme/forms/connect.rb +34 -0
  151. data/lib/project_types/theme/forms/create.rb +22 -0
  152. data/lib/project_types/theme/messages/messages.rb +147 -0
  153. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  154. data/lib/project_types/theme/themekit.rb +113 -0
  155. data/lib/rubygems_plugin.rb +3 -3
  156. data/lib/shopify-cli/admin_api.rb +52 -12
  157. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  158. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  159. data/lib/shopify-cli/api.rb +36 -31
  160. data/lib/shopify-cli/command.rb +1 -1
  161. data/lib/shopify-cli/commands.rb +9 -9
  162. data/lib/shopify-cli/commands/config.rb +28 -28
  163. data/lib/shopify-cli/commands/connect.rb +35 -18
  164. data/lib/shopify-cli/commands/create.rb +5 -5
  165. data/lib/shopify-cli/commands/help.rb +6 -6
  166. data/lib/shopify-cli/commands/logout.rb +3 -3
  167. data/lib/shopify-cli/commands/system.rb +33 -33
  168. data/lib/shopify-cli/commands/version.rb +2 -2
  169. data/lib/shopify-cli/context.rb +43 -22
  170. data/lib/shopify-cli/core.rb +4 -4
  171. data/lib/shopify-cli/core/entry_point.rb +5 -5
  172. data/lib/shopify-cli/core/executor.rb +1 -1
  173. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  174. data/lib/shopify-cli/core/monorail.rb +21 -19
  175. data/lib/shopify-cli/db.rb +2 -2
  176. data/lib/shopify-cli/feature.rb +1 -3
  177. data/lib/shopify-cli/form.rb +1 -1
  178. data/lib/shopify-cli/git.rb +17 -17
  179. data/lib/shopify-cli/helpers.rb +1 -1
  180. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  181. data/lib/shopify-cli/heroku.rb +28 -28
  182. data/lib/shopify-cli/http_request.rb +21 -9
  183. data/lib/shopify-cli/js_deps.rb +13 -13
  184. data/lib/shopify-cli/js_system.rb +5 -5
  185. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  186. data/lib/shopify-cli/messages/messages.rb +21 -10
  187. data/lib/shopify-cli/method_object.rb +104 -0
  188. data/lib/shopify-cli/oauth.rb +25 -25
  189. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  190. data/lib/shopify-cli/options.rb +3 -3
  191. data/lib/shopify-cli/packager.rb +24 -24
  192. data/lib/shopify-cli/partners_api.rb +38 -16
  193. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  194. data/lib/shopify-cli/process_supervision.rb +8 -8
  195. data/lib/shopify-cli/project.rb +27 -23
  196. data/lib/shopify-cli/project_type.rb +21 -5
  197. data/lib/shopify-cli/resolve_constant.rb +25 -0
  198. data/lib/shopify-cli/resources.rb +1 -1
  199. data/lib/shopify-cli/resources/env_file.rb +9 -9
  200. data/lib/shopify-cli/result.rb +432 -0
  201. data/lib/shopify-cli/shopifolk.rb +35 -18
  202. data/lib/shopify-cli/sub_command.rb +1 -1
  203. data/lib/shopify-cli/task.rb +9 -1
  204. data/lib/shopify-cli/tasks.rb +7 -7
  205. data/lib/shopify-cli/tasks/create_api_client.rb +17 -6
  206. data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
  207. data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
  208. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  209. data/lib/shopify-cli/tasks/select_org_and_shop.rb +29 -24
  210. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  211. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  212. data/lib/shopify-cli/tunnel.rb +36 -30
  213. data/lib/shopify-cli/version.rb +1 -1
  214. data/lib/shopify_cli.rb +57 -52
  215. data/shopify-cli.gemspec +6 -6
  216. data/shopify.fish +1 -1
  217. data/shopify.sh +1 -1
  218. data/vendor/deps/cli-kit/REVISION +1 -1
  219. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  220. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  221. data/vendor/deps/cli-ui/REVISION +1 -1
  222. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  223. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  224. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  225. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  226. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  227. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  228. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  229. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  230. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  231. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  232. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  233. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  234. data/vendor/deps/webrick/.gitignore +9 -0
  235. data/vendor/deps/webrick/Gemfile +3 -0
  236. data/vendor/deps/webrick/LICENSE.txt +22 -0
  237. data/vendor/deps/webrick/README.md +61 -0
  238. data/vendor/deps/webrick/Rakefile +10 -0
  239. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  240. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  241. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  242. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  243. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  244. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  245. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  246. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  251. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  252. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  253. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  254. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  255. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  256. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  257. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  258. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  259. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  263. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  264. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  265. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  266. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  267. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  268. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  269. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  270. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  271. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  272. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  273. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  274. data/vendor/deps/webrick/webrick.gemspec +74 -0
  275. data/vendor/gen/template/bin/update-deps +9 -9
  276. metadata +83 -29
  277. data/docs/Gemfile +0 -5
  278. data/docs/Gemfile.lock +0 -258
  279. data/docs/_data/nav.yml +0 -35
  280. data/docs/_includes/footer.html +0 -15
  281. data/docs/_includes/head.html +0 -19
  282. data/docs/_includes/sidebar_nav.html +0 -22
  283. data/docs/_includes/toc.html +0 -112
  284. data/docs/_layouts/default.html +0 -79
  285. data/docs/css/docs.css +0 -157
  286. data/docs/images/header.png +0 -0
  287. data/docs/installing-ruby.md +0 -28
  288. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  289. data/lib/project_types/extension/features/argo/base.rb +0 -129
  290. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  291. data/lib/project_types/extension/forms/register.rb +0 -47
  292. data/lib/project_types/extension/models/type.rb +0 -81
  293. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  294. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  295. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  296. data/lib/project_types/node/commands/generate/page.rb +0 -59
  297. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  298. data/lib/project_types/script/layers/domain/script.rb +0 -18
  299. data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
  300. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
  301. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  302. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -1,25 +1,25 @@
1
- require 'uri'
1
+ require "uri"
2
2
 
3
3
  module Rails
4
4
  module Forms
5
5
  class Create < ShopifyCli::Form
6
6
  attr_accessor :name
7
7
  flag_arguments :title, :organization_id, :shop_domain, :type, :db
8
- VALID_DB_TYPES = ['sqlite3',
9
- 'mysql',
10
- 'postgresql',
11
- 'sqlite3',
12
- 'oracle',
13
- 'frontbase',
14
- 'ibm_db',
15
- 'sqlserver',
16
- 'jdbcmysql',
17
- 'jdbcsqlite3',
18
- 'jdbcpostgresql',
19
- 'jdbc']
8
+ VALID_DB_TYPES = ["sqlite3",
9
+ "mysql",
10
+ "postgresql",
11
+ "sqlite3",
12
+ "oracle",
13
+ "frontbase",
14
+ "ibm_db",
15
+ "sqlserver",
16
+ "jdbcmysql",
17
+ "jdbcsqlite3",
18
+ "jdbcpostgresql",
19
+ "jdbc"]
20
20
 
21
21
  def ask
22
- self.title ||= CLI::UI::Prompt.ask(ctx.message('rails.forms.create.app_name'))
22
+ self.title ||= CLI::UI::Prompt.ask(ctx.message("rails.forms.create.app_name"))
23
23
  self.type = ask_type
24
24
  self.name = self.title.downcase.split(" ").join("_")
25
25
  res = ShopifyCli::Tasks::SelectOrgAndShop.call(ctx, organization_id: organization_id, shop_domain: shop_domain)
@@ -32,24 +32,24 @@ module Rails
32
32
 
33
33
  def ask_type
34
34
  if type.nil?
35
- return CLI::UI::Prompt.ask(ctx.message('rails.forms.create.app_type.select')) do |handler|
36
- handler.option(ctx.message('rails.forms.create.app_type.select_public')) { 'public' }
37
- handler.option(ctx.message('rails.forms.create.app_type.select_custom')) { 'custom' }
35
+ return CLI::UI::Prompt.ask(ctx.message("rails.forms.create.app_type.select")) do |handler|
36
+ handler.option(ctx.message("rails.forms.create.app_type.select_public")) { "public" }
37
+ handler.option(ctx.message("rails.forms.create.app_type.select_custom")) { "custom" }
38
38
  end
39
39
  end
40
40
 
41
41
  unless ShopifyCli::Tasks::CreateApiClient::VALID_APP_TYPES.include?(type)
42
- ctx.abort(ctx.message('rails.forms.create.error.invalid_app_type', type))
42
+ ctx.abort(ctx.message("rails.forms.create.error.invalid_app_type", type))
43
43
  end
44
- ctx.puts(ctx.message('rails.forms.create.app_type.selected', type))
44
+ ctx.puts(ctx.message("rails.forms.create.app_type.selected", type))
45
45
  type
46
46
  end
47
47
 
48
48
  def ask_db
49
49
  if db.nil?
50
- return 'sqlite3' unless CLI::UI::Prompt.confirm(ctx.message('rails.forms.create.db.want_select'),
51
- default: false)
52
- @db = CLI::UI::Prompt.ask(ctx.message('rails.forms.create.db.select')) do |handler|
50
+ return "sqlite3" unless CLI::UI::Prompt.confirm(ctx.message("rails.forms.create.db.want_select"),
51
+ default: false)
52
+ @db = CLI::UI::Prompt.ask(ctx.message("rails.forms.create.db.select")) do |handler|
53
53
  VALID_DB_TYPES.each do |db_type|
54
54
  handler.option(ctx.message("rails.forms.create.db.select_#{db_type}")) { db_type }
55
55
  end
@@ -57,9 +57,9 @@ module Rails
57
57
  end
58
58
 
59
59
  unless VALID_DB_TYPES.include?(db)
60
- ctx.abort(ctx.message('rails.forms.create.error.invalid_db_type', db))
60
+ ctx.abort(ctx.message("rails.forms.create.error.invalid_db_type", db))
61
61
  end
62
- ctx.puts(ctx.message('rails.forms.create.db.selected', db))
62
+ ctx.puts(ctx.message("rails.forms.create.db.selected", db))
63
63
  db
64
64
  end
65
65
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
2
+ require "shopify_cli"
3
3
 
4
4
  module Rails
5
5
  class Gem
@@ -14,52 +14,52 @@ module Rails
14
14
  name = args.shift
15
15
  version = args.shift
16
16
  gem = new(ctx: ctx, name: name, version: version)
17
- ctx.debug(ctx.message('rails.gem.installed_debug', name, gem.installed?))
17
+ ctx.debug(ctx.message("rails.gem.installed_debug", name, gem.installed?))
18
18
  gem.installed? ? true : gem.install!
19
19
  end
20
20
 
21
21
  def binary_path_for(ctx, binary)
22
- path_to_binary = File.join(gem_home(ctx), 'bin', binary)
22
+ path_to_binary = File.join(gem_home(ctx), "bin", binary)
23
23
  File.exist?(path_to_binary) ? path_to_binary : binary
24
24
  end
25
25
 
26
26
  def gem_home(ctx)
27
- ctx.getenv('GEM_HOME') || apply_gem_home(ctx)
27
+ ctx.getenv("GEM_HOME") || apply_gem_home(ctx)
28
28
  end
29
29
 
30
30
  def gem_path(ctx)
31
- ctx.getenv('GEM_PATH') || apply_gem_path(ctx)
31
+ ctx.getenv("GEM_PATH") || apply_gem_path(ctx)
32
32
  end
33
33
 
34
34
  private
35
35
 
36
36
  def apply_gem_home(ctx)
37
- path = ''
37
+ path = ""
38
38
  # extract GEM_HOME from `gem environment home` command
39
- out, stat = ctx.capture2e('gem', 'environment', 'home')
40
- path = out&.empty? ? '' : out.strip if stat.success?
39
+ out, stat = ctx.capture2e("gem", "environment", "home")
40
+ path = out&.empty? ? "" : out.strip if stat.success?
41
41
  # fallback if return from `gem environment home` is empty (somewhat unlikely)
42
42
  path = fallback_gem_home_path(ctx) if path.empty?
43
43
  # fallback if path isn't writable (if using a system installed ruby)
44
44
  path = fallback_gem_home_path(ctx) unless File.writable?(path)
45
45
  ctx.mkdir_p(path) unless Dir.exist?(path)
46
- ctx.debug(ctx.message('rails.gem.setting_gem_home', path))
47
- ctx.setenv('GEM_HOME', path)
46
+ ctx.debug(ctx.message("rails.gem.setting_gem_home", path))
47
+ ctx.setenv("GEM_HOME", path)
48
48
  end
49
49
 
50
50
  def apply_gem_path(ctx)
51
- path = ''
52
- out, stat = ctx.capture2e('gem', 'environment', 'path')
53
- path = out&.empty? ? '' : out.strip if stat.success?
51
+ path = ""
52
+ out, stat = ctx.capture2e("gem", "environment", "path")
53
+ path = out&.empty? ? "" : out.strip if stat.success?
54
54
  # usually GEM_PATH already contains GEM_HOME
55
55
  # if gem_home() falls back to our fallback path, we need to add it
56
56
  path = gem_home(ctx) + File::PATH_SEPARATOR + path unless path.include?(gem_home(ctx))
57
- ctx.debug(ctx.message('rails.gem.setting_gem_path', path))
58
- ctx.setenv('GEM_PATH', path)
57
+ ctx.debug(ctx.message("rails.gem.setting_gem_path", path))
58
+ ctx.setenv("GEM_PATH", path)
59
59
  end
60
60
 
61
61
  def fallback_gem_home_path(ctx)
62
- File.join(ctx.getenv('HOME'), '.gem', 'ruby', RUBY_VERSION)
62
+ File.join(ctx.getenv("HOME"), ".gem", "ruby", RUBY_VERSION)
63
63
  end
64
64
  end
65
65
 
@@ -67,7 +67,7 @@ module Rails
67
67
  found = false
68
68
  paths = self.class.gem_path(ctx).split(File::PATH_SEPARATOR)
69
69
  paths.each do |path|
70
- ctx.debug(ctx.message('rails.gem.checking_installation_path', "#{path}/gems/", name))
70
+ ctx.debug(ctx.message("rails.gem.checking_installation_path", "#{path}/gems/", name))
71
71
  found = !!Dir.glob("#{path}/gems/#{name}-*").detect do |f|
72
72
  gem_satisfies_version?(f)
73
73
  end
@@ -78,18 +78,18 @@ module Rails
78
78
 
79
79
  def install!
80
80
  spin = CLI::UI::SpinGroup.new
81
- spin.add(ctx.message('rails.gem.installing', name)) do |spinner|
81
+ spin.add(ctx.message("rails.gem.installing", name)) do |spinner|
82
82
  args = %w(gem install)
83
83
  args.push(name)
84
84
  unless version.nil?
85
- if ctx.windows? && version.include?('~')
86
- args.push('-v', "\"#{version}\"")
85
+ if ctx.windows? && version.include?("~")
86
+ args.push("-v", "\"#{version}\"")
87
87
  else
88
- args.push('-v', version)
88
+ args.push("-v", version)
89
89
  end
90
90
  end
91
91
  ctx.system(*args)
92
- spinner.update_title(ctx.message('rails.gem.installed', name))
92
+ spinner.update_title(ctx.message("rails.gem.installed", name))
93
93
  end
94
94
  spin.wait
95
95
  end
@@ -98,8 +98,8 @@ module Rails
98
98
  if version
99
99
  # there was a specific version given during new(), so
100
100
  # check version of gem found to determine match
101
- require 'semantic/semantic'
102
- found_version, _ = path.match(%r{/#{Regexp.quote(name)}-([\d\.]+)})&.captures
101
+ require "semantic/semantic"
102
+ found_version, _ = path.match(%r{/#{Regexp.quote(name)}-(\d\.\d\.\d)})&.captures
103
103
  found_version.nil? ? false : Semantic::Version.new(found_version).satisfies?(version)
104
104
  else
105
105
  # otherwise ignore the actual version number,
@@ -17,22 +17,29 @@ module Rails
17
17
  setting_gem_path: "GEM_PATH being set to %s",
18
18
  },
19
19
 
20
+ connect: {
21
+ connected: "Project now connected to {{green:%s}}",
22
+ production_warning: <<~MESSAGE,
23
+ {{yellow:! Warning: if you have connected to an {{bold:app in production}}, running {{command:serve}} may update the app URL and cause an outage.
24
+ MESSAGE
25
+ },
26
+
20
27
  create: {
21
28
  help: <<~HELP,
22
29
  {{command:%s create rails}}: Creates a ruby on rails app.
23
30
  Usage: {{command:%s create rails}}
24
31
  Options:
25
32
  {{command:--name=NAME}} App name. Any string.
26
- {{command:--app_url=APPURL}} App URL. Must be a valid URL.
27
- {{command:--organization_id=ID}} Partner organization ID. Must be an existing organization.
28
- {{command:--shop_domain=MYSHOPIFYDOMAIN }} Development store URL. Must be an existing development store.
33
+ {{command:--app-url=APPURL}} App URL. Must be a valid URL.
34
+ {{command:--organization-id=ID}} Partner organization ID. Must be an existing organization.
35
+ {{command:--shop-domain=MYSHOPIFYDOMAIN }} Development store URL. Must be an existing development store.
29
36
  {{command:--db=DB}} Database type. Must be one of: mysql, postgresql, sqlite3, oracle, frontbase, ibm_db, sqlserver, jdbcmysql, jdbcsqlite3, jdbcpostgresql, jdbc.
30
- {{command:--rails_opts=RAILSOPTS}} Additional options. Must be string containing one or more valid Rails options, separated by spaces.
37
+ {{command:--rails-opts=RAILSOPTS}} Additional options. Must be string containing one or more valid Rails options, separated by spaces.
31
38
  HELP
32
39
 
33
40
  error: {
34
41
  invalid_ruby_version: <<~MSG,
35
- This project requires a ruby version ~> 2.5.
42
+ This project requires a Ruby version ~> 2.5 or Ruby 3.0
36
43
  See {{underline:https://github.com/Shopify/shopify-app-cli/blob/master/docs/installing-ruby.md}}
37
44
  for our recommended method of installing ruby.
38
45
  MSG
@@ -48,10 +55,6 @@ module Rails
48
55
  },
49
56
 
50
57
  info: {
51
- created: "{{v}} {{green:%s}} was created in your Partner Dashboard {{underline:%s}}",
52
- serve: "{{*}} Change directories to your new project folder {{green:%s}} and run {{command:%s serve}} " \
53
- "to start a local server",
54
- install: "{{*}} Then, visit {{underline:%s/test}} to install {{green:%s}} on your Dev Store",
55
58
  open_new_shell: "{{*}} {{yellow:After installing %s, please open a new Command Prompt or PowerShell " \
56
59
  "window to continue.}}",
57
60
  },
@@ -8,8 +8,8 @@ module Rails
8
8
 
9
9
  class << self
10
10
  def version(ctx)
11
- require 'semantic/semantic'
12
- out, _ = ctx.capture2('ruby', '-v')
11
+ require "semantic/semantic"
12
+ out, _ = ctx.capture2("ruby", "-v")
13
13
  Semantic::Version.new(VERSION_STRING.match(out)[1])
14
14
  end
15
15
  end
@@ -3,73 +3,79 @@
3
3
  module Script
4
4
  class Project < ShopifyCli::ProjectType
5
5
  hidden_feature(feature_set: :script_project)
6
- creator 'Script', 'Script::Commands::Create'
6
+ title("Script")
7
+ creator("Script::Commands::Create")
7
8
 
8
- register_command('Script::Commands::Push', 'push')
9
- register_command('Script::Commands::Disable', 'disable')
10
- register_command('Script::Commands::Enable', 'enable')
9
+ register_command("Script::Commands::Push", "push")
10
+ register_command("Script::Commands::Disable", "disable")
11
+ register_command("Script::Commands::Enable", "enable")
11
12
 
12
- require Project.project_filepath('messages/messages')
13
+ require Project.project_filepath("messages/messages")
13
14
  register_messages(Script::Messages::MESSAGES)
14
15
  end
15
16
 
16
17
  # define/autoload project specific Commands
17
18
  module Commands
18
- autoload :Create, Project.project_filepath('commands/create')
19
- autoload :Push, Project.project_filepath('commands/push')
20
- autoload :Disable, Project.project_filepath('commands/disable')
21
- autoload :Enable, Project.project_filepath('commands/enable')
19
+ autoload :Create, Project.project_filepath("commands/create")
20
+ autoload :Push, Project.project_filepath("commands/push")
21
+ autoload :Disable, Project.project_filepath("commands/disable")
22
+ autoload :Enable, Project.project_filepath("commands/enable")
22
23
  end
23
24
 
24
25
  # define/autoload project specific Forms
25
26
  module Forms
26
- autoload :Create, Project.project_filepath('forms/create')
27
- autoload :ScriptForm, Project.project_filepath('forms/script_form')
27
+ autoload :Create, Project.project_filepath("forms/create")
28
+ autoload :ScriptForm, Project.project_filepath("forms/script_form")
28
29
  end
29
30
 
30
31
  module Layers
31
32
  module Application
32
- autoload :BuildScript, Project.project_filepath('layers/application/build_script')
33
- autoload :CreateScript, Project.project_filepath('layers/application/create_script')
34
- autoload :PushScript, Project.project_filepath('layers/application/push_script')
35
- autoload :DisableScript, Project.project_filepath('layers/application/disable_script')
36
- autoload :EnableScript, Project.project_filepath('layers/application/enable_script')
37
- autoload :ExtensionPoints, Project.project_filepath('layers/application/extension_points')
38
- autoload :ProjectDependencies, Project.project_filepath('layers/application/project_dependencies')
33
+ autoload :BuildScript, Project.project_filepath("layers/application/build_script")
34
+ autoload :CreateScript, Project.project_filepath("layers/application/create_script")
35
+ autoload :PushScript, Project.project_filepath("layers/application/push_script")
36
+ autoload :DisableScript, Project.project_filepath("layers/application/disable_script")
37
+ autoload :EnableScript, Project.project_filepath("layers/application/enable_script")
38
+ autoload :ExtensionPoints, Project.project_filepath("layers/application/extension_points")
39
+ autoload :ProjectDependencies, Project.project_filepath("layers/application/project_dependencies")
39
40
  end
40
41
 
41
42
  module Domain
42
- autoload :Errors, Project.project_filepath('layers/domain/errors')
43
- autoload :PushPackage, Project.project_filepath('layers/domain/push_package')
44
- autoload :ExtensionPoint, Project.project_filepath('layers/domain/extension_point')
45
- autoload :Script, Project.project_filepath('layers/domain/script')
43
+ autoload :Errors, Project.project_filepath("layers/domain/errors")
44
+ autoload :ConfigUi, Project.project_filepath("layers/domain/config_ui")
45
+ autoload :PushPackage, Project.project_filepath("layers/domain/push_package")
46
+ autoload :Metadata, Project.project_filepath("layers/domain/metadata")
47
+ autoload :ExtensionPoint, Project.project_filepath("layers/domain/extension_point")
46
48
  end
47
49
 
48
50
  module Infrastructure
49
- autoload :Errors, Project.project_filepath('layers/infrastructure/errors')
51
+ autoload :Errors, Project.project_filepath("layers/infrastructure/errors")
50
52
  autoload :AssemblyScriptDependencyManager,
51
- Project.project_filepath('layers/infrastructure/assemblyscript_dependency_manager')
53
+ Project.project_filepath("layers/infrastructure/assemblyscript_dependency_manager")
52
54
  autoload :AssemblyScriptProjectCreator,
53
- Project.project_filepath('layers/infrastructure/assemblyscript_project_creator')
54
- autoload :AssemblyScriptTaskRunner, Project.project_filepath('layers/infrastructure/assemblyscript_task_runner')
55
- autoload :AssemblyScriptTsConfig, Project.project_filepath('layers/infrastructure/assemblyscript_tsconfig')
56
- autoload :PushPackageRepository, Project.project_filepath('layers/infrastructure/push_package_repository')
57
- autoload :ExtensionPointRepository, Project.project_filepath('layers/infrastructure/extension_point_repository')
58
- autoload :ProjectCreator, Project.project_filepath('layers/infrastructure/project_creator')
59
- autoload :ScriptRepository, Project.project_filepath('layers/infrastructure/script_repository')
60
- autoload :ScriptService, Project.project_filepath('layers/infrastructure/script_service')
61
- autoload :TaskRunner, Project.project_filepath('layers/infrastructure/task_runner')
55
+ Project.project_filepath("layers/infrastructure/assemblyscript_project_creator")
56
+ autoload :AssemblyScriptTaskRunner, Project.project_filepath("layers/infrastructure/assemblyscript_task_runner")
57
+ autoload :AssemblyScriptTsConfig, Project.project_filepath("layers/infrastructure/assemblyscript_tsconfig")
58
+ autoload :RustProjectCreator,
59
+ Project.project_filepath("layers/infrastructure/rust_project_creator.rb")
60
+ autoload :RustTaskRunner, Project.project_filepath("layers/infrastructure/rust_task_runner")
61
+
62
+ autoload :ConfigUiRepository, Project.project_filepath("layers/infrastructure/config_ui_repository")
63
+ autoload :PushPackageRepository, Project.project_filepath("layers/infrastructure/push_package_repository")
64
+ autoload :ExtensionPointRepository, Project.project_filepath("layers/infrastructure/extension_point_repository")
65
+ autoload :ProjectCreator, Project.project_filepath("layers/infrastructure/project_creator")
66
+ autoload :ScriptService, Project.project_filepath("layers/infrastructure/script_service")
67
+ autoload :TaskRunner, Project.project_filepath("layers/infrastructure/task_runner")
62
68
  end
63
69
  end
64
70
 
65
71
  module UI
66
- autoload :ErrorHandler, Project.project_filepath('ui/error_handler')
67
- autoload :PrintingSpinner, Project.project_filepath('ui/printing_spinner')
68
- autoload :StrictSpinner, Project.project_filepath('ui/strict_spinner')
72
+ autoload :ErrorHandler, Project.project_filepath("ui/error_handler")
73
+ autoload :PrintingSpinner, Project.project_filepath("ui/printing_spinner")
74
+ autoload :StrictSpinner, Project.project_filepath("ui/strict_spinner")
69
75
  end
70
76
 
71
- autoload :ScriptProject, Project.project_filepath('script_project')
72
- autoload :Errors, Project.project_filepath('errors')
77
+ autoload :ScriptProject, Project.project_filepath("script_project")
78
+ autoload :Errors, Project.project_filepath("errors")
73
79
 
74
80
  class ScriptProjectError < StandardError; end
75
81
  end
@@ -4,38 +4,43 @@ module Script
4
4
  module Commands
5
5
  class Create < ShopifyCli::SubCommand
6
6
  options do |parser, flags|
7
- parser.on('--name=NAME') { |name| flags[:name] = name }
8
- parser.on('--extension_point=EP_NAME') { |ep_name| flags[:extension_point] = ep_name }
7
+ parser.on("--name=NAME") { |name| flags[:name] = name }
8
+ parser.on("--description=DESCRIPTION") { |description| flags[:description] = description }
9
+ parser.on("--extension_point=EP_NAME") { |ep_name| flags[:extension_point] = ep_name }
10
+ parser.on("--extension-point=EP_NAME") { |ep_name| flags[:extension_point] = ep_name }
11
+ parser.on("--language=LANGUAGE") { |language| flags[:language] = language }
12
+ parser.on("--no-config-ui") { |no_config_ui| flags[:no_config_ui] = no_config_ui }
9
13
  end
10
14
 
11
15
  def call(args, _name)
12
- language = 'ts'
13
16
  cur_dir = @ctx.root
14
17
 
15
18
  form = Forms::Create.ask(@ctx, args, options.flags)
16
19
  return @ctx.puts(self.class.help) if form.nil?
17
20
 
18
- unless !form.name.empty? && form.extension_point && ScriptProject::SUPPORTED_LANGUAGES.include?(language)
21
+ unless !form.name.empty? && form.extension_point && form.language
19
22
  return @ctx.puts(self.class.help)
20
23
  end
21
24
 
22
25
  project = Layers::Application::CreateScript.call(
23
26
  ctx: @ctx,
24
- language: language,
27
+ language: form.language,
25
28
  script_name: form.name,
26
- extension_point_type: form.extension_point
29
+ extension_point_type: form.extension_point,
30
+ description: form.description,
31
+ no_config_ui: options.flags.key?(:no_config_ui)
27
32
  )
28
- @ctx.puts(@ctx.message('script.create.change_directory_notice', project.script_name))
33
+ @ctx.puts(@ctx.message("script.create.change_directory_notice", project.script_name))
29
34
  rescue Script::Errors::ScriptProjectAlreadyExistsError => e
30
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.create.error.operation_failed'))
35
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message("script.create.error.operation_failed"))
31
36
  rescue StandardError => e
32
37
  ScriptProject.cleanup(ctx: @ctx, script_name: form.name, root_dir: cur_dir) if form
33
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.create.error.operation_failed'))
38
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message("script.create.error.operation_failed"))
34
39
  end
35
40
 
36
41
  def self.help
37
42
  allowed_values = Script::Layers::Application::ExtensionPoints.types.map { |type| "{{cyan:#{type}}}" }
38
- ShopifyCli::Context.message('script.create.help', ShopifyCli::TOOL_NAME, allowed_values.join(', '))
43
+ ShopifyCli::Context.message("script.create.help", ShopifyCli::TOOL_NAME, allowed_values.join(", "))
39
44
  end
40
45
  end
41
46
  end
@@ -12,13 +12,13 @@ module Script
12
12
  shop_domain: project.env[:shop],
13
13
  extension_point_type: project.extension_point_type
14
14
  )
15
- @ctx.puts(@ctx.message('script.disable.script_disabled'))
15
+ @ctx.puts(@ctx.message("script.disable.script_disabled"))
16
16
  rescue StandardError => e
17
- UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.disable.error.operation_failed'))
17
+ UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message("script.disable.error.operation_failed"))
18
18
  end
19
19
 
20
20
  def self.help
21
- ShopifyCli::Context.message('script.disable.help', ShopifyCli::TOOL_NAME)
21
+ ShopifyCli::Context.message("script.disable.help", ShopifyCli::TOOL_NAME)
22
22
  end
23
23
  end
24
24
  end