shopify-cli 2.3.0 → 2.6.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 (266) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +1 -0
  3. data/.github/workflows/shopify.yml +104 -0
  4. data/.gitignore +3 -0
  5. data/.rubocop.yml +14 -14
  6. data/.rubocop_todo.yml +3 -3
  7. data/CHANGELOG.md +26 -0
  8. data/CONTRIBUTING.md +23 -0
  9. data/Dockerfile +17 -0
  10. data/Gemfile +1 -0
  11. data/Gemfile.lock +67 -24
  12. data/README.md +1 -1
  13. data/RELEASING.md +1 -1
  14. data/Rakefile +75 -18
  15. data/bin/console +11 -0
  16. data/bin/shopify +17 -4
  17. data/dev.yml +14 -1
  18. data/ext/shopify-cli/extconf.rb +2 -0
  19. data/ext/shopify-extensions/extconf.rb +21 -0
  20. data/ext/shopify-extensions/shopify_extensions.rb +152 -0
  21. data/ext/shopify-extensions/version +1 -0
  22. data/lib/project_types/extension/cli.rb +19 -3
  23. data/lib/project_types/extension/commands/build.rb +32 -3
  24. data/lib/project_types/extension/commands/check.rb +2 -2
  25. data/lib/project_types/extension/commands/connect.rb +1 -1
  26. data/lib/project_types/extension/commands/create.rb +59 -16
  27. data/lib/project_types/extension/commands/extension_command.rb +1 -1
  28. data/lib/project_types/extension/commands/info.rb +1 -1
  29. data/lib/project_types/extension/commands/push.rb +1 -1
  30. data/lib/project_types/extension/commands/register.rb +2 -2
  31. data/lib/project_types/extension/commands/serve.rb +5 -5
  32. data/lib/project_types/extension/commands/tunnel.rb +6 -6
  33. data/lib/project_types/extension/extension_project.rb +4 -4
  34. data/lib/project_types/extension/features/argo.rb +3 -3
  35. data/lib/project_types/extension/features/argo_config.rb +5 -5
  36. data/lib/project_types/extension/features/argo_serve.rb +21 -6
  37. data/lib/project_types/extension/features/argo_setup.rb +1 -1
  38. data/lib/project_types/extension/features/argo_setup_step.rb +1 -1
  39. data/lib/project_types/extension/features/argo_setup_steps.rb +2 -2
  40. data/lib/project_types/extension/forms/connect.rb +2 -2
  41. data/lib/project_types/extension/forms/create.rb +6 -3
  42. data/lib/project_types/extension/forms/questions/ask_app.rb +2 -2
  43. data/lib/project_types/extension/forms/questions/ask_name.rb +1 -1
  44. data/lib/project_types/extension/forms/questions/ask_registration.rb +2 -2
  45. data/lib/project_types/extension/forms/questions/ask_template.rb +44 -0
  46. data/lib/project_types/extension/forms/questions/ask_type.rb +2 -2
  47. data/lib/project_types/extension/messages/message_loading.rb +2 -2
  48. data/lib/project_types/extension/messages/messages.rb +3 -0
  49. data/lib/project_types/extension/models/development_server.rb +78 -0
  50. data/lib/project_types/extension/models/development_server_requirements.rb +35 -0
  51. data/lib/project_types/extension/models/lazy_specification_handler.rb +1 -1
  52. data/lib/project_types/extension/models/server_config/base.rb +31 -0
  53. data/lib/project_types/extension/models/server_config/development.rb +23 -0
  54. data/lib/project_types/extension/models/server_config/development_entries.rb +38 -0
  55. data/lib/project_types/extension/models/server_config/development_renderer.rb +30 -0
  56. data/lib/project_types/extension/models/server_config/extension.rb +35 -0
  57. data/lib/project_types/extension/models/server_config/root.rb +18 -0
  58. data/lib/project_types/extension/models/server_config/user.rb +10 -0
  59. data/lib/project_types/extension/models/specification.rb +1 -1
  60. data/lib/project_types/extension/models/specification_handlers/default.rb +14 -2
  61. data/lib/project_types/extension/models/specification_handlers/theme_app_extension.rb +1 -1
  62. data/lib/project_types/extension/models/specifications.rb +4 -4
  63. data/lib/project_types/extension/tasks/choose_next_available_port.rb +2 -2
  64. data/lib/project_types/extension/tasks/configure_features.rb +1 -1
  65. data/lib/project_types/extension/tasks/configure_options.rb +1 -1
  66. data/lib/project_types/extension/tasks/converters/product_converter.rb +1 -1
  67. data/lib/project_types/extension/tasks/converters/server_config_converter.rb +31 -0
  68. data/lib/project_types/extension/tasks/create_extension.rb +2 -2
  69. data/lib/project_types/extension/tasks/fetch_specifications.rb +2 -2
  70. data/lib/project_types/extension/tasks/find_npm_packages.rb +5 -5
  71. data/lib/project_types/extension/tasks/get_app.rb +2 -2
  72. data/lib/project_types/extension/tasks/get_apps.rb +2 -2
  73. data/lib/project_types/extension/tasks/get_extensions.rb +2 -2
  74. data/lib/project_types/extension/tasks/get_product.rb +2 -2
  75. data/lib/project_types/extension/tasks/load_server_config.rb +23 -0
  76. data/lib/project_types/extension/tasks/run_extension_command.rb +81 -0
  77. data/lib/project_types/extension/tasks/update_draft.rb +2 -2
  78. data/lib/project_types/node/cli.rb +3 -3
  79. data/lib/project_types/node/commands/connect.rb +4 -4
  80. data/lib/project_types/node/commands/create.rb +10 -14
  81. data/lib/project_types/node/commands/deploy/heroku.rb +4 -4
  82. data/lib/project_types/node/commands/deploy.rb +3 -3
  83. data/lib/project_types/node/commands/generate.rb +2 -2
  84. data/lib/project_types/node/commands/open.rb +3 -3
  85. data/lib/project_types/node/commands/serve.rb +15 -7
  86. data/lib/project_types/node/commands/tunnel.rb +6 -6
  87. data/lib/project_types/node/forms/create.rb +3 -3
  88. data/lib/project_types/node/messages/messages.rb +3 -0
  89. data/lib/project_types/php/cli.rb +27 -0
  90. data/lib/project_types/php/commands/connect.rb +19 -0
  91. data/lib/project_types/php/commands/create.rb +143 -0
  92. data/lib/project_types/php/commands/deploy/heroku.rb +129 -0
  93. data/lib/project_types/php/commands/deploy.rb +32 -0
  94. data/lib/project_types/php/commands/open.rb +16 -0
  95. data/lib/project_types/php/commands/serve.rb +51 -0
  96. data/lib/project_types/php/commands/tunnel.rb +37 -0
  97. data/lib/project_types/php/forms/create.rb +45 -0
  98. data/lib/project_types/php/messages/messages.rb +191 -0
  99. data/lib/project_types/rails/cli.rb +3 -3
  100. data/lib/project_types/rails/commands/connect.rb +4 -4
  101. data/lib/project_types/rails/commands/create.rb +12 -16
  102. data/lib/project_types/rails/commands/deploy/heroku.rb +4 -4
  103. data/lib/project_types/rails/commands/deploy.rb +3 -3
  104. data/lib/project_types/rails/commands/generate/webhook.rb +3 -3
  105. data/lib/project_types/rails/commands/generate.rb +3 -3
  106. data/lib/project_types/rails/commands/open.rb +3 -3
  107. data/lib/project_types/rails/commands/serve.rb +8 -8
  108. data/lib/project_types/rails/commands/tunnel.rb +6 -6
  109. data/lib/project_types/rails/forms/create.rb +3 -3
  110. data/lib/project_types/rails/gem.rb +1 -1
  111. data/lib/project_types/rails/ruby.rb +1 -1
  112. data/lib/project_types/script/cli.rb +16 -6
  113. data/lib/project_types/script/commands/create.rb +4 -2
  114. data/lib/project_types/script/commands/push.rb +2 -2
  115. data/lib/project_types/script/config/extension_points.yml +30 -29
  116. data/lib/project_types/script/forms/create.rb +1 -1
  117. data/lib/project_types/script/layers/application/create_script.rb +32 -12
  118. data/lib/project_types/script/layers/application/extension_points.rb +4 -4
  119. data/lib/project_types/script/layers/application/push_script.rb +13 -1
  120. data/lib/project_types/script/layers/domain/extension_point.rb +13 -45
  121. data/lib/project_types/script/layers/domain/push_package.rb +0 -12
  122. data/lib/project_types/script/layers/domain/script_project.rb +2 -2
  123. data/lib/project_types/script/layers/infrastructure/api_clients/partners_proxy_api_client.rb +57 -0
  124. data/lib/project_types/script/layers/infrastructure/api_clients/script_service_api_client.rb +35 -0
  125. data/lib/project_types/script/layers/infrastructure/command_runner.rb +1 -1
  126. data/lib/project_types/script/layers/infrastructure/errors.rb +5 -0
  127. data/lib/project_types/script/layers/infrastructure/languages/assemblyscript_project_creator.rb +10 -90
  128. data/lib/project_types/script/layers/infrastructure/languages/project_creator.rb +76 -11
  129. data/lib/project_types/script/layers/infrastructure/languages/task_runner.rb +1 -1
  130. data/lib/project_types/script/layers/infrastructure/languages/typescript_project_creator.rb +33 -0
  131. data/lib/project_types/script/layers/infrastructure/languages/typescript_task_runner.rb +105 -0
  132. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +1 -1
  133. data/lib/project_types/script/layers/infrastructure/script_project_repository.rb +6 -6
  134. data/lib/project_types/script/layers/infrastructure/script_service.rb +25 -144
  135. data/lib/project_types/script/layers/infrastructure/script_uploader.rb +27 -0
  136. data/lib/project_types/script/layers/infrastructure/service_locator.rb +20 -0
  137. data/lib/project_types/script/messages/messages.rb +4 -0
  138. data/lib/project_types/script/tasks/ensure_env.rb +7 -7
  139. data/lib/project_types/script/ui/error_handler.rb +84 -76
  140. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  141. data/lib/project_types/theme/cli.rb +3 -3
  142. data/lib/project_types/theme/commands/check.rb +3 -3
  143. data/lib/project_types/theme/commands/delete.rb +7 -7
  144. data/lib/project_types/theme/commands/init.rb +3 -3
  145. data/lib/project_types/theme/commands/language_server.rb +2 -2
  146. data/lib/project_types/theme/commands/package.rb +2 -2
  147. data/lib/project_types/theme/commands/publish.rb +5 -5
  148. data/lib/project_types/theme/commands/pull.rb +9 -9
  149. data/lib/project_types/theme/commands/push.rb +12 -12
  150. data/lib/project_types/theme/commands/serve.rb +4 -4
  151. data/lib/project_types/theme/forms/confirm_store.rb +1 -1
  152. data/lib/project_types/theme/forms/select.rb +2 -2
  153. data/lib/{shopify-cli → shopify_cli}/admin_api/populate_resource_command.rb +3 -3
  154. data/lib/{shopify-cli → shopify_cli}/admin_api/schema.rb +4 -4
  155. data/lib/{shopify-cli → shopify_cli}/admin_api.rb +27 -27
  156. data/lib/{shopify-cli → shopify_cli}/api.rb +12 -8
  157. data/lib/shopify_cli/command/app_sub_command.rb +16 -0
  158. data/lib/{shopify-cli → shopify_cli}/command.rb +3 -3
  159. data/lib/{shopify-cli → shopify_cli}/commands/config.rb +14 -14
  160. data/lib/{shopify-cli → shopify_cli}/commands/help.rb +4 -4
  161. data/lib/{shopify-cli → shopify_cli}/commands/login.rb +7 -7
  162. data/lib/shopify_cli/commands/logout.rb +39 -0
  163. data/lib/{shopify-cli → shopify_cli}/commands/populate/customer.rb +4 -4
  164. data/lib/{shopify-cli → shopify_cli}/commands/populate/draft_order.rb +4 -4
  165. data/lib/{shopify-cli → shopify_cli}/commands/populate/product.rb +4 -4
  166. data/lib/shopify_cli/commands/populate.rb +23 -0
  167. data/lib/shopify_cli/commands/store.rb +15 -0
  168. data/lib/{shopify-cli → shopify_cli}/commands/switch.rb +5 -5
  169. data/lib/{shopify-cli → shopify_cli}/commands/system.rb +10 -10
  170. data/lib/shopify_cli/commands/version.rb +15 -0
  171. data/lib/{shopify-cli → shopify_cli}/commands/whoami.rb +7 -7
  172. data/lib/shopify_cli/commands.rb +34 -0
  173. data/lib/{shopify-cli → shopify_cli}/connect.rb +3 -3
  174. data/lib/shopify_cli/constants.rb +54 -0
  175. data/lib/{shopify-cli → shopify_cli}/context.rb +6 -6
  176. data/lib/{shopify-cli → shopify_cli}/core/entry_point.rb +7 -7
  177. data/lib/{shopify-cli → shopify_cli}/core/executor.rb +8 -4
  178. data/lib/{shopify-cli → shopify_cli}/core/finalize.rb +1 -1
  179. data/lib/{shopify-cli → shopify_cli}/core/help_resolver.rb +2 -2
  180. data/lib/{shopify-cli → shopify_cli}/core/monorail.rb +8 -8
  181. data/lib/shopify_cli/core.rb +8 -0
  182. data/lib/{shopify-cli → shopify_cli}/db.rb +8 -8
  183. data/lib/shopify_cli/environment.rb +91 -0
  184. data/lib/shopify_cli/exception_reporter/permission_controller.rb +54 -0
  185. data/lib/shopify_cli/exception_reporter.rb +55 -0
  186. data/lib/{shopify-cli → shopify_cli}/feature.rb +8 -8
  187. data/lib/{shopify-cli → shopify_cli}/form.rb +2 -2
  188. data/lib/{shopify-cli → shopify_cli}/git.rb +38 -8
  189. data/lib/{shopify-cli → shopify_cli}/helpers/haikunator.rb +1 -1
  190. data/lib/shopify_cli/helpers.rb +5 -0
  191. data/lib/{shopify-cli → shopify_cli}/heroku.rb +38 -13
  192. data/lib/{shopify-cli → shopify_cli}/http_request.rb +1 -1
  193. data/lib/{shopify-cli → shopify_cli}/identity_auth/servlet.rb +1 -1
  194. data/lib/{shopify-cli → shopify_cli}/identity_auth.rb +24 -31
  195. data/lib/{shopify-cli → shopify_cli}/js_deps.rb +7 -7
  196. data/lib/{shopify-cli → shopify_cli}/js_system.rb +10 -10
  197. data/lib/{shopify-cli → shopify_cli}/lazy_delegator.rb +2 -2
  198. data/lib/{shopify-cli → shopify_cli}/messages/messages.rb +44 -2
  199. data/lib/{shopify-cli → shopify_cli}/method_object.rb +15 -8
  200. data/lib/shopify_cli/migrator/migration.rb +27 -0
  201. data/lib/shopify_cli/migrator/migrations/1631709766_noop.rb +13 -0
  202. data/lib/shopify_cli/migrator.rb +48 -0
  203. data/lib/{shopify-cli → shopify_cli}/options.rb +1 -1
  204. data/lib/{shopify-cli → shopify_cli}/packager.rb +8 -8
  205. data/lib/{shopify-cli → shopify_cli}/partners_api/organizations.rb +1 -1
  206. data/lib/{shopify-cli → shopify_cli}/partners_api.rb +16 -40
  207. data/lib/shopify_cli/php_deps.rb +102 -0
  208. data/lib/{shopify-cli → shopify_cli}/process_supervision.rb +10 -8
  209. data/lib/{shopify-cli → shopify_cli}/project.rb +15 -15
  210. data/lib/{shopify-cli → shopify_cli}/project_commands.rb +3 -3
  211. data/lib/{shopify-cli → shopify_cli}/project_type.rb +5 -5
  212. data/lib/{shopify-cli → shopify_cli}/resolve_constant.rb +5 -5
  213. data/lib/{shopify-cli → shopify_cli}/resources/env_file.rb +1 -1
  214. data/lib/shopify_cli/resources.rb +5 -0
  215. data/lib/{shopify-cli → shopify_cli}/result.rb +11 -11
  216. data/lib/{shopify-cli → shopify_cli}/shopifolk.rb +6 -6
  217. data/lib/{shopify-cli → shopify_cli}/sub_command.rb +1 -1
  218. data/lib/{shopify-cli → shopify_cli}/task.rb +1 -1
  219. data/lib/{shopify-cli → shopify_cli}/tasks/confirm_store.rb +3 -3
  220. data/lib/{shopify-cli → shopify_cli}/tasks/create_api_client.rb +4 -4
  221. data/lib/shopify_cli/tasks/ensure_authenticated.rb +13 -0
  222. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_dev_store.rb +5 -5
  223. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_env.rb +3 -3
  224. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_loopback_url.rb +4 -4
  225. data/lib/{shopify-cli → shopify_cli}/tasks/ensure_project_type.rb +3 -3
  226. data/lib/{shopify-cli → shopify_cli}/tasks/select_org_and_shop.rb +8 -8
  227. data/lib/{shopify-cli → shopify_cli}/tasks/update_dashboard_urls.rb +6 -6
  228. data/lib/{shopify-cli → shopify_cli}/tasks.rb +10 -10
  229. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/certificate_manager.rb +5 -5
  230. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/header_hash.rb +1 -1
  231. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot-reload.js +0 -0
  232. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/hot_reload.rb +5 -6
  233. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/local_assets.rb +1 -1
  234. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/proxy.rb +2 -2
  235. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/sse.rb +1 -1
  236. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/watcher.rb +1 -1
  237. data/lib/{shopify-cli → shopify_cli}/theme/dev_server/web_server.rb +1 -1
  238. data/lib/{shopify-cli → shopify_cli}/theme/dev_server.rb +3 -3
  239. data/lib/shopify_cli/theme/development_theme.rb +83 -0
  240. data/lib/{shopify-cli → shopify_cli}/theme/file.rb +1 -1
  241. data/lib/{shopify-cli → shopify_cli}/theme/ignore_filter.rb +1 -1
  242. data/lib/{shopify-cli → shopify_cli}/theme/mime_type.rb +1 -1
  243. data/lib/{shopify-cli → shopify_cli}/theme/syncer.rb +6 -6
  244. data/lib/{shopify-cli → shopify_cli}/theme/theme.rb +4 -4
  245. data/lib/{shopify-cli → shopify_cli}/transform_data_structure.rb +4 -4
  246. data/lib/{shopify-cli → shopify_cli}/tunnel.rb +14 -14
  247. data/lib/shopify_cli/version.rb +3 -0
  248. data/lib/shopify_cli.rb +61 -50
  249. data/shopify-cli.gemspec +13 -5
  250. data/utilities/docker.rb +47 -0
  251. data/utilities/utilities.rb +5 -0
  252. metadata +155 -97
  253. data/.github/workflows/build.yml +0 -28
  254. data/lib/project_types/script/layers/infrastructure/languages/rust_project_creator.rb +0 -73
  255. data/lib/project_types/script/layers/infrastructure/languages/rust_task_runner.rb +0 -60
  256. data/lib/shopify-cli/commands/logout.rb +0 -39
  257. data/lib/shopify-cli/commands/populate.rb +0 -23
  258. data/lib/shopify-cli/commands/store.rb +0 -15
  259. data/lib/shopify-cli/commands/version.rb +0 -15
  260. data/lib/shopify-cli/commands.rb +0 -34
  261. data/lib/shopify-cli/core.rb +0 -8
  262. data/lib/shopify-cli/helpers.rb +0 -5
  263. data/lib/shopify-cli/resources.rb +0 -5
  264. data/lib/shopify-cli/tasks/ensure_authenticated.rb +0 -13
  265. data/lib/shopify-cli/theme/development_theme.rb +0 -69
  266. data/lib/shopify-cli/version.rb +0 -3
