shopify-cli 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/Gemfile +12 -12
  4. data/Rakefile +32 -30
  5. data/bin/load_shopify.rb +6 -6
  6. data/bin/shopify +2 -2
  7. data/ext/shopify-cli/extconf.rb +7 -7
  8. data/lib/docgen/markdown.rb +11 -11
  9. data/lib/{project_types/extension/graphql → graphql}/get_app_by_api_key.graphql +0 -0
  10. data/lib/project_types/extension/cli.rb +52 -45
  11. data/lib/project_types/extension/commands/build.rb +3 -3
  12. data/lib/project_types/extension/commands/create.rb +16 -9
  13. data/lib/project_types/extension/commands/extension_command.rb +8 -5
  14. data/lib/project_types/extension/commands/push.rb +8 -8
  15. data/lib/project_types/extension/commands/register.rb +19 -30
  16. data/lib/project_types/extension/commands/serve.rb +2 -2
  17. data/lib/project_types/extension/commands/tunnel.rb +12 -12
  18. data/lib/project_types/extension/extension_project.rb +4 -4
  19. data/lib/project_types/extension/extension_project_keys.rb +4 -4
  20. data/lib/project_types/extension/features/argo.rb +13 -13
  21. data/lib/project_types/extension/features/argo_config.rb +5 -5
  22. data/lib/project_types/extension/features/argo_dependencies.rb +5 -5
  23. data/lib/project_types/extension/features/argo_setup.rb +2 -2
  24. data/lib/project_types/extension/features/argo_setup_steps.rb +4 -4
  25. data/lib/project_types/extension/forms/create.rb +28 -34
  26. data/lib/project_types/extension/forms/questions/ask_app.rb +53 -0
  27. data/lib/project_types/extension/forms/questions/ask_name.rb +40 -0
  28. data/lib/project_types/extension/forms/questions/ask_type.rb +36 -0
  29. data/lib/project_types/extension/messages/messages.rb +53 -52
  30. data/lib/project_types/extension/models/lazy_specification_handler.rb +12 -0
  31. data/lib/project_types/extension/models/specification_handlers/checkout_post_purchase.rb +1 -1
  32. data/lib/project_types/extension/models/specification_handlers/default.rb +2 -2
  33. data/lib/project_types/extension/models/specifications.rb +3 -3
  34. data/lib/project_types/extension/tasks/configure_features.rb +4 -4
  35. data/lib/project_types/extension/tasks/converters/app_converter.rb +6 -6
  36. data/lib/project_types/extension/tasks/converters/registration_converter.rb +6 -6
  37. data/lib/project_types/extension/tasks/converters/validation_error_converter.rb +4 -4
  38. data/lib/project_types/extension/tasks/converters/version_converter.rb +7 -7
  39. data/lib/project_types/extension/tasks/create_extension.rb +4 -4
  40. data/lib/project_types/extension/tasks/fetch_specifications.rb +4 -4
  41. data/lib/project_types/extension/tasks/get_app.rb +4 -4
  42. data/lib/project_types/extension/tasks/get_apps.rb +3 -3
  43. data/lib/project_types/extension/tasks/update_draft.rb +4 -4
  44. data/lib/project_types/extension/tasks/user_errors.rb +4 -4
  45. data/lib/project_types/node/cli.rb +19 -19
  46. data/lib/project_types/node/commands/connect.rb +3 -3
  47. data/lib/project_types/node/commands/create.rb +40 -38
  48. data/lib/project_types/node/commands/deploy.rb +4 -4
  49. data/lib/project_types/node/commands/deploy/heroku.rb +24 -24
  50. data/lib/project_types/node/commands/generate.rb +8 -8
  51. data/lib/project_types/node/commands/open.rb +2 -2
  52. data/lib/project_types/node/commands/populate.rb +6 -6
  53. data/lib/project_types/node/commands/populate/customer.rb +5 -5
  54. data/lib/project_types/node/commands/populate/draft_order.rb +5 -5
  55. data/lib/project_types/node/commands/populate/product.rb +5 -5
  56. data/lib/project_types/node/commands/serve.rb +9 -9
  57. data/lib/project_types/node/commands/tunnel.rb +7 -7
  58. data/lib/project_types/node/forms/create.rb +7 -7
  59. data/lib/project_types/node/messages/messages.rb +3 -3
  60. data/lib/project_types/rails/cli.rb +21 -21
  61. data/lib/project_types/rails/commands/connect.rb +3 -3
  62. data/lib/project_types/rails/commands/create.rb +51 -48
  63. data/lib/project_types/rails/commands/deploy.rb +4 -4
  64. data/lib/project_types/rails/commands/deploy/heroku.rb +30 -30
  65. data/lib/project_types/rails/commands/generate.rb +7 -7
  66. data/lib/project_types/rails/commands/generate/webhook.rb +6 -6
  67. data/lib/project_types/rails/commands/open.rb +2 -2
  68. data/lib/project_types/rails/commands/populate.rb +6 -6
  69. data/lib/project_types/rails/commands/populate/customer.rb +5 -5
  70. data/lib/project_types/rails/commands/populate/draft_order.rb +5 -5
  71. data/lib/project_types/rails/commands/populate/product.rb +5 -5
  72. data/lib/project_types/rails/commands/serve.rb +11 -11
  73. data/lib/project_types/rails/commands/tunnel.rb +7 -7
  74. data/lib/project_types/rails/forms/create.rb +23 -23
  75. data/lib/project_types/rails/gem.rb +23 -23
  76. data/lib/project_types/rails/messages/messages.rb +4 -4
  77. data/lib/project_types/rails/ruby.rb +2 -2
  78. data/lib/project_types/script/cli.rb +40 -40
  79. data/lib/project_types/script/commands/create.rb +9 -8
  80. data/lib/project_types/script/commands/disable.rb +3 -3
  81. data/lib/project_types/script/commands/enable.rb +9 -7
  82. data/lib/project_types/script/commands/push.rb +5 -4
  83. data/lib/project_types/script/errors.rb +17 -0
  84. data/lib/project_types/script/forms/create.rb +5 -5
  85. data/lib/project_types/script/graphql/app_script_update_or_create.graphql +2 -0
  86. data/lib/project_types/script/layers/application/build_script.rb +6 -8
  87. data/lib/project_types/script/layers/application/create_script.rb +2 -2
  88. data/lib/project_types/script/layers/application/disable_script.rb +2 -2
  89. data/lib/project_types/script/layers/application/enable_script.rb +2 -2
  90. data/lib/project_types/script/layers/application/project_dependencies.rb +4 -4
  91. data/lib/project_types/script/layers/application/push_script.rb +4 -12
  92. data/lib/project_types/script/layers/domain/push_package.rb +5 -1
  93. data/lib/project_types/script/layers/infrastructure/assemblyscript_project_creator.rb +3 -3
  94. data/lib/project_types/script/layers/infrastructure/assemblyscript_task_runner.rb +10 -10
  95. data/lib/project_types/script/layers/infrastructure/errors.rb +1 -1
  96. data/lib/project_types/script/layers/infrastructure/extension_point_repository.rb +2 -2
  97. data/lib/project_types/script/layers/infrastructure/push_package_repository.rb +12 -17
  98. data/lib/project_types/script/layers/infrastructure/rust_project_creator.rb +4 -4
  99. data/lib/project_types/script/layers/infrastructure/rust_task_runner.rb +1 -1
  100. data/lib/project_types/script/layers/infrastructure/script_service.rb +18 -16
  101. data/lib/project_types/script/messages/messages.rb +14 -8
  102. data/lib/project_types/script/script_project.rb +27 -5
  103. data/lib/project_types/script/ui/error_handler.rb +80 -68
  104. data/lib/project_types/script/ui/printing_spinner.rb +1 -1
  105. data/lib/project_types/script/ui/strict_spinner.rb +1 -1
  106. data/lib/project_types/theme/cli.rb +19 -19
  107. data/lib/project_types/theme/commands/connect.rb +12 -12
  108. data/lib/project_types/theme/commands/create.rb +11 -11
  109. data/lib/project_types/theme/commands/deploy.rb +8 -8
  110. data/lib/project_types/theme/commands/generate.rb +3 -3
  111. data/lib/project_types/theme/commands/generate/env.rb +15 -15
  112. data/lib/project_types/theme/commands/push.rb +15 -15
  113. data/lib/project_types/theme/commands/serve.rb +5 -5
  114. data/lib/project_types/theme/forms/connect.rb +4 -4
  115. data/lib/project_types/theme/forms/create.rb +5 -5
  116. data/lib/project_types/theme/tasks/ensure_themekit_installed.rb +22 -22
  117. data/lib/project_types/theme/themekit.rb +15 -15
  118. data/lib/rubygems_plugin.rb +3 -3
  119. data/lib/shopify-cli/admin_api.rb +11 -11
  120. data/lib/shopify-cli/admin_api/populate_resource_command.rb +17 -17
  121. data/lib/shopify-cli/admin_api/schema.rb +3 -3
  122. data/lib/shopify-cli/api.rb +10 -10
  123. data/lib/shopify-cli/command.rb +1 -1
  124. data/lib/shopify-cli/commands.rb +9 -9
  125. data/lib/shopify-cli/commands/config.rb +28 -52
  126. data/lib/shopify-cli/commands/connect.rb +10 -10
  127. data/lib/shopify-cli/commands/create.rb +5 -5
  128. data/lib/shopify-cli/commands/help.rb +6 -6
  129. data/lib/shopify-cli/commands/logout.rb +3 -3
  130. data/lib/shopify-cli/commands/system.rb +32 -32
  131. data/lib/shopify-cli/commands/version.rb +2 -2
  132. data/lib/shopify-cli/context.rb +23 -23
  133. data/lib/shopify-cli/core.rb +4 -4
  134. data/lib/shopify-cli/core/entry_point.rb +5 -5
  135. data/lib/shopify-cli/core/executor.rb +1 -1
  136. data/lib/shopify-cli/core/help_resolver.rb +2 -2
  137. data/lib/shopify-cli/core/monorail.rb +16 -16
  138. data/lib/shopify-cli/db.rb +2 -2
  139. data/lib/shopify-cli/feature.rb +1 -1
  140. data/lib/shopify-cli/form.rb +1 -1
  141. data/lib/shopify-cli/git.rb +17 -17
  142. data/lib/shopify-cli/helpers.rb +1 -1
  143. data/lib/shopify-cli/helpers/haikunator.rb +1 -1
  144. data/lib/shopify-cli/heroku.rb +28 -28
  145. data/lib/shopify-cli/http_request.rb +2 -2
  146. data/lib/shopify-cli/js_deps.rb +12 -12
  147. data/lib/shopify-cli/js_system.rb +5 -5
  148. data/lib/shopify-cli/lazy_delegator.rb +55 -0
  149. data/lib/shopify-cli/messages/messages.rb +4 -14
  150. data/lib/shopify-cli/oauth.rb +25 -25
  151. data/lib/shopify-cli/oauth/servlet.rb +9 -9
  152. data/lib/shopify-cli/options.rb +3 -3
  153. data/lib/shopify-cli/packager.rb +24 -24
  154. data/lib/shopify-cli/partners_api.rb +16 -16
  155. data/lib/shopify-cli/partners_api/organizations.rb +10 -10
  156. data/lib/shopify-cli/process_supervision.rb +7 -7
  157. data/lib/shopify-cli/project.rb +16 -16
  158. data/lib/shopify-cli/project_type.rb +3 -3
  159. data/lib/shopify-cli/resources.rb +1 -1
  160. data/lib/shopify-cli/resources/env_file.rb +9 -9
  161. data/lib/shopify-cli/result.rb +8 -8
  162. data/lib/shopify-cli/shopifolk.rb +6 -9
  163. data/lib/shopify-cli/sub_command.rb +1 -1
  164. data/lib/shopify-cli/task.rb +3 -3
  165. data/lib/shopify-cli/tasks.rb +7 -7
  166. data/lib/shopify-cli/tasks/create_api_client.rb +5 -5
  167. data/lib/shopify-cli/tasks/ensure_dev_store.rb +11 -11
  168. data/lib/shopify-cli/tasks/ensure_env.rb +15 -15
  169. data/lib/shopify-cli/tasks/ensure_loopback_url.rb +4 -4
  170. data/lib/shopify-cli/tasks/select_org_and_shop.rb +19 -19
  171. data/lib/shopify-cli/tasks/update_dashboard_urls.rb +10 -10
  172. data/lib/shopify-cli/transform_data_structure.rb +86 -0
  173. data/lib/shopify-cli/tunnel.rb +30 -30
  174. data/lib/shopify-cli/version.rb +1 -1
  175. data/lib/shopify_cli.rb +56 -54
  176. data/shopify-cli.gemspec +6 -6
  177. data/vendor/gen/template/bin/update-deps +9 -9
  178. metadata +9 -4
  179. data/lib/project_types/extension/forms/register.rb +0 -47
