shopify-cli 1.4.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +2 -2
  3. data/.github/CONTRIBUTING.md +9 -1
  4. data/.github/PULL_REQUEST_TEMPLATE.md +10 -1
  5. data/.github/workflows/release.yml +61 -0
  6. data/.github/workflows/triage.yml +22 -0
  7. data/.rubocop.yml +56 -7
  8. data/.rubocop_todo.yml +4 -13
  9. data/.travis.yml +1 -0
  10. data/CHANGELOG.md +27 -1
  11. data/Gemfile +12 -10
  12. data/Gemfile.lock +33 -31
  13. data/README.md +39 -7
  14. data/RELEASING.md +5 -27
  15. data/Rakefile +32 -28
  16. data/bin/load_shopify.rb +6 -6
  17. data/bin/shopify +2 -2
  18. data/dev.yml +2 -2
  19. data/docs/_config.yml +1 -18
  20. data/docs/app/node/commands/index.md +2 -80
  21. data/docs/app/node/index.md +2 -33
  22. data/docs/app/rails/commands/index.md +2 -78
  23. data/docs/app/rails/index.md +2 -34
  24. data/docs/core/index.md +2 -84
  25. data/docs/getting-started/index.md +2 -25
  26. data/docs/getting-started/install/index.md +1 -118
  27. data/docs/getting-started/migrate/index.md +2 -94
  28. data/docs/getting-started/uninstall/index.md +2 -35
  29. data/docs/getting-started/upgrade/index.md +2 -39
  30. data/docs/help/start-app/index.md +2 -4
  31. data/docs/index.md +2 -24
  32. data/ext/shopify-cli/extconf.rb +7 -7
  33. data/install.sh +1 -1
  34. data/lib/docgen/markdown.rb +11 -11
  35. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  36. data/lib/project_types/extension/cli.rb +64 -47
  37. data/lib/project_types/extension/commands/build.rb +3 -3
  38. data/lib/project_types/extension/commands/create.rb +16 -9
  39. data/lib/project_types/extension/commands/extension_command.rb +8 -5
  40. data/lib/project_types/extension/commands/push.rb +8 -8
  41. data/lib/project_types/extension/commands/register.rb +19 -30
  42. data/lib/project_types/extension/commands/serve.rb +23 -3
  43. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  44. data/lib/project_types/extension/extension_project.rb +4 -4
  45. data/lib/project_types/extension/extension_project_keys.rb +4 -4
  46. data/lib/project_types/extension/features/argo.rb +117 -0
  47. data/lib/project_types/extension/features/argo_config.rb +5 -5
  48. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  49. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  50. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  51. data/lib/project_types/extension/forms/create.rb +28 -34
  52. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  53. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  54. data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
  55. data/lib/project_types/extension/messages/messages.rb +53 -52
  56. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  57. data/lib/project_types/extension/models/specification.rb +35 -0
  58. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +19 -0
  59. data/lib/project_types/extension/models/specification_handlers/default.rb +67 -0
  60. data/lib/project_types/extension/models/specifications.rb +77 -0
  61. data/lib/project_types/extension/tasks/configure_features.rb +52 -0
  62. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  63. data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
  64. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  65. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  66. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  67. data/lib/project_types/extension/tasks/fetch_specifications.rb +38 -0
  68. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  69. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  70. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  71. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  72. data/lib/project_types/node/cli.rb +19 -16
  73. data/lib/project_types/node/commands/connect.rb +15 -0
  74. data/lib/project_types/node/commands/create.rb +44 -41
  75. data/lib/project_types/node/commands/deploy.rb +4 -4
  76. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  77. data/lib/project_types/node/commands/generate.rb +9 -18
  78. data/lib/project_types/node/commands/open.rb +2 -2
  79. data/lib/project_types/node/commands/populate.rb +6 -6
  80. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  81. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  82. data/lib/project_types/node/commands/populate/product.rb +5 -5
  83. data/lib/project_types/node/commands/serve.rb +9 -9
  84. data/lib/project_types/node/commands/tunnel.rb +7 -7
  85. data/lib/project_types/node/forms/create.rb +7 -7
  86. data/lib/project_types/node/messages/messages.rb +19 -53
  87. data/lib/project_types/rails/cli.rb +21 -18
  88. data/lib/project_types/rails/commands/connect.rb +15 -0
  89. data/lib/project_types/rails/commands/create.rb +58 -57
  90. data/lib/project_types/rails/commands/deploy.rb +4 -4
  91. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  92. data/lib/project_types/rails/commands/generate.rb +7 -7
  93. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  94. data/lib/project_types/rails/commands/open.rb +2 -2
  95. data/lib/project_types/rails/commands/populate.rb +6 -6
  96. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  97. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  98. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  99. data/lib/project_types/rails/commands/serve.rb +11 -11
  100. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  101. data/lib/project_types/rails/forms/create.rb +24 -24
  102. data/lib/project_types/rails/gem.rb +24 -24
  103. data/lib/project_types/rails/messages/messages.rb +12 -9
  104. data/lib/project_types/rails/ruby.rb +2 -2
  105. data/lib/project_types/script/cli.rb +44 -38
  106. data/lib/project_types/script/commands/create.rb +15 -10
  107. data/lib/project_types/script/commands/disable.rb +3 -3
  108. data/lib/project_types/script/commands/enable.rb +19 -9
  109. data/lib/project_types/script/commands/push.rb +10 -17
  110. data/lib/project_types/script/config/extension_points.yml +17 -12
  111. data/lib/project_types/script/errors.rb +22 -0
  112. data/lib/project_types/script/forms/create.rb +29 -5
  113. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +12 -1
  114. data/lib/project_types/script/layers/application/build_script.rb +19 -19
  115. data/lib/project_types/script/layers/application/create_script.rb +41 -12
  116. data/lib/project_types/script/layers/application/disable_script.rb +2 -2
  117. data/lib/project_types/script/layers/application/enable_script.rb +2 -2
  118. data/lib/project_types/script/layers/application/extension_points.rb +24 -0
  119. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  120. data/lib/project_types/script/layers/application/push_script.rb +15 -18
  121. data/lib/project_types/script/layers/domain/config_ui.rb +16 -0
  122. data/lib/project_types/script/layers/domain/errors.rb +23 -0
  123. data/lib/project_types/script/layers/domain/extension_point.rb +62 -7
  124. data/lib/project_types/script/layers/domain/metadata.rb +55 -0
  125. data/lib/project_types/script/layers/domain/push_package.rb +29 -6
  126. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +19 -55
  127. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +49 -18
  128. data/lib/project_types/script/layers/infrastructure/config_ui_repository.rb +46 -0
  129. data/lib/project_types/script/layers/infrastructure/errors.rb +37 -1
  130. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +12 -6
  131. data/lib/project_types/script/layers/infrastructure/project_creator.rb +2 -1
  132. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +20 -13
  133. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +72 -0
  134. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +59 -0
  135. data/lib/project_types/script/layers/infrastructure/script_service.rb +39 -17
  136. data/lib/project_types/script/layers/infrastructure/task_runner.rb +4 -3
  137. data/lib/project_types/script/messages/messages.rb +79 -10
  138. data/lib/project_types/script/script_project.rb +26 -16
  139. data/lib/project_types/script/ui/error_handler.rb +141 -45
  140. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  141. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  142. data/lib/project_types/theme/cli.rb +40 -0
  143. data/lib/project_types/theme/commands/connect.rb +54 -0
  144. data/lib/project_types/theme/commands/create.rb +48 -0
  145. data/lib/project_types/theme/commands/deploy.rb +38 -0
  146. data/lib/project_types/theme/commands/generate.rb +20 -0
  147. data/lib/project_types/theme/commands/generate/env.rb +79 -0
  148. data/lib/project_types/theme/commands/push.rb +55 -0
  149. data/lib/project_types/theme/commands/serve.rb +31 -0
  150. data/lib/project_types/theme/forms/connect.rb +34 -0
  151. data/lib/project_types/theme/forms/create.rb +22 -0
  152. data/lib/project_types/theme/messages/messages.rb +147 -0
  153. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +78 -0
  154. data/lib/project_types/theme/themekit.rb +113 -0
  155. data/lib/rubygems_plugin.rb +3 -3
  156. data/lib/shopify-cli/admin_api.rb +52 -12
  157. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  158. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  159. data/lib/shopify-cli/api.rb +36 -31
  160. data/lib/shopify-cli/command.rb +1 -1
  161. data/lib/shopify-cli/commands.rb +9 -9
  162. data/lib/shopify-cli/commands/config.rb +28 -28
  163. data/lib/shopify-cli/commands/connect.rb +35 -18
  164. data/lib/shopify-cli/commands/create.rb +5 -5
  165. data/lib/shopify-cli/commands/help.rb +6 -6
  166. data/lib/shopify-cli/commands/logout.rb +3 -3
  167. data/lib/shopify-cli/commands/system.rb +33 -33
  168. data/lib/shopify-cli/commands/version.rb +2 -2
  169. data/lib/shopify-cli/context.rb +43 -22
  170. data/lib/shopify-cli/core.rb +4 -4
  171. data/lib/shopify-cli/core/entry_point.rb +5 -5
  172. data/lib/shopify-cli/core/executor.rb +1 -1
  173. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  174. data/lib/shopify-cli/core/monorail.rb +21 -19
  175. data/lib/shopify-cli/db.rb +2 -2
  176. data/lib/shopify-cli/feature.rb +1 -3
  177. data/lib/shopify-cli/form.rb +1 -1
  178. data/lib/shopify-cli/git.rb +17 -17
  179. data/lib/shopify-cli/helpers.rb +1 -1
  180. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  181. data/lib/shopify-cli/heroku.rb +28 -28
  182. data/lib/shopify-cli/http_request.rb +21 -9
  183. data/lib/shopify-cli/js_deps.rb +13 -13
  184. data/lib/shopify-cli/js_system.rb +5 -5
  185. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  186. data/lib/shopify-cli/messages/messages.rb +21 -10
  187. data/lib/shopify-cli/method_object.rb +104 -0
  188. data/lib/shopify-cli/oauth.rb +25 -25
  189. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  190. data/lib/shopify-cli/options.rb +3 -3
  191. data/lib/shopify-cli/packager.rb +24 -24
  192. data/lib/shopify-cli/partners_api.rb +38 -16
  193. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  194. data/lib/shopify-cli/process_supervision.rb +8 -8
  195. data/lib/shopify-cli/project.rb +27 -23
  196. data/lib/shopify-cli/project_type.rb +21 -5
  197. data/lib/shopify-cli/resolve_constant.rb +25 -0
  198. data/lib/shopify-cli/resources.rb +1 -1
  199. data/lib/shopify-cli/resources/env_file.rb +9 -9
  200. data/lib/shopify-cli/result.rb +432 -0
  201. data/lib/shopify-cli/shopifolk.rb +35 -18
  202. data/lib/shopify-cli/sub_command.rb +1 -1
  203. data/lib/shopify-cli/task.rb +9 -1
  204. data/lib/shopify-cli/tasks.rb +7 -7
  205. data/lib/shopify-cli/tasks/create_api_client.rb +17 -6
  206. data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
  207. data/lib/shopify-cli/tasks/ensure_env.rb +18 -15
  208. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  209. data/lib/shopify-cli/tasks/select_org_and_shop.rb +29 -24
  210. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  211. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  212. data/lib/shopify-cli/tunnel.rb +36 -30
  213. data/lib/shopify-cli/version.rb +1 -1
  214. data/lib/shopify_cli.rb +57 -52
  215. data/shopify-cli.gemspec +6 -6
  216. data/shopify.fish +1 -1
  217. data/shopify.sh +1 -1
  218. data/vendor/deps/cli-kit/REVISION +1 -1
  219. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +2 -2
  220. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +3 -3
  221. data/vendor/deps/cli-ui/REVISION +1 -1
  222. data/vendor/deps/cli-ui/lib/cli/ui.rb +26 -22
  223. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +4 -6
  224. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -3
  225. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +8 -9
  226. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -1
  227. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +1 -0
  228. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +15 -3
  229. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +4 -11
  230. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -5
  231. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +10 -10
  232. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +1 -1
  233. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +56 -0
  234. data/vendor/deps/webrick/.gitignore +9 -0
  235. data/vendor/deps/webrick/Gemfile +3 -0
  236. data/vendor/deps/webrick/LICENSE.txt +22 -0
  237. data/vendor/deps/webrick/README.md +61 -0
  238. data/vendor/deps/webrick/Rakefile +10 -0
  239. data/vendor/deps/webrick/lib/webrick.rb +232 -0
  240. data/vendor/deps/webrick/lib/webrick/accesslog.rb +157 -0
  241. data/vendor/deps/webrick/lib/webrick/cgi.rb +313 -0
  242. data/vendor/deps/webrick/lib/webrick/compat.rb +36 -0
  243. data/vendor/deps/webrick/lib/webrick/config.rb +158 -0
  244. data/vendor/deps/webrick/lib/webrick/cookie.rb +172 -0
  245. data/vendor/deps/webrick/lib/webrick/htmlutils.rb +30 -0
  246. data/vendor/deps/webrick/lib/webrick/httpauth.rb +96 -0
  247. data/vendor/deps/webrick/lib/webrick/httpauth/authenticator.rb +117 -0
  248. data/vendor/deps/webrick/lib/webrick/httpauth/basicauth.rb +116 -0
  249. data/vendor/deps/webrick/lib/webrick/httpauth/digestauth.rb +395 -0
  250. data/vendor/deps/webrick/lib/webrick/httpauth/htdigest.rb +132 -0
  251. data/vendor/deps/webrick/lib/webrick/httpauth/htgroup.rb +97 -0
  252. data/vendor/deps/webrick/lib/webrick/httpauth/htpasswd.rb +158 -0
  253. data/vendor/deps/webrick/lib/webrick/httpauth/userdb.rb +53 -0
  254. data/vendor/deps/webrick/lib/webrick/httpproxy.rb +354 -0
  255. data/vendor/deps/webrick/lib/webrick/httprequest.rb +636 -0
  256. data/vendor/deps/webrick/lib/webrick/httpresponse.rb +564 -0
  257. data/vendor/deps/webrick/lib/webrick/https.rb +152 -0
  258. data/vendor/deps/webrick/lib/webrick/httpserver.rb +294 -0
  259. data/vendor/deps/webrick/lib/webrick/httpservlet.rb +23 -0
  260. data/vendor/deps/webrick/lib/webrick/httpservlet/abstract.rb +152 -0
  261. data/vendor/deps/webrick/lib/webrick/httpservlet/cgi_runner.rb +47 -0
  262. data/vendor/deps/webrick/lib/webrick/httpservlet/cgihandler.rb +126 -0
  263. data/vendor/deps/webrick/lib/webrick/httpservlet/erbhandler.rb +88 -0
  264. data/vendor/deps/webrick/lib/webrick/httpservlet/filehandler.rb +552 -0
  265. data/vendor/deps/webrick/lib/webrick/httpservlet/prochandler.rb +47 -0
  266. data/vendor/deps/webrick/lib/webrick/httpstatus.rb +194 -0
  267. data/vendor/deps/webrick/lib/webrick/httputils.rb +512 -0
  268. data/vendor/deps/webrick/lib/webrick/httpversion.rb +76 -0
  269. data/vendor/deps/webrick/lib/webrick/log.rb +156 -0
  270. data/vendor/deps/webrick/lib/webrick/server.rb +381 -0
  271. data/vendor/deps/webrick/lib/webrick/ssl.rb +215 -0
  272. data/vendor/deps/webrick/lib/webrick/utils.rb +265 -0
  273. data/vendor/deps/webrick/lib/webrick/version.rb +18 -0
  274. data/vendor/deps/webrick/webrick.gemspec +74 -0
  275. data/vendor/gen/template/bin/update-deps +9 -9
  276. metadata +83 -29
  277. data/docs/Gemfile +0 -5
  278. data/docs/Gemfile.lock +0 -258
  279. data/docs/_data/nav.yml +0 -35
  280. data/docs/_includes/footer.html +0 -15
  281. data/docs/_includes/head.html +0 -19
  282. data/docs/_includes/sidebar_nav.html +0 -22
  283. data/docs/_includes/toc.html +0 -112
  284. data/docs/_layouts/default.html +0 -79
  285. data/docs/css/docs.css +0 -157
  286. data/docs/images/header.png +0 -0
  287. data/docs/installing-ruby.md +0 -28
  288. data/lib/project_types/extension/features/argo/admin.rb +0 -20
  289. data/lib/project_types/extension/features/argo/base.rb +0 -129
  290. data/lib/project_types/extension/features/argo/checkout.rb +0 -20
  291. data/lib/project_types/extension/forms/register.rb +0 -47
  292. data/lib/project_types/extension/models/type.rb +0 -81
  293. data/lib/project_types/extension/models/types/checkout_post_purchase.rb +0 -23
  294. data/lib/project_types/extension/models/types/product_subscription.rb +0 -24
  295. data/lib/project_types/node/commands/generate/billing.rb +0 -39
  296. data/lib/project_types/node/commands/generate/page.rb +0 -59
  297. data/lib/project_types/node/commands/generate/webhook.rb +0 -37
  298. data/lib/project_types/script/layers/domain/script.rb +0 -18
  299. data/lib/project_types/script/layers/infrastructure/assemblyscript_tsconfig.rb +0 -38
  300. data/lib/project_types/script/layers/infrastructure/script_repository.rb +0 -59
  301. data/lib/project_types/script/templates/ts/as-pect.config.js +0 -27
  302. data/lib/project_types/script/templates/ts/as-pect.d.ts +0 -1