@@ -1,22 +1,22 @@
1
1
  # frozen_string_literal: true
2
- require "shopify-cli/theme/dev_server"
2
+ require "shopify_cli/theme/dev_server"
3
3
 
4
4
  module Theme
5
5
  class Command
6
- class Serve < ShopifyCli::SubCommand
6
+ class Serve < ShopifyCLI::SubCommand
7
7
  options do |parser, flags|
8
8
  parser.on("--port=PORT") { |port| flags[:port] = port.to_i }
9
9
  end
10
10
 
11
11
  def call(*)
12
12
  flags = options.flags.dup
13
- ShopifyCli::Theme::DevServer.start(@ctx, ".", **flags) do |syncer|
13
+ ShopifyCLI::Theme::DevServer.start(@ctx, ".", **flags) do |syncer|
14
14
  UI::SyncProgressBar.new(syncer).progress(:upload_theme!, delay_low_priority_files: true)
15
15
  end
16
16
  end
17
17
 
18
18
  def self.help
19
- ShopifyCli::Context.message("theme.serve.help", ShopifyCli::TOOL_NAME)
19
+ ShopifyCLI::Context.message("theme.serve.help", ShopifyCLI::TOOL_NAME)
20
20
  end
21
21
  end
22
22
  end
@@ -1,6 +1,6 @@
1
1
  module Theme
