shopify-cli 1.4.1 → 1.8.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 (303) 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 +3 -2
  5. data/.github/workflows/release.yml +0 -1
  6. data/.github/workflows/triage.yml +22 -0
  7. data/.rubocop.yml +21 -7
  8. data/.rubocop_todo.yml +2 -15
  9. data/.travis.yml +1 -1
  10. data/CHANGELOG.md +28 -0
  11. data/Gemfile +12 -11
  12. data/Gemfile.lock +17 -14
  13. data/README.md +39 -7
  14. data/RELEASING.md +5 -13
  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 +12 -12
  35. data/lib/graphql/fetch_specifications.graphql +14 -0
  36. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  37. data/lib/project_types/extension/cli.rb +54 -47
  38. data/lib/project_types/extension/commands/build.rb +3 -3
  39. data/lib/project_types/extension/commands/create.rb +17 -10
  40. data/lib/project_types/extension/commands/extension_command.rb +12 -5
  41. data/lib/project_types/extension/commands/push.rb +8 -8
  42. data/lib/project_types/extension/commands/register.rb +19 -30
  43. data/lib/project_types/extension/commands/serve.rb +31 -3
  44. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  45. data/lib/project_types/extension/extension_project.rb +8 -4
  46. data/lib/project_types/extension/extension_project_keys.rb +4 -4
  47. data/lib/project_types/extension/features/argo.rb +117 -0
  48. data/lib/project_types/extension/features/argo_config.rb +5 -5
  49. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  50. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  51. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  52. data/lib/project_types/extension/forms/create.rb +28 -34
  53. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  54. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  55. data/lib/project_types/extension/forms/questions/ask_type.rb +47 -0
  56. data/lib/project_types/extension/messages/messages.rb +55 -52
  57. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  58. data/lib/project_types/extension/models/specification.rb +37 -0
  59. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
  60. data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
  61. data/lib/project_types/extension/models/specifications.rb +88 -0
  62. data/lib/project_types/extension/tasks/configure_features.rb +52 -0
  63. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  64. data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
  65. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  66. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  67. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  68. data/lib/project_types/extension/tasks/fetch_specifications.rb +18 -0
  69. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  70. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  71. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  72. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  73. data/lib/project_types/node/cli.rb +19 -16
  74. data/lib/project_types/node/commands/connect.rb +15 -0
  75. data/lib/project_types/node/commands/create.rb +44 -41
  76. data/lib/project_types/node/commands/deploy.rb +4 -4
  77. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  78. data/lib/project_types/node/commands/generate.rb +9 -18
  79. data/lib/project_types/node/commands/open.rb +2 -2
  80. data/lib/project_types/node/commands/populate.rb +6 -6
  81. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  82. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  83. data/lib/project_types/node/commands/populate/product.rb +5 -5
  84. data/lib/project_types/node/commands/serve.rb +9 -9
  85. data/lib/project_types/node/commands/tunnel.rb +7 -7
  86. data/lib/project_types/node/forms/create.rb +17 -8
  87. data/lib/project_types/node/messages/messages.rb +20 -53
  88. data/lib/project_types/rails/cli.rb +21 -18
  89. data/lib/project_types/rails/commands/connect.rb +15 -0
  90. data/lib/project_types/rails/commands/create.rb +58 -57
  91. data/lib/project_types/rails/commands/deploy.rb +4 -4
  92. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  93. data/lib/project_types/rails/commands/generate.rb +7 -7
  94. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  95. data/lib/project_types/rails/commands/open.rb +2 -2
  96. data/lib/project_types/rails/commands/populate.rb +6 -6
  97. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  98. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  99. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  100. data/lib/project_types/rails/commands/serve.rb +11 -11
  101. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  102. data/lib/project_types/rails/forms/create.rb +35 -25
  103. data/lib/project_types/rails/gem.rb +24 -24
  104. data/lib/project_types/rails/messages/messages.rb +13 -9
  105. data/lib/project_types/rails/ruby.rb +2 -2
  106. data/lib/project_types/script/cli.rb +44 -38
  107. data/lib/project_types/script/commands/create.rb +15 -10
  108. data/lib/project_types/script/commands/disable.rb +3 -3
  109. data/lib/project_types/script/commands/enable.rb +19 -9
  110. data/lib/project_types/script/commands/push.rb +10 -17
  111. data/lib/project_types/script/config/extension_points.yml +30 -12
  112. data/lib/project_types/script/errors.rb +22 -0
  113. data/lib/project_types/script/forms/create.rb +29 -5
  114. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
  115. data/lib/project_types/script/layers/application/build_script.rb +19 -19
  116. data/lib/project_types/script/layers/application/create_script.rb +45 -12
  117. data/lib/project_types/script/layers/application/disable_script.rb +2 -2
  118. data/lib/project_types/script/layers/application/enable_script.rb +2 -2
  119. data/lib/project_types/script/layers/application/extension_points.rb +24 -0
  120. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  121. data/lib/project_types/script/layers/application/push_script.rb +15 -18
  122. data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
  123. data/lib/project_types/script/layers/domain/errors.rb +23 -0
  124. data/lib/project_types/script/layers/domain/extension_point.rb +67 -7
  125. data/lib/project_types/script/layers/domain/metadata.rb +55 -0
  126. data/lib/project_types/script/layers/domain/push_package.rb +29 -6
  127. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +45 -55
  128. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +41 -45
  129. data/lib/project_types/script/layers/infrastructure/config_ui_repository.rb +46 -0
  130. data/lib/project_types/script/layers/infrastructure/errors.rb +32 -5
  131. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  132. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  133. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
  134. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  135. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  136. data/lib/project_types/script/layers/infrastructure/script_service.rb +39 -17
  137. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  138. data/lib/project_types/script/messages/messages.rb +76 -10
  139. data/lib/project_types/script/script_project.rb +26 -16
  140. data/lib/project_types/script/ui/error_handler.rb +135 -50
  141. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  142. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  143. data/lib/project_types/theme/cli.rb +40 -0
  144. data/lib/project_types/theme/commands/connect.rb +54 -0
  145. data/lib/project_types/theme/commands/create.rb +48 -0
  146. data/lib/project_types/theme/commands/deploy.rb +38 -0
  147. data/lib/project_types/theme/commands/generate.rb +20 -0
  148. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  149. data/lib/project_types/theme/commands/push.rb +55 -0
  150. data/lib/project_types/theme/commands/serve.rb +31 -0
  151. data/lib/project_types/theme/forms/connect.rb +34 -0
  152. data/lib/project_types/theme/forms/create.rb +22 -0
  153. data/lib/project_types/theme/messages/messages.rb +147 -0
  154. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  155. data/lib/project_types/theme/themekit.rb +113 -0
  156. data/lib/rubygems_plugin.rb +3 -3
  157. data/lib/shopify-cli/admin_api.rb +52 -12
  158. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  159. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  160. data/lib/shopify-cli/api.rb +36 -31
  161. data/lib/shopify-cli/command.rb +1 -1
  162. data/lib/shopify-cli/commands.rb +9 -9
  163. data/lib/shopify-cli/commands/config.rb +28 -28
  164. data/lib/shopify-cli/commands/connect.rb +35 -18
  165. data/lib/shopify-cli/commands/create.rb +5 -5
  166. data/lib/shopify-cli/commands/help.rb +6 -6
  167. data/lib/shopify-cli/commands/logout.rb +3 -3
  168. data/lib/shopify-cli/commands/system.rb +33 -33
  169. data/lib/shopify-cli/commands/version.rb +2 -2
  170. data/lib/shopify-cli/context.rb +43 -22
  171. data/lib/shopify-cli/core.rb +4 -4
  172. data/lib/shopify-cli/core/entry_point.rb +5 -5
  173. data/lib/shopify-cli/core/executor.rb +1 -1
  174. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  175. data/lib/shopify-cli/core/monorail.rb +17 -16
  176. data/lib/shopify-cli/db.rb +2 -2
  177. data/lib/shopify-cli/feature.rb +1 -3
  178. data/lib/shopify-cli/form.rb +1 -1
  179. data/lib/shopify-cli/git.rb +17 -17
  180. data/lib/shopify-cli/helpers.rb +1 -1
  181. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  182. data/lib/shopify-cli/heroku.rb +28 -28
  183. data/lib/shopify-cli/http_request.rb +21 -9
  184. data/lib/shopify-cli/js_deps.rb +13 -13
  185. data/lib/shopify-cli/js_system.rb +5 -5
  186. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  187. data/lib/shopify-cli/messages/messages.rb +21 -10
  188. data/lib/shopify-cli/method_object.rb +104 -0
  189. data/lib/shopify-cli/oauth.rb +25 -25
  190. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  191. data/lib/shopify-cli/options.rb +3 -3
  192. data/lib/shopify-cli/packager.rb +24 -24
  193. data/lib/shopify-cli/partners_api.rb +38 -16
  194. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  195. data/lib/shopify-cli/process_supervision.rb +8 -8
  196. data/lib/shopify-cli/project.rb +27 -23
  197. data/lib/shopify-cli/project_type.rb +21 -5
  198. data/lib/shopify-cli/resolve_constant.rb +25 -0
  199. data/lib/shopify-cli/resources.rb +1 -1
  200. data/lib/shopify-cli/resources/env_file.rb +9 -9
  201. data/lib/shopify-cli/result.rb +432 -0
  202. data/lib/shopify-cli/shopifolk.rb +35 -18
  203. data/lib/shopify-cli/sub_command.rb +1 -1
  204. data/lib/shopify-cli/task.rb +9 -1
  205. data/lib/shopify-cli/tasks.rb +7 -7
  206. data/lib/shopify-cli/tasks/create_api_client.rb +13 -4
  207. data/lib/shopify-cli/tasks/ensure_dev_store.rb +12 -12
  208. data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
  209. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  210. data/lib/shopify-cli/tasks/select_org_and_shop.rb +28 -24
  211. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  212. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  213. data/lib/shopify-cli/tunnel.rb +36 -30
  214. data/lib/shopify-cli/version.rb +1 -1
  215. data/lib/shopify_cli.rb +57 -52
  216. data/shopify-cli.gemspec +6 -6
  217. data/shopify.fish +1 -1
  218. data/shopify.sh +1 -1
  219. data/vendor/deps/cli-kit/REVISION +1 -1
  220. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  221. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  222. data/vendor/deps/cli-ui/REVISION +1 -1
  223. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  224. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  225. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  226. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  227. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  228. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  229. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  230. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  231. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  232. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  233. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  234. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  235. data/vendor/deps/webrick/.gitignore +9 -0
  236. data/vendor/deps/webrick/Gemfile +3 -0
  237. data/vendor/deps/webrick/LICENSE.txt +22 -0
  238. data/vendor/deps/webrick/README.md +61 -0
  239. data/vendor/deps/webrick/Rakefile +10 -0
  240. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  241. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  242. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  243. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  244. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  245. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  246. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  251. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  252. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  253. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  254. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  255. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  256. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  257. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  258. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  259. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  263. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  264. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  265. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  266. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  267. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  268. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  269. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  270. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  271. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  272. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  273. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  274. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  275. data/vendor/deps/webrick/webrick.gemspec +74 -0
  276. data/vendor/gen/template/bin/update-deps +9 -9
  277. metadata +83 -29
  278. data/docs/Gemfile +0 -5
  279. data/docs/Gemfile.lock +0 -258
  280. data/docs/_data/nav.yml +0 -35
  281. data/docs/_includes/footer.html +0 -15
  282. data/docs/_includes/head.html +0 -19
  283. data/docs/_includes/sidebar_nav.html +0 -22
  284. data/docs/_includes/toc.html +0 -112
  285. data/docs/_layouts/default.html +0 -79
  286. data/docs/css/docs.css +0 -157
  287. data/docs/images/header.png +0 -0
  288. data/docs/installing-ruby.md +0 -28
  289. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  290. data/lib/project_types/extension/features/argo/base.rb +0 -129
  291. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  292. data/lib/project_types/extension/forms/register.rb +0 -47
  293. data/lib/project_types/extension/models/type.rb +0 -81
  294. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  295. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  296. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  297. data/lib/project_types/node/commands/generate/page.rb +0 -59
  298. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  299. data/lib/project_types/script/layers/domain/script.rb +0 -18
  300. data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
  301. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
  302. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  303. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -1,27 +1,27 @@
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
+ self.name = format_name
23
24
  self.type = ask_type