@@ -5,15 +5,15 @@ module Node
5
5
  prerequisite_task :ensure_env, :ensure_dev_store
6
6
 
7
7
  options do |parser, flags|
8
- parser.on('--host=HOST') do |h|
9
- flags[:host] = h.gsub('"', '')
8
+ parser.on("--host=HOST") do |h|
9
+ flags[:host] = h.gsub('"', "")
10
10
  end
11
11
  end
12
12
 
13
13
  def call(*)
14
14
  project = ShopifyCli::Project.current
15
15
  url = options.flags[:host] || ShopifyCli::Tunnel.start(@ctx)
16
- @ctx.abort(@ctx.message('node.serve.error.host_must_be_https')) if url.match(/^https/i).nil?
16
+ @ctx.abort(@ctx.message("node.serve.error.host_must_be_https")) if url.match(/^https/i).nil?
17
17
  project.env.update(@ctx, :host, url)
18
18
  ShopifyCli::Tasks::UpdateDashboardURLS.call(
19
19
  @ctx,
@@ -23,22 +23,22 @@ module Node
23
23
 
24
24
  if project.env.shop
25
25
  project_url = "#{project.env.host}/auth?shop=#{project.env.shop}"
26
- @ctx.puts("\n" + @ctx.message('node.serve.open_info', project_url) + "\n")
26
+ @ctx.puts("\n" + @ctx.message("node.serve.open_info", project_url) + "\n")
27
27
  end
28
28
 
29
- CLI::UI::Frame.open(@ctx.message('node.serve.running_server')) do
29
+ CLI::UI::Frame.open(@ctx.message("node.serve.running_server")) do
30
30
  env = project.env.to_h
31
- env['PORT'] = ShopifyCli::Tunnel::PORT.to_s
32
- @ctx.system('npm run dev', env: env)
31
+ env["PORT"] = ShopifyCli::Tunnel::PORT.to_s
32
+ @ctx.system("npm run dev", env: env)
33
33
  end
34
34
  end
35
35
 
36
36
  def self.help
37
- ShopifyCli::Context.message('node.serve.help', ShopifyCli::TOOL_NAME)
37
+ ShopifyCli::Context.message("node.serve.help", ShopifyCli::TOOL_NAME)
38
38
  end
39
39
 
40
40
  def self.extended_help
41
- ShopifyCli::Context.message('node.serve.extended_help')
41
+ ShopifyCli::Context.message("node.serve.extended_help")
42
42
  end
43
43
  end
44
44
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'shopify_cli'
3
+ require "shopify_cli"
4
4
 
5
5
  module Node
6
6
  module Commands
@@ -10,17 +10,17 @@ module Node
10
10
  def call(args, _name)
11
11
  subcommand = args.shift
12
12
  case subcommand
13
- when 'auth'
13
+ when "auth"
14
14
  token = args.shift
15
15
  if token.nil?
16
- @ctx.puts(@ctx.message('node.tunnel.error.token_argument_missing'))
16
+ @ctx.puts(@ctx.message("node.tunnel.error.token_argument_missing"))
17
17
  @ctx.puts("#{self.class.help}\n#{self.class.extended_help}")
18
18
  else
19
19
  ShopifyCli::Tunnel.auth(@ctx, token)
20
20
  end
21
- when 'start'
21
+ when "start"
22
22
  ShopifyCli::Tunnel.start(@ctx)
23
- when 'stop'
23
+ when "stop"
24
24
  ShopifyCli::Tunnel.stop(@ctx)
25
25
  else
26
26
  @ctx.puts(self.class.help)
@@ -28,11 +28,11 @@ module Node
28
28
  end
29
29
 
30
30
  def self.help
31
- ShopifyCli::Context.message('node.tunnel.help', ShopifyCli::TOOL_NAME)
31
+ ShopifyCli::Context.message("node.tunnel.help", ShopifyCli::TOOL_NAME)
32
32
  end
33
33
 
34
34
  def self.extended_help
35
- ShopifyCli::Context.message('node.tunnel.extended_help', ShopifyCli::TOOL_NAME)
35
+ ShopifyCli::Context.message("node.tunnel.extended_help", ShopifyCli::TOOL_NAME)
36
36
  end
37
37
  end
38
38
  end
@@ -1,4 +1,4 @@
1
- require 'uri'
1
+ require "uri"
2
2
 
3
3
  module Node
4
4
  module Forms
@@ -7,7 +7,7 @@ module Node
7
7
  flag_arguments :title, :organization_id, :shop_domain, :type
8
8
 
9
9
  def ask
10
- self.title ||= CLI::UI::Prompt.ask(ctx.message('node.forms.create.app_name'))
10
+ self.title ||= CLI::UI::Prompt.ask(ctx.message("node.forms.create.app_name"))
11
11
  self.type = ask_type
12
12
  self.name = self.title.downcase.split(" ").join("_")
13
13
  res = ShopifyCli::Tasks::SelectOrgAndShop.call(ctx, organization_id: organization_id, shop_domain: shop_domain)
@@ -19,16 +19,16 @@ module Node
19
19
 
20
20
  def ask_type
21
21
  if type.nil?
22
- return CLI::UI::Prompt.ask(ctx.message('node.forms.create.app_type.select')) do |handler|
23
- handler.option(ctx.message('node.forms.create.app_type.select_public')) { 'public' }
24
- handler.option(ctx.message('node.forms.create.app_type.select_custom')) { 'custom' }
22
+ return CLI::UI::Prompt.ask(ctx.message("node.forms.create.app_type.select")) do |handler|
23
+ handler.option(ctx.message("node.forms.create.app_type.select_public")) { "public" }
24
+ handler.option(ctx.message("node.forms.create.app_type.select_custom")) { "custom" }
25
25
  end
26
26
  end
27
27
 
28
28
  unless ShopifyCli::Tasks::CreateApiClient::VALID_APP_TYPES.include?(type)
29
- ctx.abort(ctx.message('node.forms.create.error.invalid_app_type', type))
29
+ ctx.abort(ctx.message("node.forms.create.error.invalid_app_type", type))
30
30
  end
31
- ctx.puts(ctx.message('node.forms.create.app_type.selected', type))
31
+ ctx.puts(ctx.message("node.forms.create.app_type.selected", type))
32
32
  type
33
33
  end
34
34
  end
@@ -8,15 +8,22 @@ module Node
8
8
  generic: "Error",
9
9
  },
