shopify-cli 1.12.0 → 2.0.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 (208) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -1
  3. data/.github/CONTRIBUTING.md +7 -7
  4. data/.github/DESIGN.md +3 -3
  5. data/.github/PULL_REQUEST_TEMPLATE.md +1 -1
  6. data/.github/workflows/build.yml +1 -1
  7. data/.gitignore +3 -0
  8. data/.rubocop.yml +3 -1
  9. data/.ruby-version +1 -1
  10. data/CHANGELOG.md +52 -21
  11. data/Gemfile +4 -0
  12. data/Gemfile.lock +32 -0
  13. data/LICENSE +4 -1
  14. data/README.md +92 -26
  15. data/RELEASING.md +31 -7
  16. data/Rakefile +2 -2
  17. data/SECURITY.md +1 -1
  18. data/bin/load_shopify.rb +1 -1
  19. data/bin/shopify +3 -3
  20. data/dev.yml +1 -1
  21. data/docs/app/node/index.md +1 -1
  22. data/docs/app/rails/index.md +1 -1
  23. data/docs/core/index.md +1 -1
  24. data/docs/getting-started/index.md +1 -1
  25. data/docs/getting-started/install/index.md +1 -1
  26. data/docs/getting-started/migrate/index.md +1 -1
  27. data/docs/getting-started/uninstall/index.md +1 -1
  28. data/docs/getting-started/upgrade/index.md +1 -1
  29. data/docs/help/start-app/index.md +1 -1
  30. data/docs/index.md +1 -1
  31. data/ext/shopify-cli/extconf.rb +17 -5
  32. data/install.sh +1 -1
  33. data/lib/docgen/index_template.md.erb +2 -2
  34. data/lib/graphql/all_orgs_with_extensions.graphql +37 -0
  35. data/lib/graphql/find_organization.graphql +2 -1
  36. data/lib/project_types/extension/cli.rb +18 -15
  37. data/lib/project_types/extension/commands/build.rb +4 -5
  38. data/lib/project_types/extension/commands/connect.rb +35 -0
  39. data/lib/project_types/extension/commands/create.rb +12 -16
  40. data/lib/project_types/extension/commands/extension_command.rb +2 -2
  41. data/lib/project_types/extension/commands/info.rb +86 -0
  42. data/lib/project_types/extension/commands/push.rb +8 -7
  43. data/lib/project_types/extension/commands/register.rb +4 -5
  44. data/lib/project_types/extension/commands/serve.rb +5 -8
  45. data/lib/project_types/extension/commands/tunnel.rb +3 -1
  46. data/lib/project_types/extension/errors.rb +9 -0
  47. data/lib/project_types/extension/extension_project.rb +5 -0
  48. data/lib/project_types/extension/features/argo.rb +6 -6
  49. data/lib/project_types/extension/features/argo_runtime.rb +22 -59
  50. data/lib/project_types/extension/features/argo_serve.rb +25 -21
  51. data/lib/project_types/extension/forms/connect.rb +42 -0
  52. data/lib/project_types/extension/forms/questions/ask_name.rb +14 -6
  53. data/lib/project_types/extension/forms/questions/ask_registration.rb +51 -0
  54. data/lib/project_types/extension/messages/messages.rb +75 -11
  55. data/lib/project_types/extension/models/specification.rb +1 -0
  56. data/lib/project_types/extension/models/specification_handlers/{checkout_argo_extension.rb → checkout_ui_extension.rb} +3 -1
  57. data/lib/project_types/extension/models/specification_handlers/default.rb +13 -13
  58. data/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +89 -0
  59. data/lib/project_types/extension/models/specifications.rb +1 -0
  60. data/lib/project_types/extension/tasks/configure_features.rb +6 -7
  61. data/lib/project_types/extension/tasks/configure_options.rb +20 -0
  62. data/lib/project_types/extension/tasks/get_extensions.rb +32 -0
  63. data/lib/project_types/node/cli.rb +9 -21
  64. data/lib/project_types/node/commands/connect.rb +8 -2
  65. data/lib/project_types/node/commands/create.rb +9 -5
  66. data/lib/project_types/node/commands/deploy.rb +15 -5
  67. data/lib/project_types/node/commands/deploy/heroku.rb +29 -29
  68. data/lib/project_types/node/commands/generate.rb +4 -2
  69. data/lib/project_types/node/commands/open.rb +4 -2
  70. data/lib/project_types/node/commands/serve.rb +3 -2
  71. data/lib/project_types/node/commands/tunnel.rb +4 -2
  72. data/lib/project_types/node/messages/messages.rb +46 -89
  73. data/lib/project_types/rails/cli.rb +9 -21
  74. data/lib/project_types/rails/commands/connect.rb +8 -2
  75. data/lib/project_types/rails/commands/create.rb +10 -6
  76. data/lib/project_types/rails/commands/deploy.rb +15 -5
  77. data/lib/project_types/rails/commands/deploy/heroku.rb +84 -82
  78. data/lib/project_types/rails/commands/generate.rb +15 -5
  79. data/lib/project_types/rails/commands/generate/webhook.rb +28 -26
  80. data/lib/project_types/rails/commands/open.rb +4 -2
  81. data/lib/project_types/rails/commands/serve.rb +3 -2
  82. data/lib/project_types/rails/commands/tunnel.rb +4 -2
  83. data/lib/project_types/rails/messages/messages.rb +54 -101
  84. data/lib/project_types/script/cli.rb +18 -20
  85. data/lib/project_types/script/commands/create.rb +3 -1
  86. data/lib/project_types/script/commands/push.rb +12 -5
  87. data/lib/project_types/script/config/extension_points.yml +0 -3
  88. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +9 -3
  89. data/lib/project_types/script/layers/application/create_script.rb +6 -5
  90. data/lib/project_types/script/layers/application/push_script.rb +2 -1
  91. data/lib/project_types/script/layers/domain/errors.rb +6 -11
  92. data/lib/project_types/script/layers/domain/push_package.rb +4 -8
  93. data/lib/project_types/script/layers/domain/script_json.rb +32 -0
  94. data/lib/project_types/script/layers/domain/script_project.rb +1 -1
  95. data/lib/project_types/script/layers/infrastructure/errors.rb +14 -18
  96. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +105 -0
  97. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_task_runner.rb +103 -0
  98. data/lib/project_types/script/layers/infrastructure/languages/project_creator.rb +26 -0
  99. data/lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb +73 -0
  100. data/lib/project_types/script/layers/infrastructure/languages/rust_task_runner.rb +60 -0
  101. data/lib/project_types/script/layers/infrastructure/languages/task_runner.rb +21 -0
  102. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +2 -4
  103. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +45 -34
  104. data/lib/project_types/script/layers/infrastructure/script_service.rb +37 -16
  105. data/lib/project_types/script/messages/messages.rb +66 -55
  106. data/lib/project_types/script/tasks/ensure_env.rb +22 -1
  107. data/lib/project_types/script/ui/error_handler.rb +32 -32
  108. data/lib/project_types/theme/cli.rb +16 -27
  109. data/lib/project_types/theme/commands/check.rb +33 -0
  110. data/lib/project_types/theme/commands/delete.rb +64 -0
  111. data/lib/project_types/theme/commands/init.rb +42 -0
  112. data/lib/project_types/theme/commands/language_server.rb +16 -0
  113. data/lib/project_types/theme/commands/package.rb +55 -0
  114. data/lib/project_types/theme/commands/publish.rb +43 -0
  115. data/lib/project_types/theme/commands/pull.rb +51 -0
  116. data/lib/project_types/theme/commands/push.rb +58 -32
  117. data/lib/project_types/theme/commands/serve.rb +8 -16
  118. data/lib/project_types/theme/forms/confirm_store.rb +15 -0
  119. data/lib/project_types/theme/forms/select.rb +59 -0
  120. data/lib/project_types/theme/messages/messages.rb +117 -102
  121. data/lib/project_types/theme/ui/sync_progress_bar.rb +20 -0
  122. data/lib/shopify-cli/admin_api.rb +53 -35
  123. data/lib/shopify-cli/admin_api/populate_resource_command.rb +6 -14
  124. data/lib/shopify-cli/admin_api/schema.rb +1 -10
  125. data/lib/shopify-cli/api.rb +29 -14
  126. data/lib/shopify-cli/command.rb +15 -3
  127. data/lib/shopify-cli/commands.rb +7 -2
  128. data/lib/shopify-cli/commands/help.rb +2 -29
  129. data/lib/shopify-cli/commands/login.rb +95 -0
  130. data/lib/shopify-cli/commands/logout.rb +24 -8
  131. data/lib/shopify-cli/commands/populate.rb +23 -0
  132. data/lib/{project_types/node → shopify-cli}/commands/populate/customer.rb +2 -8
  133. data/lib/{project_types/node → shopify-cli}/commands/populate/draft_order.rb +2 -2
  134. data/lib/{project_types/node → shopify-cli}/commands/populate/product.rb +2 -8
  135. data/lib/shopify-cli/commands/store.rb +15 -0
  136. data/lib/shopify-cli/commands/switch.rb +39 -0
  137. data/lib/shopify-cli/commands/system.rb +12 -0
  138. data/lib/shopify-cli/commands/whoami.rb +28 -0
  139. data/lib/shopify-cli/connect.rb +32 -0
  140. data/lib/shopify-cli/context.rb +65 -4
  141. data/lib/shopify-cli/core/entry_point.rb +3 -22
  142. data/lib/shopify-cli/db.rb +4 -4
  143. data/lib/shopify-cli/http_request.rb +16 -0
  144. data/lib/shopify-cli/identity_auth.rb +282 -0
  145. data/lib/shopify-cli/{oauth → identity_auth}/servlet.rb +11 -12
  146. data/lib/shopify-cli/messages/messages.rb +133 -39
  147. data/lib/shopify-cli/partners_api.rb +21 -41
  148. data/lib/shopify-cli/partners_api/organizations.rb +8 -0
  149. data/lib/shopify-cli/project_commands.rb +16 -0
  150. data/lib/shopify-cli/project_type.rb +0 -31
  151. data/lib/shopify-cli/resources/env_file.rb +1 -1
  152. data/lib/shopify-cli/shopifolk.rb +8 -11
  153. data/lib/shopify-cli/sub_command.rb +1 -0
  154. data/lib/shopify-cli/tasks.rb +3 -0
  155. data/lib/shopify-cli/tasks/confirm_store.rb +18 -0
  156. data/lib/shopify-cli/tasks/create_api_client.rb +2 -2
  157. data/lib/shopify-cli/tasks/ensure_authenticated.rb +13 -0
  158. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +1 -1
  159. data/lib/shopify-cli/tasks/ensure_project_type.rb +12 -0
  160. data/lib/shopify-cli/tasks/select_org_and_shop.rb +0 -3
  161. data/lib/shopify-cli/theme/dev_server.rb +98 -0
  162. data/lib/shopify-cli/theme/dev_server/certificate_manager.rb +79 -0
  163. data/lib/shopify-cli/theme/dev_server/header_hash.rb +94 -0
  164. data/lib/shopify-cli/theme/dev_server/hot-reload.js +93 -0
  165. data/lib/shopify-cli/theme/dev_server/hot_reload.rb +76 -0
  166. data/lib/shopify-cli/theme/dev_server/local_assets.rb +87 -0
  167. data/lib/shopify-cli/theme/dev_server/proxy.rb +205 -0
  168. data/lib/shopify-cli/theme/dev_server/sse.rb +75 -0
  169. data/lib/shopify-cli/theme/dev_server/watcher.rb +59 -0
  170. data/lib/shopify-cli/theme/dev_server/web_server.rb +140 -0
  171. data/lib/shopify-cli/theme/development_theme.rb +69 -0
  172. data/lib/shopify-cli/theme/file.rb +112 -0
  173. data/lib/shopify-cli/theme/ignore_filter.rb +109 -0
  174. data/lib/shopify-cli/theme/mime_type.rb +34 -0
  175. data/lib/shopify-cli/theme/syncer.rb +328 -0
  176. data/lib/shopify-cli/theme/theme.rb +204 -0
  177. data/lib/shopify-cli/version.rb +1 -1
  178. data/lib/shopify_cli.rb +18 -11
  179. data/shopify-cli.gemspec +12 -5
  180. data/shopify.fish +1 -1
  181. data/shopify.sh +1 -1
  182. metadata +96 -41
  183. data/.github/workflows/release.yml +0 -61
  184. data/lib/project_types/extension/features/argo_serve_options.rb +0 -41
  185. data/lib/project_types/node/commands/populate.rb +0 -23
  186. data/lib/project_types/rails/commands/populate.rb +0 -23
  187. data/lib/project_types/rails/commands/populate/customer.rb +0 -31
  188. data/lib/project_types/rails/commands/populate/draft_order.rb +0 -28
  189. data/lib/project_types/rails/commands/populate/product.rb +0 -30
  190. data/lib/project_types/script/layers/domain/config_ui.rb +0 -16
  191. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +0 -95
  192. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +0 -101
  193. data/lib/project_types/script/layers/infrastructure/project_creator.rb +0 -24
  194. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +0 -71
  195. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +0 -58
  196. data/lib/project_types/script/layers/infrastructure/task_runner.rb +0 -19
  197. data/lib/project_types/theme/commands/connect.rb +0 -54
  198. data/lib/project_types/theme/commands/create.rb +0 -48
  199. data/lib/project_types/theme/commands/deploy.rb +0 -38
  200. data/lib/project_types/theme/commands/generate.rb +0 -20
  201. data/lib/project_types/theme/commands/generate/env.rb +0 -79
  202. data/lib/project_types/theme/forms/connect.rb +0 -34
  203. data/lib/project_types/theme/forms/create.rb +0 -22
  204. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +0 -78
  205. data/lib/project_types/theme/themekit.rb +0 -113
  206. data/lib/shopify-cli/commands/connect.rb +0 -64
  207. data/lib/shopify-cli/commands/create.rb +0 -50
  208. data/lib/shopify-cli/oauth.rb +0 -198