24
- self.name = self.title.downcase.split(" ").join("_")
25
25
  res = ShopifyCli::Tasks::SelectOrgAndShop.call(ctx, organization_id: organization_id, shop_domain: shop_domain)
26
26
  self.organization_id = res[:organization_id]
27
27
  self.shop_domain = res[:shop_domain]
@@ -30,26 +30,36 @@ module Rails
30
30
 
31
31
  private
32
32
 
33
+ def format_name
34
+ name = title.downcase.split(" ").join("_")
35
+
36
+ if name.include?("shopify")
37
+ ctx.abort(ctx.message("rails.forms.create.error.invalid_app_name"))
38
+ end
39
+
40
+ name
41
+ end
42
+
33
43
  def ask_type
34
44
  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' }
45
+ return CLI::UI::Prompt.ask(ctx.message("rails.forms.create.app_type.select")) do |handler|
46
+ handler.option(ctx.message("rails.forms.create.app_type.select_public")) { "public" }
47
+ handler.option(ctx.message("rails.forms.create.app_type.select_custom")) { "custom" }
38
48
  end
39
49
  end
40
50
 
41
51
  unless ShopifyCli::Tasks::CreateApiClient::VALID_APP_TYPES.include?(type)
42
- ctx.abort(ctx.message('rails.forms.create.error.invalid_app_type', type))
52
+ ctx.abort(ctx.message("rails.forms.create.error.invalid_app_type", type))
43
53
  end