2
2
  module Forms
3
- class ConfirmStore < ShopifyCli::Form
3
+ class ConfirmStore < ShopifyCLI::Form
4
4
  flag_arguments :title, :force
5
5
 
6
6
  def ask
@@ -1,6 +1,6 @@
1
1
  module Theme
2
2
  module Forms
3
- class Select < ShopifyCli::Form
3
+ class Select < ShopifyCLI::Form
4
4
  attr_accessor :theme
5
5
  flag_arguments :root, :title, :exclude_roles, :include_foreign_developments
6
6
 
@@ -17,7 +17,7 @@ module Theme
17
17
  private
18
18
 
19
19
  def themes
20
- @themes ||= ShopifyCli::Theme::Theme.all(@ctx, root: root)
20
+ @themes ||= ShopifyCLI::Theme::Theme.all(@ctx, root: root)
21
21
  .sort_by { |theme| theme_sort_order(theme) }
22
22
  end
23
23
 
@@ -1,9 +1,9 @@
1
1
  require "shopify_cli"
2
2
  require "optparse"
3
3
 
4
- module ShopifyCli
4
+ module ShopifyCLI
5
5
  class AdminAPI
6
- class PopulateResourceCommand < ShopifyCli::SubCommand
6
+ class PopulateResourceCommand < ShopifyCLI::SubCommand
7
7
  DEFAULT_COUNT = 5