@@ -1,33 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
  module Rails
3
3
  class Project < ShopifyCli::ProjectType
4
- title("Ruby on Rails App")
5
- creator("Rails::Commands::Create")
6
- connector("Rails::Commands::Connect")
7
-
8
- register_command("Rails::Commands::Deploy", "deploy")
9
- register_command("Rails::Commands::Generate", "generate")
10
- register_command("Rails::Commands::Open", "open")
11
- register_command("Rails::Commands::Populate", "populate")
12
- register_command("Rails::Commands::Serve", "serve")
13
- register_command("Rails::Commands::Tunnel", "tunnel")
14
- # register_task('Rails::Tasks::RailsTask', 'rails_task')
15
-
16
4
  require Project.project_filepath("messages/messages")
17
5
  register_messages(Rails::Messages::MESSAGES)
18
6
  end
19
7
 
20
8
  # define/autoload project specific Commands
21
- module Commands
22
- autoload :Connect, Project.project_filepath("commands/connect")
23
- autoload :Create, Project.project_filepath("commands/create")
24
- autoload :Deploy, Project.project_filepath("commands/deploy")
25
- autoload :Generate, Project.project_filepath("commands/generate")
26
- autoload :Open, Project.project_filepath("commands/open")
27
- autoload :Populate, Project.project_filepath("commands/populate")
28
- autoload :Serve, Project.project_filepath("commands/serve")
29
- autoload :Tunnel, Project.project_filepath("commands/tunnel")
9
+ class Command < ShopifyCli::ProjectCommands
10
+ subcommand :Connect, "connect", Project.project_filepath("commands/connect")
11
+ subcommand :Create, "create", Project.project_filepath("commands/create")
12
+ subcommand :Deploy, "deploy", Project.project_filepath("commands/deploy")
13
+ subcommand :Generate, "generate", Project.project_filepath("commands/generate")
14
+ subcommand :Open, "open", Project.project_filepath("commands/open")
15
+ subcommand :Serve, "serve", Project.project_filepath("commands/serve")
16
+ subcommand :Tunnel, "tunnel", Project.project_filepath("commands/tunnel")
30
17
  end