@@ -1,4 +1,4 @@
1
- require 'shopify_cli'
1
+ require "shopify_cli"
2
2
 
3
3
  module ShopifyCli
4
4
  ##
@@ -6,7 +6,7 @@ module ShopifyCli
6
6
  # schema.
7
7
  #
8
8
  class PartnersAPI < API
9
- autoload :Organizations, 'shopify-cli/partners_api/organizations'
9
+ autoload :Organizations, "shopify-cli/partners_api/organizations"
10
10
 
11
11
  # Defines the environment variable that this API looks for to operate on local
12
12
  # services. If you set this environment variable in your shell then the partners
@@ -16,7 +16,7 @@ module ShopifyCli
16
16
  #
17
17
  # SHOPIFY_APP_CLI_LOCAL_PARTNERS=1 shopify create
18
18
  #
19
- LOCAL_DEBUG = 'SHOPIFY_APP_CLI_LOCAL_PARTNERS'
19
+ LOCAL_DEBUG = "SHOPIFY_APP_CLI_LOCAL_PARTNERS"
20
20
 
21
21
  class << self
22
22
  ##
@@ -52,7 +52,7 @@ module ShopifyCli
52
52
 
53
53
  def partners_url_for(organization_id, api_client_id, local_debug)
54
54
  if ShopifyCli::Shopifolk.acting_as_shopify_organization?