44
- ctx.puts(ctx.message('rails.forms.create.app_type.selected', type))
54
+ ctx.puts(ctx.message("rails.forms.create.app_type.selected", type))
45
55
  type
46
56
  end
47
57
 
48
58
  def ask_db
49
59
  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|
60
+ return "sqlite3" unless CLI::UI::Prompt.confirm(ctx.message("rails.forms.create.db.want_select"),
61
+ default: false)
62
+ @db = CLI::UI::Prompt.ask(ctx.message("rails.forms.create.db.select")) do |handler|
53
63
  VALID_DB_TYPES.each do |db_type|
54
64
  handler.option(ctx.message("rails.forms.create.db.select_#{db_type}")) { db_type }
55
65
  end
@@ -57,9 +67,9 @@ module Rails
57
67
  end
58
68
 
59
69
  unless VALID_DB_TYPES.include?(db)
60
- ctx.abort(ctx.message('rails.forms.create.error.invalid_db_type', db))
70
+ ctx.abort(ctx.message("rails.forms.create.error.invalid_db_type", db))
61
71
  end
62
- ctx.puts(ctx.message('rails.forms.create.db.selected', db))
72
+ ctx.puts(ctx.message("rails.forms.create.db.selected", db))
63
73
  db
64
74
  end
65
75
  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
  },
@@ -254,6 +257,7 @@ module Rails
254
257
  forms: {
255
258
  create: {
256
259
  error: {
260
+ invalid_app_name: "App name cannot contain 'Shopify'",
257
261
  invalid_app_type: "Invalid app type %s",
258
262
  invalid_db_type: "Invalid database type %s",
259
263
  },
@@ -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