18
+ ShopifyCli::Commands.register("Rails::Command", "rails")
31
19
 
32
20
  # define/autoload project specific Tasks
33
21
  module Tasks
@@ -1,15 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
  module Rails
3
- module Commands
3
+ class Command
4
4
  class Connect < ShopifyCli::SubCommand
5
+ prerequisite_task ensure_project_type: :rails
6
+
5
7
  def call(*)
6
8
  if ShopifyCli::Project.has_current? && ShopifyCli::Project.current.env
7
9
  @ctx.puts(@ctx.message("rails.connect.production_warning"))
8
10
  end
9
11
 
10
- app = ShopifyCli::Commands::Connect.new.default_connect("rails")
12
+ app = ShopifyCli::Connect.new(@ctx).default_connect("rails")
11
13
  @ctx.done(@ctx.message("rails.connect.connected", app))
12
14
  end
15
+
16
+ def self.help
17
+ ShopifyCli::Context.message("rails.connect.help", ShopifyCli::TOOL_NAME, ShopifyCli::TOOL_NAME)
18
+ end
13
19
  end
14
20
  end
15
21
  end
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
  module Rails
3
- module Commands
3
+ class Command
4
4
  class Create < ShopifyCli::SubCommand
5
+ prerequisite_task :ensure_authenticated
6
+
5
7
  USER_AGENT_CODE = <<~USERAGENT