10
10
 
11
+ connect: {
12
+ connected: "Project now connected to {{green:%s}}",
13
+ production_warning: <<~MESSAGE,
14
+ {{yellow:! Warning: if you have connected to an {{bold:app in production}}, running {{command:serve}} may update the app URL and cause an outage.
15
+ MESSAGE
16
+ },
17
+
11
18
  create: {
12
19
  help: <<~HELP,
13
20
  {{command:%s create node}}: Creates an embedded nodejs app.
14
21
  Usage: {{command:%s create node}}
15
22
  Options:
16
23
  {{command:--name=NAME}} App name. Any string.
17
- {{command:--app_url=APPURL}} App URL. Must be a valid URL.
18
- {{command:--organization_id=ID}} Partner organization ID. Must be an existing organization.
19
- {{command:--shop_domain=MYSHOPIFYDOMAIN }} Development store URL. Must be an existing development store.
24
+ {{command:--app-url=APPURL}} App URL. Must be a valid URL.
25
+ {{command:--organization-id=ID}} Partner organization ID. Must be an existing organization.
26
+ {{command:--shop-domain=MYSHOPIFYDOMAIN }} Development store URL. Must be an existing development store.
20
27
  HELP
21
28
  error: {
22
29
  node_required: "node is required to create an app project. Download at https://nodejs.org/en/download.",
@@ -26,12 +33,6 @@ module Node
26
33
  npm_version_failure: "Failed to get the current npm version. Please make sure it is installed as per " \
27
34
  "the instructions at https://www.npmjs.com/get-npm.",
28
35
  },
29
- info: {
30
- created: "{{v}} {{green:%s}} was created in your Partner Dashboard {{underline:%s}}",
31
- serve: "{{*}} Change directories to your new project folder {{green:%s}} and run {{command:%s serve}} " \
32
- "to start a local server",
33
- install: "{{*}} Then, visit {{underline:%s/test}} to install {{green:%s}} on your Dev Store",
34
- },
35
36
  node_version: "node %s",
36
37
  npm_version: "npm %s",
37
38
  },
@@ -82,52 +83,17 @@ module Node
82
83
 
83
84
  generate: {
84
85
  help: <<~HELP,
85
- Generate code in your Node project. Supports generating new billing API calls, new pages, or new webhooks.
86
- Usage: {{command:%s generate [ billing | page | webhook ]}}
87
- HELP
88
- extended_help: <<~EXAMPLES,
89
- {{bold:Examples:}}
90
- {{cyan:%s generate webhook PRODUCTS_CREATE}}
91
- Generate and register a new webhook that will be called every time a new product is created on your store.
92
- EXAMPLES
93
-
94
- error: {
95
- name_exists: "%s already exists!",
96
- generic: "Error generating %s",
97
- },
98
-
99
- billing: {
100
- help: <<~HELP,
101
- Enable charging for your app. This command generates the necessary code to call Shopify’s billing API.
102
- Usage: {{command:%s generate billing [ one-time-billing | recurring-billing ]}}
103
- HELP
104
- type_select: "How would you like to charge for your app?",
105
- generating: "Generating %s code ...",
106
- generated: "{{green:%s}} generated in server/server.js",
107
- },
86
+ {{red:The {{command:generate}} command is no longer supported.}}
87
+ You can complete any tasks previously supported by {{command:generate}} with these guides:
88
+ {{green:page}}
89
+ Create a page with Polaris design components: {{green:https://shopify.dev/tutorials/build-a-shopify-app-with-node-and-react/build-your-user-interface-with-polaris}}
108
90
 
109
- page: {
110
- help: <<~HELP,
111
- Generate a new page in your app with the specified name. New files are generated inside the project’s “/pages” directory.
112
- Usage: {{command:%s generate page <pagename>}}
113
- HELP
114
- error: {
115
- invalid_page_type: "Invalid page type.",
116
- },
117
- type_select: "Which template would you like to use?",
118
- generating: "Generating %s page...",
119
- generated: "{{green: %s}} generated in pages/%s",
120
- },
91
+ {{green:webhook}}
92
+ Register and process webhooks: {{green:https://github.com/Shopify/shopify-node-api/blob/main/docs/usage/webhooks.md}}
121
93
 
122
- webhook: {
123
- help: <<~HELP,
124
- Generate and register a new webhook that listens for the specified Shopify store event.
125
- Usage: {{command:%s generate webhook <type>}}
126
- HELP
127
- type_select: "What type of webhook would you like to create?",
128
- generating: "Generating webhook: %s",
129
- generated: "{{green:%s}} generated in server/server.js",
130
- },
94
+ {{green:billing}}
95
+ Create and manage app billing models: {{green:https://shopify.dev/tutorials/bill-for-your-app-using-graphql-admin-api}}
96
+ HELP
131
97
  },
132
98
 
133
99
  open: {
@@ -1,29 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
  module Rails
3
3
  class Project < ShopifyCli::ProjectType
4
- creator 'Ruby on Rails App', 'Rails::Commands::Create'
4
+ title("Ruby on Rails App")
5
+ creator("Rails::Commands::Create")
6
+ connector("Rails::Commands::Connect")
5
7
 
6
- register_command('Rails::Commands::Deploy', "deploy")
7
- register_command('Rails::Commands::Generate', "generate")
8
- register_command('Rails::Commands::Open', "open")
9
- register_command('Rails::Commands::Populate', "populate")
10
- register_command('Rails::Commands::Serve', "serve")
11
- register_command('Rails::Commands::Tunnel', "tunnel")
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")
12
14
  # register_task('Rails::Tasks::RailsTask', 'rails_task')
13
15
 
14
- require Project.project_filepath('messages/messages')
16
+ require Project.project_filepath("messages/messages")
15
17
  register_messages(Rails::Messages::MESSAGES)
16
18
  end
17
19
 
18
20
  # define/autoload project specific Commands
19
21
  module Commands
20
- autoload :Create, Project.project_filepath('commands/create')
21
- autoload :Deploy, Project.project_filepath('commands/deploy')
22
- autoload :Generate, Project.project_filepath('commands/generate')
23
- autoload :Open, Project.project_filepath('commands/open')
24
- autoload :Populate, Project.project_filepath('commands/populate')
25
- autoload :Serve, Project.project_filepath('commands/serve')
26
- autoload :Tunnel, Project.project_filepath('commands/tunnel')
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")
27
30
  end
28
31
 
29
32
  # define/autoload project specific Tasks
@@ -32,9 +35,9 @@ module Rails
32
35
 
33
36
  # define/autoload project specific Forms
34
37
  module Forms
35
- autoload :Create, Project.project_filepath('forms/create')
38
+ autoload :Create, Project.project_filepath("forms/create")
36
39
  end
37
40
 
38
- autoload :Ruby, Project.project_filepath('ruby')
39
- autoload :Gem, Project.project_filepath('gem')
41
+ autoload :Ruby, Project.project_filepath("ruby")
42
+ autoload :Gem, Project.project_filepath("gem")
40
43
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+ module Rails
3
+ module Commands
4
+ class Connect < ShopifyCli::SubCommand
5
+ def call(*)
6
+ if ShopifyCli::Project.has_current? && ShopifyCli::Project.current.env
7
+ @ctx.puts(@ctx.message("rails.connect.production_warning"))
8
+ end
9
+
10
+ app = ShopifyCli::Commands::Connect.new.default_connect("rails")
11
+ @ctx.done(@ctx.message("rails.connect.connected", app))
12
+ end
13
+ end
14
+ end
15
+ end
@@ -14,21 +14,25 @@ module Rails
14
14
 
15
15
  options do |parser, flags|
16
16
  # backwards compatibility allow 'title' for now
17
- parser.on('--title=TITLE') { |t| flags[:title] = t }
18
- parser.on('--name=NAME') { |t| flags[:title] = t }
19
- parser.on('--organization_id=ID') { |url| flags[:organization_id] = url }
20
- parser.on('--shop_domain=MYSHOPIFYDOMAIN') { |url| flags[:shop_domain] = url }
21
- parser.on('--type=APPTYPE') { |url| flags[:type] = url }
22
- parser.on('--db=DB') { |db| flags[:db] = db }
23
- parser.on('--rails_opts=RAILSOPTS') { |opts| flags[:rails_opts] = opts }
17
+ parser.on("--title=TITLE") { |t| flags[:title] = t }
18
+ 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("--shop_domain=MYSHOPIFYDOMAIN") { |url| flags[:shop_domain] = url }
22
+ parser.on("--shop-domain=MYSHOPIFYDOMAIN") { |url| flags[:shop_domain] = url }
23
+ parser.on("--type=APPTYPE") { |url| flags[:type] = url }
24
+ parser.on("--db=DB") { |db| flags[:db] = db }
25
+ parser.on("--rails_opts=RAILSOPTS") { |opts| flags[:rails_opts] = opts }
26
+ parser.on("--rails-opts=RAILSOPTS") { |opts| flags[:rails_opts] = opts }
24
27
  end
25
28
 
26
29
  def call(args, _name)
27
30
  form = Forms::Create.ask(@ctx, args, options.flags)
28
31
  return @ctx.puts(self.class.help) if form.nil?
29
32
 
30
- @ctx.abort(@ctx.message('rails.create.error.invalid_ruby_version')) unless
31
- Ruby.version(@ctx).satisfies?('~>2.5')
33
+ ruby_version = Ruby.version(@ctx)
34
+ @ctx.abort(@ctx.message("rails.create.error.invalid_ruby_version")) unless
35
+ ruby_version.satisfies?("~>2.5") || ruby_version.satisfies?("~>3.0.0")
32
36
 
33
37
  check_node
34
38
  check_yarn
@@ -37,7 +41,7 @@ module Rails
37
41
  set_custom_ua
38
42
  ShopifyCli::Project.write(
39
43
  @ctx,
40
- project_type: 'rails',
44
+ project_type: "rails",
41
45
  organization_id: form.organization_id,
42
46
  )
43
47
 
@@ -52,72 +56,74 @@ module Rails
52
56
  api_key: api_client["apiKey"],
53
57
  secret: api_client["apiSecretKeys"].first["secret"],
54
58
  shop: form.shop_domain,
55
- scopes: 'write_products,write_customers,write_draft_orders',
59
+ scopes: "write_products,write_customers,write_draft_orders",
56
60
  ).write(@ctx)
57
61
 
58
- partners_url = "#{partners_endpoint}/#{form.organization_id}/apps/#{api_client['id']}"
62
+ partners_url = ShopifyCli::PartnersAPI.partners_url_for(form.organization_id, api_client["id"], local_debug?)
59
63
 
60
- @ctx.puts(@ctx.message('rails.create.info.created', form.title, partners_url))
61
- @ctx.puts(@ctx.message('rails.create.info.serve', form.name, ShopifyCli::TOOL_NAME))
62
- @ctx.puts(@ctx.message('rails.create.info.install', partners_url, form.title))
64
+ @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))
66
+ unless ShopifyCli::Shopifolk.acting_as_shopify_organization?
67
+ @ctx.puts(@ctx.message("apps.create.info.install", partners_url, form.title))
68
+ end
63
69
  end
64
70
 
65
71
  def self.help
66
- ShopifyCli::Context.message('rails.create.help', ShopifyCli::TOOL_NAME, ShopifyCli::TOOL_NAME)
72
+ ShopifyCli::Context.message("rails.create.help", ShopifyCli::TOOL_NAME, ShopifyCli::TOOL_NAME)
67
73
  end
68
74
 
69
75
  private
70
76
 
71
77
  def check_node
72
- cmd_path = @ctx.which('node')
78
+ cmd_path = @ctx.which("node")
73
79
  if cmd_path.nil?
74
- @ctx.abort(@ctx.message('rails.create.error.node_required')) unless @ctx.windows?
75
- @ctx.puts("{{x}} {{red:" + @ctx.message('rails.create.error.node_required') + "}}")
76
- @ctx.puts(@ctx.message('rails.create.info.open_new_shell', 'node'))
80
+ @ctx.abort(@ctx.message("rails.create.error.node_required")) unless @ctx.windows?
81
+ @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.node_required") + "}}")
82
+ @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "node"))
77
83
  raise ShopifyCli::AbortSilent
78
84
  end
79
85
 
80
- version, stat = @ctx.capture2e('node', '-v')
86
+ version, stat = @ctx.capture2e("node", "-v")
81
87
  unless stat.success?
82
- @ctx.abort(@ctx.message('rails.create.error.node_version_failure')) unless @ctx.windows?
88
+ @ctx.abort(@ctx.message("rails.create.error.node_version_failure")) unless @ctx.windows?
83
89
  # execution stops above if not Windows
84
- @ctx.puts("{{x}} {{red:" + @ctx.message('rails.create.error.node_version_failure') + "}}")
85
- @ctx.puts(@ctx.message('rails.create.info.open_new_shell', 'node'))
90
+ @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.node_version_failure") + "}}")
91
+ @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "node"))
86
92
  raise ShopifyCli::AbortSilent