55
- organization_id = 'internal'
55
+ organization_id = "internal"
56
56
  end
57
57
  "#{partners_endpoint(local_debug)}/#{organization_id}/apps/#{api_client_id}"
58
58
  end
@@ -65,7 +65,7 @@ module ShopifyCli
65
65
  authenticate(ctx)
66
66
  retry
67
67
  rescue API::APIRequestNotFoundError
68
- ctx.puts(ctx.message('core.partners_api.error.account_not_found', ShopifyCli::TOOL_NAME))
68
+ ctx.puts(ctx.message("core.partners_api.error.account_not_found", ShopifyCli::TOOL_NAME))
69
69
  end
70
70
 
71
71
  def api_client(ctx)
@@ -86,7 +86,7 @@ module ShopifyCli
86
86
  def authenticate(ctx)
87
87
  OAuth.new(
88
88
  ctx: ctx,
89
- service: 'identity',
89
+ service: "identity",
90
90
  client_id: cli_id,
91
91
  scopes: scopes.join(" "),
92
92
  request_exchange: partners_id,
@@ -94,30 +94,30 @@ module ShopifyCli
94
94
  end
95
95
 
96
96
  def partners_id
97
- return '271e16d403dfa18082ffb3d197bd2b5f4479c3fc32736d69296829cbb28d41a6' if ENV[LOCAL_DEBUG].nil?
98
- 'df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978'
97
+ return "271e16d403dfa18082ffb3d197bd2b5f4479c3fc32736d69296829cbb28d41a6" if ENV[LOCAL_DEBUG].nil?
98
+ "df89d73339ac3c6c5f0a98d9ca93260763e384d51d6038da129889c308973978"
99
99
  end
100
100
 
101
101
  def cli_id
102
- return 'fbdb2649-e327-4907-8f67-908d24cfd7e3' if ENV[LOCAL_DEBUG].nil?
103
- 'e5380e02-312a-7408-5718-e07017e9cf52'
102
+ return "fbdb2649-e327-4907-8f67-908d24cfd7e3" if ENV[LOCAL_DEBUG].nil?
103
+ "e5380e02-312a-7408-5718-e07017e9cf52"
104
104
  end
105
105
 
106
106
  def auth_endpoint
107
- return 'https://accounts.shopify.com' if ENV[LOCAL_DEBUG].nil?
108
- 'https://identity.myshopify.io'
107
+ return "https://accounts.shopify.com" if ENV[LOCAL_DEBUG].nil?
108
+ "https://identity.myshopify.io"
109
109
  end
110
110
 
111
111
  def endpoint
112
- return 'https://partners.shopify.com' if ENV[LOCAL_DEBUG].nil?
113
- 'https://partners.myshopify.io/'
112
+ return "https://partners.shopify.com" if ENV[LOCAL_DEBUG].nil?
113
+ "https://partners.myshopify.io/"
114
114
  end
115
115
 
116
116
  def partners_endpoint(local_debug)
117
117
  domain = if local_debug
118
- 'partners.myshopify.io'
118
+ "partners.myshopify.io"
119
119
  else
120
- 'partners.shopify.com'
120
+ "partners.shopify.com"
121
121
  end
122
122
  "https://#{domain}"
123
123
  end
@@ -3,26 +3,26 @@ module ShopifyCli
3
3
  class Organizations
4
4
  class << self
5
5
  def fetch_all(ctx)
6
- resp = PartnersAPI.query(ctx, 'all_organizations')
7
- (resp.dig('data', 'organizations', 'nodes') || []).map do |org|
8
- org['stores'] = (org.dig('stores', 'nodes') || [])
6
+ resp = PartnersAPI.query(ctx, "all_organizations")
7
+ (resp.dig("data", "organizations", "nodes") || []).map do |org|
8
+ org["stores"] = (org.dig("stores", "nodes") || [])
9
9
  org
10
10
  end
11
11
  end
12
12
 
13
13
  def fetch(ctx, id:)
14
- resp = PartnersAPI.query(ctx, 'find_organization', id: id)
15
- org = resp.dig('data', 'organizations', 'nodes').first
14
+ resp = PartnersAPI.query(ctx, "find_organization", id: id)
15
+ org = resp.dig("data", "organizations", "nodes").first
16
16
  return nil if org.nil?
17
- org['stores'] = (org.dig('stores', 'nodes') || [])
17
+ org["stores"] = (org.dig("stores", "nodes") || [])
18
18
  org
19
19
  end
20
20
 
21
21
  def fetch_with_app(ctx)
22
- resp = PartnersAPI.query(ctx, 'all_orgs_with_apps')
23
- (resp.dig('data', 'organizations', 'nodes') || []).map do |org|
24
- org['stores'] = (org.dig('stores', 'nodes') || [])
25
- org['apps'] = (org.dig('apps', 'nodes') || [])
22
+ resp = PartnersAPI.query(ctx, "all_orgs_with_apps")
23
+ (resp.dig("data", "organizations", "nodes") || []).map do |org|
24
+ org["stores"] = (org.dig("stores", "nodes") || [])
25
+ org["apps"] = (org.dig("apps", "nodes") || [])
26
26
  org
27
27
  end
28
28
  end
@@ -1,4 +1,4 @@
1
- require 'fileutils'
1
+ require "fileutils"
2
2
 
3
3
  module ShopifyCli
4
4
  ##
@@ -19,7 +19,7 @@ module ShopifyCli
19
19
  class << self
20
20
  def run_dir
21
21
  # is the directory where the pid and logfile are kept
22
- File.join(ShopifyCli.cache_dir, 'sv')
22
+ File.join(ShopifyCli.cache_dir, "sv")
23
23
  end
24
24
 
25
25
  ##
@@ -36,7 +36,7 @@ module ShopifyCli
36
36
  # will be nil if the process is not running.
37
37
  #
38
38
  def for_ident(identifier)
39
- pid, time = File.read(File.join(ShopifyCli::ProcessSupervision.run_dir, "#{identifier}.pid")).split(':')
39
+ pid, time = File.read(File.join(ShopifyCli::ProcessSupervision.run_dir, "#{identifier}.pid")).split(":")
40
40
  new(identifier, pid: Integer(pid), time: time)
41
41
  rescue Errno::ENOENT
42
42
  nil
@@ -66,7 +66,7 @@ module ShopifyCli
66
66
  pid_file = new(identifier)
67
67
 
68
68
  # Make sure the file exists and is empty, otherwise Windows fails
69
- File.open(pid_file.log_path, 'w') {}
69
+ File.open(pid_file.log_path, "w") {}
70
70
  pid = Process.spawn(
71
71
  *args,
72
72
  out: pid_file.log_path,
@@ -128,7 +128,7 @@ module ShopifyCli
128
128
  end
129
129
  end
130
130
 
131
- def initialize(identifier, pid: nil, time: Time.now.strftime('%s')) # :nodoc:
131
+ def initialize(identifier, pid: nil, time: Time.now.strftime("%s")) # :nodoc:
132
132
  @identifier = identifier
133
133
  @pid = pid
134
134
  @time = time
@@ -204,13 +204,13 @@ module ShopifyCli
204
204
 
205
205
  # Windows does not handle SIGTERM, go straight to SIGKILL
206
206
  unless ctx.windows?
207
- Process.kill('TERM', id)
207
+ Process.kill("TERM", id)
208
208
  50.times do
209
209
  sleep(0.1)
210
210
  break unless stat(id)
211
211
  end
212
212
  end
213
- Process.kill('KILL', id) if stat(id)
213
+ Process.kill("KILL", id) if stat(id)
214
214
  sleep(0.1) if ctx.windows? # Give Windows a second to actually close the process
215
215
  end
216
216
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- require 'shopify_cli'
2
+ require "shopify_cli"
3
3
 
4
4
  module ShopifyCli
5
5
  ##
@@ -64,7 +64,7 @@ module ShopifyCli
64
64
  #
65
65
  def current_project_type
66
66
  return unless has_current?
67
- current.config['project_type'].to_sym
67
+ current.config["project_type"].to_sym
68
68
  end
69
69
 
70
70
  ##
@@ -84,13 +84,13 @@ module ShopifyCli
84
84
  # type = ShopifyCli::Project.current_project_type
85
85
  #
86
86
  def write(ctx, project_type:, organization_id:, **identifiers)
87
- require 'yaml' # takes 20ms, so deferred as late as possible.
87
+ require "yaml" # takes 20ms, so deferred as late as possible.
88
88
  content = Hash[{ project_type: project_type, organization_id: organization_id.to_i }
89
89
  .merge(identifiers)
90
90
  .collect { |k, v| [k.to_s, v] }]
91
- content['shopify_organization'] = true if Shopifolk.acting_as_shopify_organization?
91
+ content["shopify_organization"] = true if Shopifolk.acting_as_shopify_organization?
92
92
 
93
- ctx.write('.shopify-cli.yml', YAML.dump(content))
93
+ ctx.write(".shopify-cli.yml", YAML.dump(content))
94
94
  clear
95
95
  end
96
96
 
@@ -113,7 +113,7 @@ module ShopifyCli
113
113
  def at(dir)
114
114
  proj_dir = directory(dir)
115
115
  unless proj_dir
116
- raise(ShopifyCli::Abort, Context.message('core.project.error.not_in_project'))
116
+ raise(ShopifyCli::Abort, Context.message("core.project.error.not_in_project"))
117
117
  end
118
118
  @at ||= Hash.new { |h, k| h[k] = new(directory: k) }
119
119
  @at[proj_dir]
@@ -121,8 +121,8 @@ module ShopifyCli
121
121
 
122
122
  def __directory(curr)
123
123
  loop do
124
- return nil if curr == '/' || /^[A-Z]:\/$/.match?(curr)
125
- file = File.join(curr, '.shopify-cli.yml')
124
+ return nil if curr == "/" || /^[A-Z]:\/$/.match?(curr)
125
+ file = File.join(curr, ".shopify-cli.yml")
126
126
  return curr if File.exist?(file)
127
127
  curr = File.dirname(curr)
128
128
  end
@@ -168,15 +168,15 @@ module ShopifyCli
168
168
  #
169
169
  def config
170
170
  @config ||= begin
171
- config = load_yaml_file('.shopify-cli.yml')
171
+ config = load_yaml_file(".shopify-cli.yml")
172
172
  unless config.is_a?(Hash)
173
- raise ShopifyCli::Abort, Context.message('core.yaml.error.not_hash', '.shopify-cli.yml')
173
+ raise ShopifyCli::Abort, Context.message("core.yaml.error.not_hash", ".shopify-cli.yml")
174
174
  end
175
175
 
176
176
  # The app_type key was deprecated in favour of project_type, so replace it
177
- if config.key?('app_type')
178
- config['project_type'] = config['app_type']
179
- config.delete('app_type')
177
+ if config.key?("app_type")
178
+ config["project_type"] = config["app_type"]
179
+ config.delete("app_type")
180
180
  end
181
181
 
182
182
  config
@@ -187,16 +187,16 @@ module ShopifyCli
187
187
 
188
188
  def load_yaml_file(relative_path)
189
189
  f = File.join(directory, relative_path)
190
- require 'yaml' # takes 20ms, so deferred as late as possible.
190
+ require "yaml" # takes 20ms, so deferred as late as possible.
191
191
  begin
192
192
  YAML.load_file(f)
193
193
  rescue Psych::SyntaxError => e
194
- raise(ShopifyCli::Abort, Context.message('core.yaml.error.invalid', relative_path, e.message))
194
+ raise(ShopifyCli::Abort, Context.message("core.yaml.error.invalid", relative_path, e.message))
195
195
  # rescue Errno::EACCES => e
196
196
  # TODO
197
197
  # Dev::Helpers::EaccesHandler.diagnose_and_raise(f, e, mode: :read)
198
198
  rescue Errno::ENOENT
199
- raise ShopifyCli::Abort, Context.message('core.yaml.error.not_found', f)
199
+ raise ShopifyCli::Abort, Context.message("core.yaml.error.not_found", f)
200
200
  end
201
201
  end
202
202
  end
@@ -21,7 +21,7 @@ module ShopifyCli
21
21
  end
22
22
 
23
23
  def load_type(current_type, shallow = false)
24
- filepath = File.join(ShopifyCli::ROOT, 'lib', 'project_types', current_type.to_s, 'cli.rb')
24
+ filepath = File.join(ShopifyCli::ROOT, "lib", "project_types", current_type.to_s, "cli.rb")
25
25
  return unless File.exist?(filepath)
26
26
  @shallow_load = shallow
27
27
  @current_type = current_type
@@ -32,7 +32,7 @@ module ShopifyCli
32
32
  end
33
33
 
34
34
  def load_all
35
- Dir.glob(File.join(ShopifyCli::ROOT, 'lib', 'project_types', '*', 'cli.rb')).map do |filepath|
35
+ Dir.glob(File.join(ShopifyCli::ROOT, "lib", "project_types", "*", "cli.rb")).map do |filepath|
36
36
  load_type(filepath.split(File::Separator)[-2].to_sym, true)
37
37
  end
38
38
  end
@@ -74,7 +74,7 @@ module ShopifyCli
74
74
  def register_command(const, cmd)
75
75
  return if project_load_shallow
76
76
  Context.new.abort(
77
- Context.message('core.project_type.error.cannot_override_core', cmd, const)
77
+ Context.message("core.project_type.error.cannot_override_core", cmd, const)
78
78
  ) if Commands.core_command?(cmd)
79
79
  Commands.register(const, cmd)
80
80
  end
@@ -1,5 +1,5 @@
1
1
  module ShopifyCli
2
2
  module Resources
3
- autoload :EnvFile, 'shopify-cli/resources/env_file'
3
+ autoload :EnvFile, "shopify-cli/resources/env_file"
4
4
  end
5
5
  end
@@ -4,13 +4,13 @@ module ShopifyCli
4
4
  module Resources
5
5
  class EnvFile
6
6
  include SmartProperties
7
- FILENAME = '.env'
7
+ FILENAME = ".env"
8
8
  KEY_MAP = {
9
- 'SHOPIFY_API_KEY' => :api_key,
10
- 'SHOPIFY_API_SECRET' => :secret,
11
- 'SHOP' => :shop,
12
- 'SCOPES' => :scopes,
13
- 'HOST' => :host,
9
+ "SHOPIFY_API_KEY" => :api_key,
10
+ "SHOPIFY_API_SECRET" => :secret,
11
+ "SHOP" => :shop,
12
+ "SCOPES" => :scopes,
13
+ "HOST" => :host,
14
14
  }
15
15
 
16
16
  class << self
@@ -72,7 +72,7 @@ module ShopifyCli
72
72
 
73
73
  def write(ctx)
74
74
  spin_group = CLI::UI::SpinGroup.new
75
- spin_group.add(ctx.message('core.env_file.saving_header', FILENAME)) do |spinner|
75
+ spin_group.add(ctx.message("core.env_file.saving_header", FILENAME)) do |spinner|
76
76
  output = []
77
77
  KEY_MAP.each do |key, value|
78
78
  output << "#{key}=#{send(value)}" if send(value)
@@ -80,9 +80,9 @@ module ShopifyCli
80
80
  extra.each do |key, value|
81
81
  output << "#{key}=#{value}"
82
82
  end
83
- ctx.print_task(ctx.message('core.env_file.saving', FILENAME))
83
+ ctx.print_task(ctx.message("core.env_file.saving", FILENAME))
84
84
  ctx.write(FILENAME, output.join("\n") + "\n")
85
- spinner.update_title(ctx.message('core.env_file.saved', FILENAME))
85
+ spinner.update_title(ctx.message("core.env_file.saved", FILENAME))
86
86
  end
87
87
  spin_group.wait
88
88
  end
@@ -191,7 +191,7 @@ module ShopifyCli
191
191
  # Success.new(1).unwrap(0) => 1
192
192
  #
193
193
  def unwrap(*args, &block)
194
- raise ArgumentError, "expected either a fallback value or a block" unless args.one? ^ block
194
+ raise ArgumentError, "expected either a fallback value or a block" unless (args.length == 1) ^ block
195
195
  @value
196
196
  end
197
197
  end
@@ -304,12 +304,12 @@ module ShopifyCli
304
304
  #
305
305
  # Failure
306
306
  # .new(RuntimeError.new)
307
- # .resuce { "All good! "}
307
+ # .rescue { "All good! "}
308
308
  # .success? # => true
309
309
  #
310
310
  # Failure
311
311
  # .new(RuntimeError.new)
312
- # .resuce { Failure.new("Still broken!") }
312
+ # .rescue { Failure.new("Still broken!") }
313
313
  # .success? # => false
314
314
  #
315
315
  def rescue(&block)
@@ -336,7 +336,7 @@ module ShopifyCli
336
336
  # * `ArgumentError` if both a fallback argument and a block is provided
337
337
  #
338
338
  def unwrap(*args, &block)
339
- raise ArgumentError, "expected either a fallback value or a block" unless args.one? ^ block
339
+ raise ArgumentError, "expected either a fallback value or a block" unless (args.length == 1) ^ block
340
340
  block ? block.call(@error) : args.pop
341
341
  end
342
342
  end
@@ -397,14 +397,14 @@ module ShopifyCli
397
397
  # end
398
398
  #
399
399
  def self.wrap(*values, &block)
400
- raise ArgumentError, "expected either a value or a block" unless values.one? ^ block
400
+ raise ArgumentError, "expected either a value or a block" unless (values.length == 1) ^ block
401
401
 
402
- if values.one?
402
+ if values.length == 1
403
403
  values.pop.yield_self do |value|
404
404
  case value
405
405
  when Result::Success, Result::Failure
406
406
  value
407
- when Exception
407
+ when NilClass, Exception
408
408
  Result.failure(value)
409
409
  else
410
410
  Result.success(value)
@@ -414,7 +414,7 @@ module ShopifyCli
414
414
  ->(*args) do
415
415
  begin
416
416
  wrap(block.call(*args))
417
- rescue => error
417
+ rescue Exception => error # rubocop:disable Lint/RescueException
418
418
  wrap(error)
419
419
  end
420
420
  end
@@ -5,10 +5,10 @@ module ShopifyCli
5
5
  # The Shopifolk Feature flag will persist between runs so if the flag is enabled or disabled,
6
6
  # it will still be in that same state until the next class invocation.
7
7
  class Shopifolk
8
- GCLOUD_CONFIG_FILE = File.expand_path('~/.config/gcloud/configurations/config_default')
9
- DEV_PATH = '/opt/dev'
10
- SECTION = 'core'
11
- FEATURE_NAME = 'shopifolk'
8
+ GCLOUD_CONFIG_FILE = File.expand_path("~/.config/gcloud/configurations/config_default")
9
+ DEV_PATH = "/opt/dev"
10
+ SECTION = "core"
11
+ FEATURE_NAME = "shopifolk"
12
12
 
13
13
  class << self
14
14
  attr_writer :acting_as_shopify_organization
@@ -25,8 +25,6 @@ module ShopifyCli
25
25
  # ShopifyCli::Shopifolk.check
26
26
  #
27
27
  def check
28
- return false unless ShopifyCli::Config.get_bool('shopifolk-beta', 'enabled')
29
-
30
28
  ShopifyCli::Shopifolk.new.shopifolk?
31
29
  end
32
30
 
@@ -35,7 +33,7 @@ module ShopifyCli
35
33
  end
36
34
 
37
35
  def acting_as_shopify_organization?
38
- !!@acting_as_shopify_organization || (Project.has_current? && Project.current.config['shopify_organization'])
36
+ !!@acting_as_shopify_organization || (Project.has_current? && Project.current.config["shopify_organization"])
39
37
  end
40
38
 
41
39
  def reset
@@ -52,7 +50,6 @@ module ShopifyCli
52
50
  # a valid google cloud config file with email ending in "@shopify.com"
53
51
  #
54
52
  def shopifolk?
55
- return false unless ShopifyCli::Config.get_bool('shopifolk-beta', 'enabled')
56
53
  return true if Feature.enabled?(FEATURE_NAME)
57
54
 
58
55
  if shopifolk_by_gcloud? && shopifolk_by_dev?
@@ -67,7 +64,7 @@ module ShopifyCli
67
64
  private
68
65
 
69
66
  def shopifolk_by_gcloud?
70
- ini&.dig("[#{SECTION}]", 'account')&.match?(/@shopify.com\z/)
67
+ ini&.dig("[#{SECTION}]", "account")&.match?(/@shopify.com\z/)
71
68
  end
72
69
 
73
70
  def shopifolk_by_dev?