6
8
  module ShopifyAPI
7
9
  class Base < ActiveResource::Base
8
- self.headers['User-Agent'] << " | ShopifyApp/\#{ShopifyApp::VERSION} | Shopify App CLI"
10
+ self.headers['User-Agent'] << " | ShopifyApp/\#{ShopifyApp::VERSION} | Shopify CLI"
9
11
  end
10
12
  end
11
13
  USERAGENT
@@ -16,11 +18,13 @@ module Rails
16
18
  # backwards compatibility allow 'title' for now
17
19
  parser.on("--title=TITLE") { |t| flags[:title] = t }
18
20
  parser.on("--name=NAME") { |t| flags[:title] = t }
19
- parser.on("--organization_id=ID") { |url| flags[:organization_id] = url }
20
- parser.on("--organization-id=ID") { |url| flags[:organization_id] = url }
21
+ parser.on("--organization_id=ID") { |id| flags[:organization_id] = id }
22
+ parser.on("--organization-id=ID") { |id| flags[:organization_id] = id }
23
+ parser.on("--store=MYSHOPIFYDOMAIN") { |url| flags[:shop_domain] = url }
24
+ # backwards compatibility allow 'shop domain' for now
21
25
  parser.on("--shop_domain=MYSHOPIFYDOMAIN") { |url| flags[:shop_domain] = url }