87
93
  end
88
94
 
89
- @ctx.done(@ctx.message('rails.create.node_version', version))
95
+ @ctx.done(@ctx.message("rails.create.node_version", version))
90
96
  end
91
97
 
92
98
  def check_yarn
93
- cmd_path = @ctx.which('yarn')
99
+ cmd_path = @ctx.which("yarn")
94
100
  if cmd_path.nil?
95
- @ctx.abort(@ctx.message('rails.create.error.yarn_required')) unless @ctx.windows?
96
- @ctx.puts("{{x}} {{red:" + @ctx.message('rails.create.error.yarn_required') + "}}")
97
- @ctx.puts(@ctx.message('rails.create.info.open_new_shell', 'yarn'))
101
+ @ctx.abort(@ctx.message("rails.create.error.yarn_required")) unless @ctx.windows?
102
+ @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.yarn_required") + "}}")
103
+ @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "yarn"))
98
104
  raise ShopifyCli::AbortSilent
99
105
  end
100
106
 
101
- version, stat = @ctx.capture2e('yarn', '-v')
107
+ version, stat = @ctx.capture2e("yarn", "-v")
102
108
  unless stat.success?
103
- @ctx.abort(@ctx.message('rails.create.error.yarn_version_failure')) unless @ctx.windows?
104
- @ctx.puts("{{x}} {{red:" + @ctx.message('rails.create.error.yarn_version_failure') + "}}")
105
- @ctx.puts(@ctx.message('rails.create.info.open_new_shell', 'yarn'))
109
+ @ctx.abort(@ctx.message("rails.create.error.yarn_version_failure")) unless @ctx.windows?
110
+ @ctx.puts("{{x}} {{red:" + @ctx.message("rails.create.error.yarn_version_failure") + "}}")
111
+ @ctx.puts(@ctx.message("rails.create.info.open_new_shell", "yarn"))
106
112
  raise ShopifyCli::AbortSilent