8
8
 
9
9
  attr_reader :input
@@ -40,7 +40,7 @@ module ShopifyCli
40
40
  return @ctx.puts(output)
41
41
  end
42
42
 
43
- ShopifyCli::Tasks::ConfirmStore.call(@ctx) unless @skip_shop_confirmation
43
+ ShopifyCLI::Tasks::ConfirmStore.call(@ctx) unless @skip_shop_confirmation
44
44
  @shop = AdminAPI.get_shop_or_abort(@ctx)
45
45
  if @silent
46
46
  spin_group = CLI::UI::SpinGroup.new
@@ -1,19 +1,19 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  class AdminAPI
5
5
  class Schema < Hash
6
6
  class << self
7
7
  def get(ctx)
8
- unless ShopifyCli::DB.exists?(:shopify_admin_schema)
8
+ unless ShopifyCLI::DB.exists?(:shopify_admin_schema)
9
9
  shop = AdminAPI.get_shop_or_abort(ctx)
10
10
  schema = AdminAPI.query(ctx, "admin_introspection", shop: shop)
11
- ShopifyCli::DB.set(shopify_admin_schema: JSON.dump(schema))
11
+ ShopifyCLI::DB.set(shopify_admin_schema: JSON.dump(schema))
12
12
  end
13
13
  # This is ruby magic for making a new hash with another hash.
14
14
  # It wraps the JSON in our Schema Class to have the helper methods
15
15
  # available
16
- self[JSON.parse(ShopifyCli::DB.get(:shopify_admin_schema))]
16
+ self[JSON.parse(ShopifyCLI::DB.get(:shopify_admin_schema))]
17
17
  end
18
18
  end
19
19
 
@@ -1,13 +1,13 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  ##
5
- # ShopifyCli::AdminAPI wraps our graphql functionality with authentication so that
5
+ # ShopifyCLI::AdminAPI wraps our graphql functionality with authentication so that
6
6
  # these concerns are taken care of.
7
7
  #
8
8
  class AdminAPI < API
9
- autoload :PopulateResourceCommand, "shopify-cli/admin_api/populate_resource_command"
10
- autoload :Schema, "shopify-cli/admin_api/schema"
9
+ autoload :PopulateResourceCommand, "shopify_cli/admin_api/populate_resource_command"
10
+ autoload :Schema, "shopify_cli/admin_api/schema"
11
11
 
12
12
  class << self