22
26
  parser.on("--shop-domain=MYSHOPIFYDOMAIN") { |url| flags[:shop_domain] = url }
23
- parser.on("--type=APPTYPE") { |url| flags[:type] = url }
27
+ parser.on("--type=APPTYPE") { |type| flags[:type] = type }
24
28
  parser.on("--db=DB") { |db| flags[:db] = db }
25
29
  parser.on("--rails_opts=RAILSOPTS") { |opts| flags[:rails_opts] = opts }
26
30
  parser.on("--rails-opts=RAILSOPTS") { |opts| flags[:rails_opts] = opts }
@@ -62,7 +66,7 @@ module Rails
62
66
  partners_url = ShopifyCli::PartnersAPI.partners_url_for(form.organization_id, api_client["id"], local_debug?)
63
67
 
64
68
  @ctx.puts(@ctx.message("apps.create.info.created", form.title, partners_url))
65
- @ctx.puts(@ctx.message("apps.create.info.serve", form.name, ShopifyCli::TOOL_NAME))
69
+ @ctx.puts(@ctx.message("apps.create.info.serve", form.name, ShopifyCli::TOOL_NAME, "rails"))
66
70
  unless ShopifyCli::Shopifolk.acting_as_shopify_organization?
67
71
  @ctx.puts(@ctx.message("apps.create.info.install", partners_url, form.title))
68
72
  end
@@ -2,12 +2,22 @@
2
2
  require "shopify_cli"
3
3
 
4
4
  module Rails
5
- module Commands
6
- class Deploy < ShopifyCli::Command
7
- subcommand :Heroku, "heroku", Project.project_filepath("commands/deploy/heroku")
5
+ class Command
6
+ class Deploy < ShopifyCli::SubCommand
7
+ prerequisite_task ensure_project_type: :rails
8
8
 
9
- def call(*)
10
- @ctx.puts(self.class.help)
9
+ autoload :Heroku, Project.project_filepath("commands/deploy/heroku")
10
+
11
+ HEROKU = "heroku"
12
+
13
+ def call(args, _name)
14
+ subcommand = args.shift
15
+ case subcommand
16
+ when HEROKU
17
+ Rails::Command::Deploy::Heroku.start(@ctx)
18
+ else
19
+ @ctx.puts(self.class.help)
20
+ end
11
21
  end
12
22
 
13
23
  def self.help
@@ -2,109 +2,111 @@
2
2
  require "shopify_cli"
3
3
 
4
4
  module Rails
5
- module Commands
5
+ class Command
6
6
  class Deploy
7
- class Heroku < ShopifyCli::SubCommand
8
- DB_CHECK_CMD = 'bundle exec rails runner "puts ActiveRecord::Base.connection.adapter_name.downcase"'
7
+ class Heroku
8
+ class << self
9
+ DB_CHECK_CMD = 'bundle exec rails runner "puts ActiveRecord::Base.connection.adapter_name.downcase"'
9
10
 
10
- def self.help
11
- ShopifyCli::Context.message("rails.deploy.heroku.help", ShopifyCli::TOOL_NAME)
12
- end
13
-
14
- def call(*)
15
- CLI::UI::Frame.open(@ctx.message("rails.deploy.heroku.db_check.validating")) do
16
- CLI::UI::Spinner.spin(@ctx.message("rails.deploy.heroku.db_check.checking")) do |spinner|
17
- db_type, err = check_db(@ctx)
18
- @ctx.abort(@ctx.message(err)) unless err.nil?
19
- spinner.update_title(@ctx.message("rails.deploy.heroku.db_check.validated", db_type))
20
- end
21
- true
11
+ def help
12
+ ShopifyCli::Context.message("rails.deploy.heroku.help", ShopifyCli::TOOL_NAME)
22
13
  end