107
113
  end
108
114
 
109
- @ctx.done(@ctx.message('rails.create.yarn_version', version))
115
+ @ctx.done(@ctx.message("rails.create.yarn_version", version))
110
116
  end
111
117
 
112
118
  def build(name, db)
113
- @ctx.abort(@ctx.message('rails.create.error.install_failure', 'rails')) unless install_gem('rails')
114
- @ctx.abort(@ctx.message('rails.create.error.install_failure', 'bundler ~>2.0')) unless
115
- install_gem('bundler', '~>2.0')
119
+ @ctx.abort(@ctx.message("rails.create.error.install_failure", "rails")) unless install_gem("rails", "<6.1")
120
+ @ctx.abort(@ctx.message("rails.create.error.install_failure", "bundler ~>2.0")) unless
121
+ install_gem("bundler", "~>2.0")
116
122
 
117
123
  full_path = File.join(@ctx.root, name)
118
- @ctx.abort(@ctx.message('rails.create.error.dir_exists', name)) if Dir.exist?(full_path)
124
+ @ctx.abort(@ctx.message("rails.create.error.dir_exists", name)) if Dir.exist?(full_path)
119
125
 
120
- CLI::UI::Frame.open(@ctx.message('rails.create.generating_app', name)) do
126
+ CLI::UI::Frame.open(@ctx.message("rails.create.generating_app", name)) do
121
127
  new_command = %w(rails new)