13
13
  ##
@@ -24,10 +24,10 @@ module ShopifyCli
24
24
  #
25
25
  # #### Raises
26
26
  #
27
- # * http 404 will raise a ShopifyCli::API::APIRequestNotFoundError
28
- # * http 400..499 will raise a ShopifyCli::API::APIRequestClientError
29
- # * http 500..599 will raise a ShopifyCli::API::APIRequestServerError
30
- # * All other codes will raise ShopifyCli::API::APIRequestUnexpectedError
27
+ # * http 404 will raise a ShopifyCLI::API::APIRequestNotFoundError
28
+ # * http 400..499 will raise a ShopifyCLI::API::APIRequestClientError
29
+ # * http 500..599 will raise a ShopifyCLI::API::APIRequestServerError
30
+ # * All other codes will raise ShopifyCLI::API::APIRequestUnexpectedError
31
31
  #
32
32
  # #### Returns
33
33
  #
@@ -35,18 +35,18 @@ module ShopifyCli
35
35
  #
36
36
  # #### Example
37
37
  #
38
- # ShopifyCli::AdminAPI.query(@ctx, 'all_organizations')
38
+ # ShopifyCLI::AdminAPI.query(@ctx, 'all_organizations')
39
39
  #
40
40
  def query(ctx, query_name, shop:, api_version: nil, **variables)
41
41
  CLI::Kit::Util.begin do
42
42
  api_client(ctx, api_version, shop).query(query_name, variables: variables)
43
43
  end.retry_after(API::APIRequestUnauthorizedError, retries: 1) do
44
- ShopifyCli::IdentityAuth.new(ctx: ctx).reauthenticate
44
+ ShopifyCLI::IdentityAuth.new(ctx: ctx).reauthenticate
45
45
  end
46
46
  rescue API::APIRequestUnauthorizedError
47
47
  ctx.abort(ctx.message("core.api.error.failed_auth"))
48
48
  rescue API::APIRequestForbiddenError
49
- ctx.abort(ctx.message("core.api.error.forbidden", ShopifyCli::TOOL_NAME))
49
+ ctx.abort(ctx.message("core.api.error.forbidden", ShopifyCLI::TOOL_NAME))
50
50
  end
51
51
 
52
52
  ##
@@ -65,10 +65,10 @@ module ShopifyCli
65
65
  #
66
66
  # #### Raises
67
67
  #
68
- # * http 404 will raise a ShopifyCli::API::APIRequestNotFoundError
69
- # * http 400..499 will raise a ShopifyCli::API::APIRequestClientError
70
- # * http 500..599 will raise a ShopifyCli::API::APIRequestServerError
71
- # * All other codes will raise ShopifyCli::API::APIRequestUnexpectedError
68
+ # * http 404 will raise a ShopifyCLI::API::APIRequestNotFoundError
69
+ # * http 400..499 will raise a ShopifyCLI::API::APIRequestClientError
70
+ # * http 500..599 will raise a ShopifyCLI::API::APIRequestServerError
71
+ # * All other codes will raise ShopifyCLI::API::APIRequestUnexpectedError
72
72
  #
73
73
  # #### Returns
74
74
  #
@@ -76,38 +76,38 @@ module ShopifyCli
76
76
  #
77
77
  # #### Example
78
78
  #
79
- # ShopifyCli::AdminAPI.rest_request(@ctx,
79
+ # ShopifyCLI::AdminAPI.rest_request(@ctx,
80
80
  # shop: 'shop.myshopify.com',
81
81
  # path: 'data.json',
82
82
  # token: 'password')
83
83
  #
84
84
  def rest_request(ctx, shop:, path:, query: nil, body: nil, method: "GET", api_version: nil, token: nil)
85
85
  CLI::Kit::Util.begin do
86
- ShopifyCli::DB.set(shopify_exchange_token: token) unless token.nil?
86
+ ShopifyCLI::DB.set(shopify_exchange_token: token) unless token.nil?
87
87
  url = URI::HTTPS.build(
88
88
  host: shop,
89
89
  path: "/admin/api/#{fetch_api_version(ctx, api_version, shop)}/#{path}",
90
90
  query: query,
91
91
  )
92
92
  resp = api_client(ctx, api_version, shop, path: path).request(url: url.to_s, body: body, method: method)
93
- ShopifyCli::DB.set(shopify_exchange_token: nil) unless token.nil?
93
+ ShopifyCLI::DB.set(shopify_exchange_token: nil) unless token.nil?
94
94
  resp
95
95
  end.retry_after(API::APIRequestUnauthorizedError) do
96
- ShopifyCli::IdentityAuth.new(ctx: ctx).reauthenticate
96
+ ShopifyCLI::IdentityAuth.new(ctx: ctx).reauthenticate
97
97
  end
98
98
  end
99
99
 
100
100
  def get_shop_or_abort(ctx)
101
101
  ctx.abort(
102
- ctx.message("core.populate.error.no_shop", ShopifyCli::TOOL_NAME)
103
- ) unless ShopifyCli::DB.exists?(:shop)
104
- ShopifyCli::DB.get(:shop)
102
+ ctx.message("core.populate.error.no_shop", ShopifyCLI::TOOL_NAME)
103
+ ) unless ShopifyCLI::DB.exists?(:shop)
104
+ ShopifyCLI::DB.get(:shop)
105
105
  end
106
106
 
107
107
  private
108
108
 
109
109
  def authenticate(ctx, _shop)
110
- ShopifyCli::IdentityAuth.new(ctx: ctx).authenticate
110
+ ShopifyCLI::IdentityAuth.new(ctx: ctx).authenticate
111
111
  end
112
112
 
113
113
  def api_client(ctx, api_version, shop, path: "graphql.json")
@@ -119,9 +119,9 @@ module ShopifyCli
119
119
  end
120
120
 
121
121
  def access_token(ctx, shop)
122
- ShopifyCli::DB.get(:shopify_exchange_token) do
122
+ ShopifyCLI::DB.get(:shopify_exchange_token) do
123
123
  authenticate(ctx, shop)
124
- ShopifyCli::DB.get(:shopify_exchange_token)
124
+ ShopifyCLI::DB.get(:shopify_exchange_token)
125
125
  end
126
126
  end
127
127
 
@@ -141,12 +141,12 @@ module ShopifyCli
141
141
  .sort
142
142
  .reverse[0]