23
14
 
24
- spin_group = CLI::UI::SpinGroup.new
25
- heroku_service = ShopifyCli::Heroku.new(@ctx)
15
+ def start(ctx)
16
+ CLI::UI::Frame.open(ctx.message("rails.deploy.heroku.db_check.validating")) do
17
+ CLI::UI::Spinner.spin(ctx.message("rails.deploy.heroku.db_check.checking")) do |spinner|
18
+ db_type, err = check_db(ctx)
19
+ ctx.abort(ctx.message(err)) unless err.nil?
20
+ spinner.update_title(ctx.message("rails.deploy.heroku.db_check.validated", db_type))
21
+ end
22
+ true
23
+ end
26
24
 
27
- spin_group.add(@ctx.message("rails.deploy.heroku.downloading")) do |spinner|
28
- heroku_service.download
29
- spinner.update_title(@ctx.message("rails.deploy.heroku.downloaded"))
30
- end
31
- spin_group.wait
25
+ spin_group = CLI::UI::SpinGroup.new
26
+ heroku_service = ShopifyCli::Heroku.new(ctx)
32
27
 
33
- spin_group.add(@ctx.message("rails.deploy.heroku.installing")) do |spinner|
34
- heroku_service.install
35
- spinner.update_title(@ctx.message("rails.deploy.heroku.installed"))
36
- end
37
- spin_group.add(@ctx.message("rails.deploy.heroku.git.checking")) do |spinner|
38
- ShopifyCli::Git.init(@ctx)
39
- spinner.update_title(@ctx.message("rails.deploy.heroku.git.initialized"))
40
- end
41
- spin_group.wait
42
-
43
- if (account = heroku_service.whoami)
44
- @ctx.puts(@ctx.message("rails.deploy.heroku.authenticated_with_account", account))
45
- else
46
- CLI::UI::Frame.open(
47
- @ctx.message("rails.deploy.heroku.authenticating"),
48
- success_text: @ctx.message("rails.deploy.heroku.authenticated")
49
- ) do
50
- heroku_service.authenticate
28
+ spin_group.add(ctx.message("rails.deploy.heroku.downloading")) do |spinner|
29
+ heroku_service.download
30
+ spinner.update_title(ctx.message("rails.deploy.heroku.downloaded"))
51
31
  end
52
- end
32
+ spin_group.wait
53
33
 
54
- if (app_name = heroku_service.app)
55
- @ctx.puts(@ctx.message("rails.deploy.heroku.app.selected", app_name))
56
- else
57
- app_type = CLI::UI::Prompt.ask(@ctx.message("rails.deploy.heroku.app.no_apps_found")) do |handler|
58
- handler.option(@ctx.message("rails.deploy.heroku.app.create")) { :new }
59
- handler.option(@ctx.message("rails.deploy.heroku.app.select")) { :existing }
34
+ spin_group.add(ctx.message("rails.deploy.heroku.installing")) do |spinner|
35
+ heroku_service.install
36
+ spinner.update_title(ctx.message("rails.deploy.heroku.installed"))
37
+ end
38
+ spin_group.add(ctx.message("rails.deploy.heroku.git.checking")) do |spinner|
39
+ ShopifyCli::Git.init(ctx)
40
+ spinner.update_title(ctx.message("rails.deploy.heroku.git.initialized"))
60
41
  end
42
+ spin_group.wait
61
43
 
62
- if app_type == :existing
63
- app_name = CLI::UI::Prompt.ask(@ctx.message("rails.deploy.heroku.app.name"))
44
+ if (account = heroku_service.whoami)
45
+ ctx.puts(ctx.message("rails.deploy.heroku.authenticated_with_account", account))
46
+ else
64
47
  CLI::UI::Frame.open(
65
- @ctx.message("rails.deploy.heroku.app.selecting", app_name),
66
- success_text: @ctx.message("rails.deploy.heroku.app.selected", app_name)
48
+ ctx.message("rails.deploy.heroku.authenticating"),
49
+ success_text: ctx.message("rails.deploy.heroku.authenticated")
67
50
  ) do
68
- heroku_service.select_existing_app(app_name)
51
+ heroku_service.authenticate
69
52
  end