122
128
  new_command += DEFAULT_RAILS_FLAGS
123
129
  new_command << "--database=#{db}"
@@ -129,38 +135,34 @@ module Rails
129
135
 
130
136
  @ctx.root = full_path
131
137
 
132
- File.open(File.join(@ctx.root, '.gitignore'), 'a') { |f| f.write('.env') }
138
+ File.open(File.join(@ctx.root, ".gitignore"), "a") { |f| f.write(".env") }
133
139
 
134
- @ctx.puts(@ctx.message('rails.create.adding_shopify_gem'))
135
- File.open(File.join(@ctx.root, 'Gemfile'), 'a') do |f|
136
- f.puts "\ngem 'shopify_app', '>=11.3.0'"
140
+ @ctx.puts(@ctx.message("rails.create.adding_shopify_gem"))
141
+ File.open(File.join(@ctx.root, "Gemfile"), "a") do |f|
142
+ f.puts "\ngem 'shopify_app', '>=17.0.3'"
137
143
  end
138
- CLI::UI::Frame.open(@ctx.message('rails.create.running_bundle_install')) do
144
+ CLI::UI::Frame.open(@ctx.message("rails.create.running_bundle_install")) do
139
145
  syscall(%w(bundle install))
140
146
  end
141
147
 
142
- CLI::UI::Frame.open(@ctx.message('rails.create.running_generator')) do
143
- begin
144
- syscall(%w(spring stop))
145
- rescue
146
- end
147
- syscall(%w(rails generate shopify_app))
148
+ CLI::UI::Frame.open(@ctx.message("rails.create.running_generator")) do
149
+ syscall(%w(rails generate shopify_app --new-shopify-cli-app))
148
150
  end