143
143
  end.retry_after(API::APIRequestUnauthorizedError, retries: 1) do
144
- ShopifyCli::IdentityAuth.new(ctx: ctx).reauthenticate
144
+ ShopifyCLI::IdentityAuth.new(ctx: ctx).reauthenticate
145
145
  end
146
146
  rescue API::APIRequestUnauthorizedError
147
147
  ctx.abort(ctx.message("core.api.error.failed_auth"))
148
148
  rescue API::APIRequestForbiddenError
149
- ctx.abort(ctx.message("core.api.error.forbidden", ShopifyCli::TOOL_NAME))
149
+ ctx.abort(ctx.message("core.api.error.forbidden", ShopifyCLI::TOOL_NAME))
150
150
  end
151
151
  end
152
152
 
@@ -1,10 +1,11 @@
1
1
  require "shopify_cli"
2
+ require "securerandom"
2
3
 
3
- module ShopifyCli
4
+ module ShopifyCLI
4
5
  class API
5
6
  include SmartProperties
6
7
 
7
- property! :ctx, accepts: ShopifyCli::Context
8
+ property! :ctx, accepts: ShopifyCLI::Context
8
9
  property! :token, accepts: String
9
10
  property :auth_header, accepts: String
10
11
  property! :url, accepts: String
@@ -52,8 +53,9 @@ module ShopifyCli
52
53
  end
53
54
 
54
55
  # we delay this require so as to avoid a performance hit on starting the CLI
55
- require "shopify-cli/http_request"
56
+ require "shopify_cli/http_request"
56
57
  headers = default_headers.merge(headers)
58
+ ctx.debug("#{method} #{uri} with X-Request-Id: #{headers["X-Request-Id"]}")
57
59
  response = if method == "POST"
58
60
  HttpRequest.post(uri, body, headers)
59
61
  elsif method == "PUT"
@@ -82,6 +84,7 @@ module ShopifyCli
82
84
  raise APIRequestUnexpectedError.new("#{response.code}\n#{response.body}", response: response)
83
85
  end
84
86
  rescue Errno::ETIMEDOUT, Timeout::Error
87
+ ctx.debug("timeout in #{method} #{uri} with X-Request-Id: #{headers["X-Request-Id"]}")
85
88
  raise APIRequestTimeoutError.new("Timeout")
86
89
  end.retry_after(APIRequestRetriableError, retries: 3) do |e|
87
90
  sleep(1) if e.is_a?(APIRequestThrottledError)
@@ -91,14 +94,14 @@ module ShopifyCli
91
94
  protected
92
95
 
93
96
  def load_query(name)
94
- project_type = ShopifyCli::Project.current_project_type
97
+ project_type = ShopifyCLI::Project.current_project_type
95
98
  project_file_path = File.join(
96
- ShopifyCli::ROOT, "lib", "project_types", project_type.to_s, "graphql", "#{name}.graphql"
99
+ ShopifyCLI::ROOT, "lib", "project_types", project_type.to_s, "graphql", "#{name}.graphql"
97
100
  )
98
101
  if !project_type.nil? && File.exist?(project_file_path)
99
102
  File.read(project_file_path)
100
103
  else
101
- File.read(File.join(ShopifyCli::ROOT, "lib", "graphql", "#{name}.graphql"))
104
+ File.read(File.join(ShopifyCLI::ROOT, "lib", "graphql", "#{name}.graphql"))
102
105
  end
103
106
  end
104
107
 
@@ -106,9 +109,10 @@ module ShopifyCli
106
109
 
107
110
  def default_headers
108
111
  {
109
- "User-Agent" => "Shopify CLI; v=#{ShopifyCli::VERSION}",
110
- "Sec-CH-UA" => "Shopify CLI; v=#{ShopifyCli::VERSION} sha=#{ShopifyCli.sha}",
112
+ "User-Agent" => "Shopify CLI; v=#{ShopifyCLI::VERSION}",
113
+ "Sec-CH-UA" => "Shopify CLI; v=#{ShopifyCLI::VERSION} sha=#{ShopifyCLI.sha}",
111
114
  "Sec-CH-UA-PLATFORM" => ctx.os.to_s,
115
+ "X-Request-Id" => SecureRandom.uuid,
112
116
  }.tap do |headers|
113
117
  headers["X-Shopify-Cli-Employee"] = "1" if Shopifolk.acting_as_shopify_organization?
114
118
  end.merge(auth_headers(token))
@@ -0,0 +1,16 @@
1
+ module ShopifyCLI
2
+ class Command
3
+ class AppSubCommand < SubCommand
4
+ class << self
5
+ def call_help(*)
6
+ output = help
7
+ if respond_to?(:extended_help)
8
+ output += "\n"
9
+ output += extended_help
10
+ end
11
+ @ctx.puts(output)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "shopify_cli"
3
3
 
4
- module ShopifyCli
4
+ module ShopifyCLI
5
5
  class Command < CLI::Kit::BaseCommand
6
6
  extend Feature::Set
7
7
 
@@ -55,7 +55,7 @@ module ShopifyCli
55
55
  end
56
56
 
57
57
  def task_registry
58
- @task_registry || ShopifyCli::Tasks::Registry
58
+ @task_registry || ShopifyCLI::Tasks::Registry
59
59
  end
60
60
 
61
61
  def call_help(*cmds)
@@ -75,7 +75,7 @@ module ShopifyCli
75
75
 
76
76
  def initialize(ctx = nil)
77
77
  super()
78
- @ctx = ctx || ShopifyCli::Context.new
78
+ @ctx = ctx || ShopifyCLI::Context.new
79
79
  self.options = Options.new
80
80
  end
81
81
  end
@@ -1,8 +1,8 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Commands
5
- class Config < ShopifyCli::Command
5
+ class Config < ShopifyCLI::Command
6
6
  hidden_feature(feature_set: :debug)
7
7
 
8
8
  subcommand :Feature, "feature"
@@ -13,12 +13,12 @@ module ShopifyCli
13
13
  end
14
14
 
15
15
  def self.help
16
- ShopifyCli::Context.message("core.config.help", ShopifyCli::TOOL_NAME)
16
+ ShopifyCLI::Context.message("core.config.help", ShopifyCLI::TOOL_NAME)
17
17
  end
18
18
 
19
- class Feature < ShopifyCli::SubCommand
19
+ class Feature < ShopifyCLI::SubCommand
20
20
  def self.help