70
- elsif app_type == :new
71
- CLI::UI::Frame.open(
72
- @ctx.message("rails.deploy.heroku.app.creating"),
73
- success_text: @ctx.message("rails.deploy.heroku.app.created")
74
- ) do
75
- heroku_service.create_new_app
53
+ end
54
+
55
+ if (app_name = heroku_service.app)
56
+ ctx.puts(ctx.message("rails.deploy.heroku.app.selected", app_name))
57
+ else
58
+ app_type = CLI::UI::Prompt.ask(ctx.message("rails.deploy.heroku.app.no_apps_found")) do |handler|
59
+ handler.option(ctx.message("rails.deploy.heroku.app.create")) { :new }
60
+ handler.option(ctx.message("rails.deploy.heroku.app.select")) { :existing }
61
+ end
62
+
63
+ if app_type == :existing
64
+ app_name = CLI::UI::Prompt.ask(ctx.message("rails.deploy.heroku.app.name"))
65
+ CLI::UI::Frame.open(
66
+ ctx.message("rails.deploy.heroku.app.selecting", app_name),
67
+ success_text: ctx.message("rails.deploy.heroku.app.selected", app_name)
68
+ ) do
69
+ heroku_service.select_existing_app(app_name)
70
+ end
71
+ elsif app_type == :new
72
+ CLI::UI::Frame.open(
73
+ ctx.message("rails.deploy.heroku.app.creating"),
74
+ success_text: ctx.message("rails.deploy.heroku.app.created")
75
+ ) do
76
+ heroku_service.create_new_app
77
+ end
76
78
  end
77
79
  end
78
- end
79
80
 
80
- branches = ShopifyCli::Git.branches(@ctx)
81
- if branches.length == 1
82
- branch_to_deploy = branches[0]
83
- @ctx.puts(@ctx.message("rails.deploy.heroku.git.branch_selected", branch_to_deploy))
84
- else
85
- branch_to_deploy = CLI::UI::Prompt.ask(@ctx.message("rails.deploy.heroku.git.what_branch")) do |handler|
86
- branches.each do |branch|
87
- handler.option(branch) { branch }
81
+ branches = ShopifyCli::Git.branches(ctx)
82
+ if branches.length == 1
83
+ branch_to_deploy = branches[0]
84
+ ctx.puts(ctx.message("rails.deploy.heroku.git.branch_selected", branch_to_deploy))
85
+ else
86
+ branch_to_deploy = CLI::UI::Prompt.ask(ctx.message("rails.deploy.heroku.git.what_branch")) do |handler|
87
+ branches.each do |branch|
88
+ handler.option(branch) { branch }
89
+ end
88
90
  end
89
91
  end
90
- end
91
92
 
92
- CLI::UI::Frame.open(
93
- @ctx.message("rails.deploy.heroku.deploying"),
94
- success_text: @ctx.message("rails.deploy.heroku.deployed")
95
- ) do
96
- heroku_service.deploy(branch_to_deploy)
93
+ CLI::UI::Frame.open(
94
+ ctx.message("rails.deploy.heroku.deploying"),
95
+ success_text: ctx.message("rails.deploy.heroku.deployed")
96
+ ) do
97
+ heroku_service.deploy(branch_to_deploy)
98
+ end
97
99
  end
98
- end
99
100
 
100
- def check_db(ctx)
101
- out, stat = ctx.capture2e(DB_CHECK_CMD)
102
- if stat.success? && out.strip == "sqlite"
103
- ["sqlite", "rails.deploy.heroku.db_check.sqlite"]
104
- elsif !stat.success?
105
- [nil, "rails.deploy.heroku.db_check.problem"]
106
- else
107
- [out.strip, nil]
101
+ def check_db(ctx)
102
+ out, stat = ctx.capture2e(DB_CHECK_CMD)
103
+ if stat.success? && out.strip == "sqlite"
104
+ ["sqlite", "rails.deploy.heroku.db_check.sqlite"]
105
+ elsif !stat.success?
106
+ [nil, "rails.deploy.heroku.db_check.problem"]
107
+ else
108
+ [out.strip, nil]
109
+ end
108
110
  end
109
111
  end
110
112
  end
@@ -2,12 +2,22 @@
2
2
  require "shopify_cli"
3
3
 
4
4
  module Rails
5
- module Commands
6
- class Generate < ShopifyCli::Command
7
- subcommand :Webhook, "webhook", Project.project_filepath("commands/generate/webhook")
5
+ class Command
6
+ class Generate < ShopifyCli::SubCommand
7
+ prerequisite_task ensure_project_type: :rails
8
8
 
9
- def call(*)
10
- @ctx.puts(self.class.help)
9
+ autoload :Webhook, Project.project_filepath("commands/generate/webhook")
10
+
11
+ WEBHOOK = "webhook"
12
+
13
+ def call(args, _name)
14
+ subcommand = args.shift
15
+ case subcommand
16
+ when WEBHOOK
17
+ Rails::Command::Generate::Webhook.start(@ctx, args)
18
+ else
19
+ @ctx.puts(self.class.help)
20
+ end
11
21
  end