149
151
 
150
- CLI::UI::Frame.open(@ctx.message('rails.create.running_migrations')) do
152
+ CLI::UI::Frame.open(@ctx.message("rails.create.running_migrations")) do
151
153
  syscall(%w(rails db:create))
152
154
  syscall(%w(rails db:migrate RAILS_ENV=development))
153
155
  end
154
156
 
155
- unless File.exist?(File.join(@ctx.root, 'config/webpacker.yml'))
156
- CLI::UI::Frame.open(@ctx.message('rails.create.running_webpacker_install')) do
157
+ unless File.exist?(File.join(@ctx.root, "config/webpacker.yml"))
158
+ CLI::UI::Frame.open(@ctx.message("rails.create.running_webpacker_install")) do
157
159
  syscall(%w(rails webpacker:install))
158
160
  end
159
161
  end
160
162
  end
161
163
 
162
164
  def set_custom_ua
163
- ua_path = File.join('config', 'initializers', 'user_agent.rb')
165
+ ua_path = File.join("config", "initializers", "user_agent.rb")
164
166
  @ctx.write(ua_path, USER_AGENT_CODE)
165
167
  end
166
168
 
@@ -173,9 +175,8 @@ module Rails
173
175
  Gem.install(@ctx, name, version)
174
176
  end
175
177
 
176
- def partners_endpoint
177
- return 'https://partners.myshopify.io' if @ctx.getenv(ShopifyCli::PartnersAPI::LOCAL_DEBUG)
178
- 'https://partners.shopify.com'
178
+ def local_debug?
179
+ @ctx.getenv(ShopifyCli::PartnersAPI::LOCAL_DEBUG)
179
180
  end
180
181
  end
181
182
  end