21
- ShopifyCli::Context.message("core.config.feature.help", ShopifyCli::TOOL_NAME)
21
+ ShopifyCLI::Context.message("core.config.feature.help", ShopifyCLI::TOOL_NAME)
22
22
  end
23
23
 
24
24
  options do |parser, flags|
@@ -29,13 +29,13 @@ module ShopifyCli
29
29
 
30
30
  def call(args, _name)
31
31
  feature_name = args.shift
32
- return @ctx.puts(@ctx.message("core.config.help", ShopifyCli::TOOL_NAME)) if feature_name.nil?
33
- is_enabled = ShopifyCli::Feature.enabled?(feature_name)
32
+ return @ctx.puts(@ctx.message("core.config.help", ShopifyCLI::TOOL_NAME)) if feature_name.nil?
33
+ is_enabled = ShopifyCLI::Feature.enabled?(feature_name)
34
34
  if options.flags[:action] == "disable" && is_enabled
35
- ShopifyCli::Feature.disable(feature_name)
35
+ ShopifyCLI::Feature.disable(feature_name)
36
36
  @ctx.puts(@ctx.message("core.config.feature.disabled", feature_name))
37
37
  elsif options.flags[:action] == "enable" && !is_enabled
38
- ShopifyCli::Feature.enable(feature_name)
38
+ ShopifyCLI::Feature.enable(feature_name)
39
39
  @ctx.puts(@ctx.message("core.config.feature.enabled", feature_name))
40
40
  elsif is_enabled
41
41
  @ctx.puts(@ctx.message("core.config.feature.is_enabled", feature_name))
@@ -45,9 +45,9 @@ module ShopifyCli
45
45
  end
46
46
  end
47
47
 
48
- class Analytics < ShopifyCli::SubCommand
48
+ class Analytics < ShopifyCLI::SubCommand
49
49
  def self.help
50
- ShopifyCli::Context.message("core.config.analytics.help", ShopifyCli::TOOL_NAME)
50
+ ShopifyCLI::Context.message("core.config.analytics.help", ShopifyCLI::TOOL_NAME)
51
51
  end
52
52
 
53
53
  options do |parser, flags|
@@ -57,12 +57,12 @@ module ShopifyCli
57
57
  end
58
58
 
59
59
  def call(_args, _name)
60
- is_enabled = ShopifyCli::Config.get_bool("analytics", "enabled")
60
+ is_enabled = ShopifyCLI::Config.get_bool("analytics", "enabled")
61
61
  if options.flags[:action] == "disable" && is_enabled
62
- ShopifyCli::Config.set("analytics", "enabled", false)
62
+ ShopifyCLI::Config.set("analytics", "enabled", false)
63
63
  @ctx.puts(@ctx.message("core.config.analytics.disabled"))
64
64
  elsif options.flags[:action] == "enable" && !is_enabled
65
- ShopifyCli::Config.set("analytics", "enabled", true)
65
+ ShopifyCLI::Config.set("analytics", "enabled", true)
66
66
  @ctx.puts(@ctx.message("core.config.analytics.enabled"))
67
67
  elsif is_enabled
68
68
  @ctx.puts(@ctx.message("core.config.analytics.is_enabled"))
@@ -1,8 +1,8 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Commands
5
- class Help < ShopifyCli::Command
5
+ class Help < ShopifyCLI::Command
6
6
  def call(args, _name)
7
7
  command = args.shift
8
8
  if command && command != "help"
@@ -20,7 +20,7 @@ module ShopifyCli
20
20
  end
21
21
  end
22
22
 
23
- preamble = @ctx.message("core.help.preamble", ShopifyCli::TOOL_NAME)
23
+ preamble = @ctx.message("core.help.preamble", ShopifyCLI::TOOL_NAME)
24
24
  @ctx.puts(preamble)
25
25
 
26
26
  available_commands = resolved_commands.select { |_name, c| !c.hidden? }
@@ -43,7 +43,7 @@ module ShopifyCli
43
43
  end
44
44
 
45
45
  def resolved_commands
46
- ShopifyCli::Commands::Registry
46
+ ShopifyCLI::Commands::Registry
47
47
  .resolved_commands
48
48
  .sort
49
49
  end
@@ -1,8 +1,8 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Commands
5
- class Login < ShopifyCli::Command
5
+ class Login < ShopifyCLI::Command
6
6
  PROTOCOL_REGEX = /^https?\:\/\//
7
7
  PERMANENT_DOMAIN_SUFFIX = /\.myshopify\.(com|io)$/
8
8
 
@@ -15,7 +15,7 @@ module ShopifyCli
15
15
 
16
16
  def call(*)
17
17
  shop = (options.flags[:shop] || @ctx.getenv("SHOPIFY_SHOP" || nil))
18
- ShopifyCli::DB.set(shop: self.class.validate_shop(shop)) unless shop.nil?
18
+ ShopifyCLI::DB.set(shop: self.class.validate_shop(shop)) unless shop.nil?
19
19
 
20
20
  if shop.nil? && Shopifolk.check
21
21
  Shopifolk.reset
@@ -28,17 +28,17 @@ module ShopifyCli
28
28
 
29
29
  # As password auth will soon be deprecated, we enable only in CI
30
30
  if @ctx.ci? && (password = options.flags[:password] || @ctx.getenv("SHOPIFY_PASSWORD"))
31
- ShopifyCli::DB.set(shopify_exchange_token: password)
31
+ ShopifyCLI::DB.set(shopify_exchange_token: password)
32
32
  else
33
33
  IdentityAuth.new(ctx: @ctx).authenticate
34
34
  org = select_organization
35
- ShopifyCli::DB.set(organization_id: org["id"].to_i) unless org.nil?
35
+ ShopifyCLI::DB.set(organization_id: org["id"].to_i) unless org.nil?
36
36
  Whoami.call([], "whoami")
37
37
  end
38
38
  end
39
39
 
40
40
  def self.help
41
- ShopifyCli::Context.message("core.login.help", ShopifyCli::TOOL_NAME)
41
+ ShopifyCLI::Context.message("core.login.help", ShopifyCLI::TOOL_NAME)
42
42
  end
43
43
 
44
44
  def self.validate_shop(shop)
@@ -75,7 +75,7 @@ module ShopifyCli
75
75
  private
76
76
 
77
77
  def select_organization