12
22
 
13
23
  def self.help
@@ -1,38 +1,40 @@
1
1
  require "shopify_cli"
2
2
  require "json"
3
3
  module Rails
4
- module Commands
4
+ class Command
5
5
  class Generate
6
- class Webhook < ShopifyCli::SubCommand
7
- def call(args, _name)
8
- selected_type = args.first
9
- schema = ShopifyCli::AdminAPI::Schema.get(@ctx)
10
- webhooks = schema.get_names_from_type("WebhookSubscriptionTopic")
11
- unless selected_type && webhooks.include?(selected_type)
12
- selected_type = CLI::UI::Prompt.ask(@ctx.message("rails.generate.webhook.select")) do |handler|
13
- webhooks.each do |type|
14
- handler.option(type) { type }
6
+ class Webhook
7
+ class << self
8
+ def start(ctx, args)
9
+ selected_type = args.first
10
+ schema = ShopifyCli::AdminAPI::Schema.get(ctx)
11
+ webhooks = schema.get_names_from_type("WebhookSubscriptionTopic")
12
+ unless selected_type && webhooks.include?(selected_type)
13
+ selected_type = CLI::UI::Prompt.ask(ctx.message("rails.generate.webhook.select")) do |handler|
14
+ webhooks.each do |type|
15
+ handler.option(type) { type }
16
+ end
15
17
  end
16
18
  end
19
+ spin_group = CLI::UI::SpinGroup.new
20
+ spin_group.add(ctx.message("rails.generate.webhook.selected", selected_type)) do |spinner|
21
+ Rails::Command::Generate.run_generate(generate_command(selected_type, ctx), selected_type, ctx)
22
+ spinner.update_title("{{green:#{selected_type}}} config/initializers/shopify_app.rb")
23
+ end
24
+ spin_group.wait
17
25
  end
18
- spin_group = CLI::UI::SpinGroup.new
19
- spin_group.add(@ctx.message("rails.generate.webhook.selected", selected_type)) do |spinner|
20
- Rails::Commands::Generate.run_generate(generate_command(selected_type), selected_type, @ctx)
21
- spinner.update_title("{{green:#{selected_type}}} config/initializers/shopify_app.rb")
22
- end
23
- spin_group.wait
24
- end
25
26
 
26
- def self.help
27
- ShopifyCli::Context.message("rails.generate.webhook.help", ShopifyCli::TOOL_NAME)
28
- end
27
+ def help
28
+ ShopifyCli::Context.message("rails.generate.webhook.help", ShopifyCli::TOOL_NAME)
29
+ end
29
30
 
30
- def generate_command(selected_type)
31
- parts = selected_type.downcase.split("_")
32
- host = ShopifyCli::Project.current.env.host
33
- selected_type = parts[0..-2].join("_") + "/" + parts[-1]
34
- command = @ctx.windows? ? "ruby bin\\rails" : "bin/rails"
35
- "#{command} g shopify_app:add_webhook -t #{selected_type} -a #{host}/webhooks/#{selected_type.downcase}"
31
+ def generate_command(selected_type, ctx)
32
+ parts = selected_type.downcase.split("_")
33
+ host = ShopifyCli::Project.current.env.host
34
+ selected_type = parts[0..-2].join("_") + "/" + parts[-1]
35
+ command = ctx.windows? ? "ruby bin\\rails" : "bin/rails"
36
+ "#{command} g shopify_app:add_webhook -t #{selected_type} -a #{host}/webhooks/#{selected_type.downcase}"
37
+ end
36
38
  end
37
39
  end
38
40
  end
@@ -1,8 +1,10 @@
1
1
  require "shopify_cli"
2
2
 
3
3
  module Rails
4
- module Commands
5
- class Open < ShopifyCli::Command
4
+ class Command
5
+ class Open < ShopifyCli::SubCommand
6
+ prerequisite_task ensure_project_type: :rails
7
+
6
8
  def call(*)
7
9
  project = ShopifyCli::Project.current
8
10
  @ctx.open_url!("#{project.env.host}/login?shop=#{project.env.shop}")
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  module Rails
3
- module Commands
4
- class Serve < ShopifyCli::Command
3
+ class Command
4
+ class Serve < ShopifyCli::SubCommand
5
+ prerequisite_task ensure_project_type: :rails
5
6
  prerequisite_task :ensure_env, :ensure_dev_store
6
7
 
7
8
  options do |parser, flags|