78
- organizations = ShopifyCli::PartnersAPI::Organizations.fetch_all(@ctx)
78
+ organizations = ShopifyCLI::PartnersAPI::Organizations.fetch_all(@ctx)
79
79
 
80
80
  if organizations.count == 0
81
81
  nil
@@ -0,0 +1,39 @@
1
+ require "shopify_cli"
2
+ require "shopify_cli/theme/development_theme"
3
+
4
+ module ShopifyCLI
5
+ module Commands
6
+ class Logout < ShopifyCLI::Command
7
+ def call(*)
8
+ try_delete_development_theme
9
+ ShopifyCLI::IdentityAuth.delete_tokens_and_keys
10
+ ShopifyCLI::DB.del(:shop) if has_shop?
11
+ ShopifyCLI::DB.del(:organization_id) if has_organization_id?
12
+ ShopifyCLI::Shopifolk.reset
13
+ @ctx.puts(@ctx.message("core.logout.success"))
14
+ end
15
+
16
+ def self.help
17
+ ShopifyCLI::Context.message("core.logout.help", ShopifyCLI::TOOL_NAME)
18
+ end
19
+
20
+ private
21
+
22
+ def has_shop?
23
+ ShopifyCLI::DB.exists?(:shop)
24
+ end
25
+
26
+ def has_organization_id?
27
+ ShopifyCLI::DB.exists?(:organization_id)
28
+ end
29
+
30
+ def try_delete_development_theme
31
+ return unless has_shop?
32
+
33
+ ShopifyCLI::Theme::DevelopmentTheme.delete(@ctx)
34
+ rescue ShopifyCLI::API::APIRequestError
35
+ # Ignore since we can't delete it
36
+ end
37
+ end
38
+ end
39
+ end
@@ -1,13 +1,13 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Commands
5
5
  class Populate
6
- class Customer < ShopifyCli::AdminAPI::PopulateResourceCommand
6
+ class Customer < ShopifyCLI::AdminAPI::PopulateResourceCommand
7
7
  @input_type = :CustomerInput
8
8
 
9
9
  def defaults
10
- first_name, last_name = ShopifyCli::Helpers::Haikunator.name
10
+ first_name, last_name = ShopifyCLI::Helpers::Haikunator.name
11
11
  {
12
12
  firstName: first_name,
13
13
  lastName: last_name,
@@ -16,7 +16,7 @@ module ShopifyCli
16
16
 
17
17
  def message(data)
18
18
  ret = data["customerCreate"]["customer"]
19
- id = ShopifyCli::API.gid_to_id(ret["id"])
19
+ id = ShopifyCLI::API.gid_to_id(ret["id"])
20
20
  @ctx.message("core.populate.customer.added", ret["displayName"], @shop, admin_url, id)
21
21
  end
22
22
  end
@@ -1,9 +1,9 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Commands
5
5
  class Populate
6
- class DraftOrder < ShopifyCli::AdminAPI::PopulateResourceCommand
6
+ class DraftOrder < ShopifyCLI::AdminAPI::PopulateResourceCommand
7
7
  @input_type = :DraftOrderInput
8
8
 
9
9
  def defaults
@@ -12,14 +12,14 @@ module ShopifyCli
12
12
  originalUnitPrice: price,
13
13
  quantity: 1,
14
14
  weight: { value: 10, unit: "GRAMS" },
15
- title: ShopifyCli::Helpers::Haikunator.title,
15
+ title: ShopifyCLI::Helpers::Haikunator.title,
16
16
  }],
17
17
  }
18
18
  end
19
19
 
20
20
  def message(data)
21
21
  ret = data["draftOrderCreate"]["draftOrder"]
22
- id = ShopifyCli::API.gid_to_id(ret["id"])
22
+ id = ShopifyCLI::API.gid_to_id(ret["id"])
23
23
  @ctx.message("core.populate.draft_order.added", @shop, admin_url, id)
24
24
  end
25
25
  end
@@ -1,21 +1,21 @@
1
1
  require "shopify_cli"
2
2
 
3
- module ShopifyCli
3
+ module ShopifyCLI
4
4
  module Commands
5
5
  class Populate
6
- class Product < ShopifyCli::AdminAPI::PopulateResourceCommand
6
+ class Product < ShopifyCLI::AdminAPI::PopulateResourceCommand
7
7
  @input_type = :ProductInput
8
8
 
9
9
  def defaults
10
10
  {
11
- title: ShopifyCli::Helpers::Haikunator.title,
11
+ title: ShopifyCLI::Helpers::Haikunator.title,
12
12
  variants: [{ price: price }],
13
13
  }
14
14
  end
15
15
 
16
16
  def message(data)
17
17
  ret = data["productCreate"]["product"]
18
- id = ShopifyCli::API.gid_to_id(ret["id"])
18
+ id = ShopifyCLI::API.gid_to_id(ret["id"])
19
19
  @ctx.message("core.populate.product.added", ret["title"], @shop, admin_url, id)
20
20
  end
21
21
  end
@@ -0,0 +1,23 @@
1
+ require "shopify_cli"
2
+
3
+ module ShopifyCLI
4
+ module Commands
5
+ class Populate < ShopifyCLI::Command
6
+ subcommand :Customer, "customers", "shopify_cli/commands/populate/customer"
7
+ subcommand :DraftOrder, "draftorders", "shopify_cli/commands/populate/draft_order"
8
+ subcommand :Product, "products", "shopify_cli/commands/populate/product"
9
+
10
+ def call(_args, _name)
11
+ @ctx.puts(self.class.help)
12
+ end
13
+
14
+ def self.help
15
+ ShopifyCLI::Context.message("core.populate.help", ShopifyCLI::TOOL_NAME)
16
+ end
17
+
18
+ def self.extended_help
19
+ ShopifyCLI::Context.message("core.populate.extended_help", ShopifyCLI::TOOL_NAME)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ require "shopify_cli"
2
+
3
+ module ShopifyCLI
4
+ module Commands
5
+ class Store < ShopifyCLI::Command
6
+ def call(_args, _name)
7
+ @ctx.puts(@ctx.message("core.store.shop", ShopifyCLI::AdminAPI.get_shop_or_abort(@ctx)))
8
+ end
9
+
10
+ def self.help
11
+ ShopifyCLI::Context.message("core.store.help", ShopifyCLI::TOOL_NAME)
12
+ end
13
+ end
14
+ end
15
+ end