shopify-cli 1.0.3 → 1.1.2
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.
- checksums.yaml +4 -4
- data/.github/CONTRIBUTING.md +1 -1
- data/.travis.yml +3 -2
- data/CHANGELOG.md +20 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +13 -13
- data/bin/load_shopify.rb +3 -1
- data/bin/shopify +2 -0
- data/docs/Gemfile.lock +23 -13
- data/docs/getting-started/index.md +3 -2
- data/docs/getting-started/install/index.md +55 -9
- data/docs/getting-started/uninstall/index.md +1 -1
- data/docs/getting-started/upgrade/index.md +8 -4
- data/ext/shopify-cli/extconf.rb +40 -20
- data/lib/project_types/extension/models/type.rb +1 -0
- data/lib/project_types/extension/tasks/create_extension.rb +1 -1
- data/lib/project_types/extension/tasks/get_app.rb +1 -1
- data/lib/project_types/extension/tasks/update_draft.rb +1 -1
- data/lib/project_types/node/commands/create.rb +4 -4
- data/lib/project_types/node/commands/deploy/heroku.rb +6 -1
- data/lib/project_types/node/commands/generate/billing.rb +7 -5
- data/lib/project_types/node/commands/generate/page.rb +9 -5
- data/lib/project_types/node/commands/generate/webhook.rb +5 -1
- data/lib/project_types/node/commands/serve.rb +5 -5
- data/lib/project_types/node/messages/messages.rb +5 -1
- data/lib/project_types/rails/commands/create.rb +56 -5
- data/lib/project_types/rails/commands/generate.rb +1 -0
- data/lib/project_types/rails/commands/generate/webhook.rb +3 -2
- data/lib/project_types/rails/commands/serve.rb +11 -7
- data/lib/project_types/rails/gem.rb +61 -6
- data/lib/project_types/rails/messages/messages.rb +32 -12
- data/lib/project_types/script/commands/create.rb +1 -5
- data/lib/project_types/script/commands/disable.rb +1 -2
- data/lib/project_types/script/commands/enable.rb +5 -5
- data/lib/project_types/script/commands/push.rb +1 -6
- data/lib/project_types/script/config/extension_points.yml +4 -4
- data/lib/project_types/script/errors.rb +8 -0
- data/lib/project_types/script/forms/create.rb +1 -1
- data/lib/project_types/script/layers/domain/errors.rb +2 -0
- data/lib/project_types/script/layers/infrastructure/errors.rb +1 -0
- data/lib/project_types/script/layers/infrastructure/script_service.rb +6 -2
- data/lib/project_types/script/messages/messages.rb +19 -48
- data/lib/project_types/script/ui/error_handler.rb +4 -0
- data/lib/rubygems_plugin.rb +18 -10
- data/lib/shopify-cli/admin_api/populate_resource_command.rb +1 -1
- data/lib/shopify-cli/command.rb +12 -6
- data/lib/shopify-cli/commands/connect.rb +7 -75
- data/lib/shopify-cli/commands/create.rb +1 -1
- data/lib/shopify-cli/commands/system.rb +21 -12
- data/lib/shopify-cli/context.rb +68 -0
- data/lib/shopify-cli/core/entry_point.rb +4 -1
- data/lib/shopify-cli/core/executor.rb +3 -5
- data/lib/shopify-cli/core/monorail.rb +1 -1
- data/lib/shopify-cli/db.rb +1 -1
- data/lib/shopify-cli/git.rb +1 -1
- data/lib/shopify-cli/heroku.rb +21 -5
- data/lib/shopify-cli/js_deps.rb +2 -2
- data/lib/shopify-cli/js_system.rb +2 -2
- data/lib/shopify-cli/messages/messages.rb +27 -20
- data/lib/shopify-cli/process_supervision.rb +60 -21
- data/lib/shopify-cli/project.rb +14 -6
- data/lib/shopify-cli/project_type.rb +3 -2
- data/lib/shopify-cli/sub_command.rb +1 -0
- data/lib/shopify-cli/task.rb +2 -2
- data/lib/shopify-cli/tasks.rb +11 -4
- data/lib/shopify-cli/tasks/ensure_env.rb +74 -17
- data/lib/shopify-cli/tunnel.rb +22 -7
- data/lib/shopify-cli/version.rb +1 -1
- data/lib/shopify_cli.rb +35 -9
- data/shopify-cli.gemspec +4 -1
- data/vendor/deps/cli-kit/REVISION +1 -1
- data/vendor/deps/cli-kit/lib/cli/kit.rb +1 -1
- data/vendor/deps/cli-kit/lib/cli/kit/autocall.rb +2 -2
- data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +12 -6
- data/vendor/deps/cli-kit/lib/cli/kit/executor.rb +9 -11
- data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +8 -2
- data/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +7 -7
- data/vendor/deps/cli-kit/lib/cli/kit/system.rb +48 -17
- data/vendor/deps/cli-ui/REVISION +1 -1
- data/vendor/deps/cli-ui/lib/cli/ui.rb +5 -4
- data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +9 -3
- data/vendor/deps/cli-ui/lib/cli/ui/color.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +3 -2
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +13 -5
- data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +29 -2
- data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +21 -10
- data/vendor/deps/cli-ui/lib/cli/ui/os.rb +63 -0
- data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +11 -2
- data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +1 -0
- data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +3 -3
- data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +6 -8
- data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +2 -0
- data/vendor/gen/lib/gen.rb +39 -0
- data/vendor/gen/lib/gen/commands.rb +18 -0
- data/vendor/gen/lib/gen/commands/help.rb +20 -0
- data/vendor/gen/lib/gen/commands/new.rb +21 -0
- data/vendor/gen/lib/gen/entry_point.rb +10 -0
- data/vendor/gen/lib/gen/generator.rb +165 -0
- data/vendor/gen/template/.gitignore +2 -0
- data/vendor/gen/template/Gemfile +10 -0
- data/vendor/gen/template/README.md +1 -0
- data/vendor/gen/template/bin/testunit +23 -0
- data/vendor/gen/template/bin/update-deps +97 -0
- data/vendor/gen/template/dev-gems.yml +3 -0
- data/vendor/gen/template/dev-vendor.yml +4 -0
- data/vendor/gen/template/exe/__app__-gems +17 -0
- data/vendor/gen/template/exe/__app__-vendor +18 -0
- data/vendor/gen/template/lib/__app__.rb +33 -0
- data/vendor/gen/template/lib/__app__/commands.rb +18 -0
- data/vendor/gen/template/lib/__app__/commands/example.rb +19 -0
- data/vendor/gen/template/lib/__app__/commands/help.rb +21 -0
- data/vendor/gen/template/lib/__app__/entry_point.rb +10 -0
- data/vendor/gen/template/test/example_test.rb +17 -0
- data/vendor/gen/template/test/test_helper.rb +22 -0
- metadata +25 -4
- data/Vagrantfile +0 -17
- data/lib/project_types/script/forms/script_form.rb +0 -69
|
@@ -34,12 +34,8 @@ module Script
|
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def self.help
|
|
37
|
-
ShopifyCli::Context.message('script.create.help', ShopifyCli::TOOL_NAME)
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def self.extended_help
|
|
41
37
|
allowed_values = Script::Layers::Application::ExtensionPoints.types.map { |type| "{{cyan:#{type}}}" }
|
|
42
|
-
ShopifyCli::Context.message('script.create.
|
|
38
|
+
ShopifyCli::Context.message('script.create.help', ShopifyCli::TOOL_NAME, allowed_values.join(', '))
|
|
43
39
|
end
|
|
44
40
|
end
|
|
45
41
|
end
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
module Script
|
|
4
4
|
module Commands
|
|
5
5
|
class Disable < ShopifyCli::Command
|
|
6
|
-
prerequisite_task :ensure_env
|
|
7
|
-
|
|
8
6
|
def call(_args, _name)
|
|
7
|
+
ShopifyCli::Tasks::EnsureEnv.call(@ctx, required: [:api_key, :secret, :shop])
|
|
9
8
|
project = ScriptProject.current
|
|
10
9
|
Layers::Application::DisableScript.call(
|
|
11
10
|
ctx: @ctx,
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
module Script
|
|
4
4
|
module Commands
|
|
5
5
|
class Enable < ShopifyCli::Command
|
|
6
|
-
prerequisite_task :ensure_env
|
|
7
6
|
options do |parser, flags|
|
|
8
7
|
parser.on('--config_props=KEYVALUEPAIRS', Array) do |t|
|
|
9
8
|
flags[:config_props] = Hash[t.map { |s| s.split(':') }]
|
|
@@ -12,6 +11,7 @@ module Script
|
|
|
12
11
|
end
|
|
13
12
|
|
|
14
13
|
def call(_args, _name)
|
|
14
|
+
ShopifyCli::Tasks::EnsureEnv.call(@ctx, required: [:api_key, :secret, :shop])
|
|
15
15
|
project = ScriptProject.current
|
|
16
16
|
api_key = project.env[:api_key]
|
|
17
17
|
shop_domain = project.env[:shop]
|
|
@@ -32,6 +32,8 @@ module Script
|
|
|
32
32
|
title: project.script_name
|
|
33
33
|
))
|
|
34
34
|
@ctx.puts(@ctx.message('script.enable.info'))
|
|
35
|
+
rescue Errors::InvalidConfigYAMLError => e
|
|
36
|
+
UI::ErrorHandler.pretty_print_and_raise(e)
|
|
35
37
|
rescue StandardError => e
|
|
36
38
|
UI::ErrorHandler.pretty_print_and_raise(e, failed_op: @ctx.message('script.enable.error.operation_failed'))
|
|
37
39
|
end
|
|
@@ -40,10 +42,6 @@ module Script
|
|
|
40
42
|
ShopifyCli::Context.message('script.enable.help', ShopifyCli::TOOL_NAME)
|
|
41
43
|
end
|
|
42
44
|
|
|
43
|
-
def self.extended_help
|
|
44
|
-
ShopifyCli::Context.message('script.enable.extended_help', ShopifyCli::TOOL_NAME)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
45
|
private
|
|
48
46
|
|
|
49
47
|
def acquire_configuration(config_file: nil, config_props: nil)
|
|
@@ -59,6 +57,8 @@ module Script
|
|
|
59
57
|
})
|
|
60
58
|
end
|
|
61
59
|
configuration
|
|
60
|
+
rescue Errno::ENOENT, Psych::SyntaxError
|
|
61
|
+
raise Errors::InvalidConfigYAMLError, options.flags[:config_file]
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
# No slice pre Ruby 2.5 so roll our own
|
|
@@ -3,13 +3,12 @@
|
|
|
3
3
|
module Script
|
|
4
4
|
module Commands
|
|
5
5
|
class Push < ShopifyCli::Command
|
|
6
|
-
prerequisite_task :ensure_env
|
|
7
|
-
|
|
8
6
|
options do |parser, flags|
|
|
9
7
|
parser.on('--force') { |t| flags[:force] = t }
|
|
10
8
|
end
|
|
11
9
|
|
|
12
10
|
def call(_args, _name)
|
|
11
|
+
ShopifyCli::Tasks::EnsureEnv.call(@ctx, required: [:api_key, :secret, :shop])
|
|
13
12
|
project = ScriptProject.current
|
|
14
13
|
api_key = project.env[:api_key]
|
|
15
14
|
return @ctx.puts(self.class.help) unless api_key &&
|
|
@@ -31,10 +30,6 @@ module Script
|
|
|
31
30
|
def self.help
|
|
32
31
|
ShopifyCli::Context.message('script.push.help', ShopifyCli::TOOL_NAME)
|
|
33
32
|
end
|
|
34
|
-
|
|
35
|
-
def self.extended_help
|
|
36
|
-
ShopifyCli::Context.message('script.push.extended_help', ShopifyCli::TOOL_NAME)
|
|
37
|
-
end
|
|
38
33
|
end
|
|
39
34
|
end
|
|
40
35
|
end
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
discount:
|
|
2
2
|
assemblyscript:
|
|
3
3
|
package: "@shopify/extension-point-as-discount"
|
|
4
|
-
version: "^0.2.
|
|
4
|
+
version: "^0.2.10"
|
|
5
5
|
sdk-version: "^6.0.0"
|
|
6
6
|
toolchain-version: "^1.1.0"
|
|
7
7
|
unit_limit_per_order:
|
|
8
8
|
assemblyscript:
|
|
9
9
|
package: "@shopify/extension-point-as-unit-limit-per-order"
|
|
10
|
-
version: "^0.1.
|
|
10
|
+
version: "^0.1.12"
|
|
11
11
|
sdk-version: "^6.0.0"
|
|
12
12
|
toolchain-version: "^1.1.0"
|
|
13
13
|
payment_filter:
|
|
14
14
|
assemblyscript:
|
|
15
15
|
package: "@shopify/extension-point-as-payment-filter"
|
|
16
|
-
version: "^0.2.
|
|
16
|
+
version: "^0.2.8"
|
|
17
17
|
sdk-version: "^6.0.0"
|
|
18
18
|
toolchain-version: "^1.1.0"
|
|
19
19
|
shipping_filter:
|
|
20
20
|
assemblyscript:
|
|
21
21
|
package: "@shopify/extension-point-as-shipping-filter"
|
|
22
|
-
version: "^0.2.
|
|
22
|
+
version: "^0.2.10"
|
|
23
23
|
sdk-version: "^6.0.0"
|
|
24
24
|
toolchain-version: "^1.1.0"
|
|
@@ -9,9 +9,17 @@ module Script
|
|
|
9
9
|
class NoExistingStoresError < ScriptProjectError
|
|
10
10
|
attr_reader :organization_id
|
|
11
11
|
def initialize(organization_id)
|
|
12
|
+
super()
|
|
12
13
|
@organization_id = organization_id
|
|
13
14
|
end
|
|
14
15
|
end
|
|
15
16
|
class ScriptProjectAlreadyExistsError < ScriptProjectError; end
|
|
17
|
+
class InvalidConfigYAMLError < ScriptProjectError
|
|
18
|
+
attr_reader :config_file
|
|
19
|
+
def initialize(config_file)
|
|
20
|
+
super()
|
|
21
|
+
@config_file = config_file
|
|
22
|
+
end
|
|
23
|
+
end
|
|
16
24
|
end
|
|
17
25
|
end
|
|
@@ -8,12 +8,14 @@ module Script
|
|
|
8
8
|
class InvalidExtensionPointError < ScriptProjectError
|
|
9
9
|
attr_reader :type
|
|
10
10
|
def initialize(type)
|
|
11
|
+
super()
|
|
11
12
|
@type = type
|
|
12
13
|
end
|
|
13
14
|
end
|
|
14
15
|
class ScriptNotFoundError < ScriptProjectError
|
|
15
16
|
attr_reader :script_name, :extension_point_type
|
|
16
17
|
def initialize(extension_point_type, script_name)
|
|
18
|
+
super()
|
|
17
19
|
@script_name = script_name
|
|
18
20
|
@extension_point_type = extension_point_type
|
|
19
21
|
end
|
|
@@ -49,7 +49,7 @@ module Script
|
|
|
49
49
|
resp_hash = script_service_request(
|
|
50
50
|
query_name: query_name,
|
|
51
51
|
api_key: api_key,
|
|
52
|
-
shop_domain: shop_domain,
|
|
52
|
+
shop_domain: format_shop_domain(shop_domain),
|
|
53
53
|
variables: variables,
|
|
54
54
|
)
|
|
55
55
|
user_errors = resp_hash["data"]["shopScriptUpdateOrCreate"]["userErrors"]
|
|
@@ -76,7 +76,7 @@ module Script
|
|
|
76
76
|
resp_hash = script_service_request(
|
|
77
77
|
query_name: query_name,
|
|
78
78
|
api_key: api_key,
|
|
79
|
-
shop_domain: shop_domain,
|
|
79
|
+
shop_domain: format_shop_domain(shop_domain),
|
|
80
80
|
variables: variables,
|
|
81
81
|
)
|
|
82
82
|
user_errors = resp_hash["data"]["shopScriptDelete"]["userErrors"]
|
|
@@ -91,6 +91,10 @@ module Script
|
|
|
91
91
|
|
|
92
92
|
private
|
|
93
93
|
|
|
94
|
+
def format_shop_domain(shop_domain)
|
|
95
|
+
shop_domain.delete_suffix("/")
|
|
96
|
+
end
|
|
97
|
+
|
|
94
98
|
class ScriptServiceAPI < ShopifyCli::API
|
|
95
99
|
property(:api_key, accepts: String)
|
|
96
100
|
property(:shop_id, accepts: Integer)
|
|
@@ -29,7 +29,7 @@ module Script
|
|
|
29
29
|
no_existing_orgs_cause: "You don't have any partner organizations.",
|
|
30
30
|
no_existing_orgs_help: "Please visit https://partners.shopify.com/ to create a partners account.",
|
|
31
31
|
|
|
32
|
-
no_existing_stores_cause: "You don't have any
|
|
32
|
+
no_existing_stores_cause: "You don't have any stores.",
|
|
33
33
|
no_existing_stores_help: "Visit https://partners.shopify.com/%{organization_id}/stores/ to create one.",
|
|
34
34
|
|
|
35
35
|
project_exists_cause: "Directory with the same name as the script already exists.",
|
|
@@ -38,9 +38,12 @@ module Script
|
|
|
38
38
|
invalid_extension_cause: "Invalid extension point %s",
|
|
39
39
|
invalid_extension_help: "Allowed values: %s.",
|
|
40
40
|
|
|
41
|
+
invalid_config: "Can't change the configuration values because %1$s is missing or "\
|
|
42
|
+
"it is not formatted properly.",
|
|
43
|
+
|
|
41
44
|
script_not_found_cause: "Couldn't find script %s for extension point %s",
|
|
42
45
|
|
|
43
|
-
app_not_installed_cause: "App not installed on
|
|
46
|
+
app_not_installed_cause: "App not installed on store.",
|
|
44
47
|
|
|
45
48
|
app_script_not_pushed_help: "Push the script and then try this command again.",
|
|
46
49
|
|
|
@@ -67,18 +70,16 @@ module Script
|
|
|
67
70
|
"on this extension point.",
|
|
68
71
|
shop_script_conflict_help: "Disable that script or uninstall that app and try again.",
|
|
69
72
|
|
|
70
|
-
shop_script_undefined_cause: "Script is already turned off in
|
|
73
|
+
shop_script_undefined_cause: "Script is already turned off in store.",
|
|
71
74
|
},
|
|
72
75
|
|
|
73
76
|
create: {
|
|
74
77
|
help: <<~HELP,
|
|
75
78
|
{{command:%1$s create script}}: Creates a script project.
|
|
76
79
|
Usage: {{command:%1$s create script}}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
\s\s{{command:--name=NAME}} Script project name. Use any string.
|
|
81
|
-
\s\s{{command:--extension_point=TYPE}} Extension point name. Allowed values: %2$s.
|
|
80
|
+
Options:
|
|
81
|
+
{{command:--name=NAME}} Script project name. Use any string.
|
|
82
|
+
{{command:--extension_point=TYPE}} Extension point name. Allowed values: %2$s.
|
|
82
83
|
HELP
|
|
83
84
|
|
|
84
85
|
error: {
|
|
@@ -94,14 +95,12 @@ module Script
|
|
|
94
95
|
help: <<~HELP,
|
|
95
96
|
Build the script and put it into production. If you've already pushed a script with the same extension point, use --force to replace the current script with the newest one.
|
|
96
97
|
Usage: {{command:%s push}}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
\s\sOptions:
|
|
100
|
-
\s\s{{command:[--force]}} Forces the script to be overwritten if an instance of it already exists.
|
|
98
|
+
Options:
|
|
99
|
+
{{command:[--force]}} Forces the script to be overwritten if an instance of it already exists.
|
|
101
100
|
HELP
|
|
102
101
|
|
|
103
102
|
error: {
|
|
104
|
-
operation_failed: "
|
|
103
|
+
operation_failed: "Couldn't push script to app.",
|
|
105
104
|
},
|
|
106
105
|
|
|
107
106
|
script_pushed: "{{v}} Script pushed to app (API key: %{api_key}).",
|
|
@@ -109,27 +108,24 @@ module Script
|
|
|
109
108
|
|
|
110
109
|
disable: {
|
|
111
110
|
help: <<~HELP,
|
|
112
|
-
Turn off script in
|
|
111
|
+
Turn off script in store.
|
|
113
112
|
Usage: {{command:%s disable}}
|
|
114
113
|
HELP
|
|
115
114
|
|
|
116
115
|
error: {
|
|
117
116
|
operation_failed: "Can't disable script.",
|
|
118
|
-
not_pushed_to_app: "Can't disable the script because it hasn't been pushed to the app.",
|
|
119
117
|
},
|
|
120
118
|
|
|
121
|
-
script_disabled: "{{v}} Script disabled. Script is turned off in
|
|
119
|
+
script_disabled: "{{v}} Script disabled. Script is turned off in store.",
|
|
122
120
|
},
|
|
123
121
|
|
|
124
122
|
enable: {
|
|
125
123
|
help: <<~HELP,
|
|
126
|
-
Turn on script in
|
|
124
|
+
Turn on script in store.
|
|
127
125
|
Usage: {{command:%s enable}}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
\s\s{{command:--config_props='name1:value1, name2:value2'}} Optional. Define the configuration of your script by passing individual name and value pairs. If used with --config_file, then matching values in --config_props will override those set in the file.
|
|
132
|
-
\s\s{{command:--config_file=<path/to/YAMLFilename>}} Optional. Define the configuration of your script using a YAML formatted file. --config_props values override properties in this file.
|
|
126
|
+
Options:
|
|
127
|
+
{{command:--config_props='name1:value1, name2:value2'}} Optional. Define the configuration of your script by passing individual name and value pairs. If used with --config_file, then matching values in --config_props will override those set in the file.
|
|
128
|
+
{{command:--config_file=<path/to/YAMLFilename>}} Optional. Define the configuration of your script using a YAML formatted file. --config_props values override properties in this file.
|
|
133
129
|
HELP
|
|
134
130
|
|
|
135
131
|
info: "{{*}} A script always remains enabled until you disable it - even after pushing "\
|
|
@@ -138,11 +134,10 @@ module Script
|
|
|
138
134
|
|
|
139
135
|
error: {
|
|
140
136
|
operation_failed: "Can't enable script.",
|
|
141
|
-
not_pushed_to_app: "Can't enable the script because it hasn't been pushed to the app.",
|
|
142
137
|
},
|
|
143
138
|
|
|
144
139
|
script_enabled: "{{v}} Script enabled. %{type} script %{title} in app (API key: %{api_key}) "\
|
|
145
|
-
"is turned on in
|
|
140
|
+
"is turned on in store {{green:%{shop_domain}}}",
|
|
146
141
|
},
|
|
147
142
|
|
|
148
143
|
project_deps: {
|
|
@@ -152,35 +147,11 @@ module Script
|
|
|
152
147
|
installed: "Missing dependencies installed",
|
|
153
148
|
},
|
|
154
149
|
|
|
155
|
-
test: {
|
|
156
|
-
help: <<~HELP,
|
|
157
|
-
Runs unit tests on your script.
|
|
158
|
-
Usage: {{command:%s test}}
|
|
159
|
-
HELP
|
|
160
|
-
|
|
161
|
-
error: {
|
|
162
|
-
operation_failed: "Tests didn't run or they ran with failures.",
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
running: "Running tests",
|
|
166
|
-
success: "{{v}} Tests finished.",
|
|
167
|
-
},
|
|
168
|
-
|
|
169
150
|
forms: {
|
|
170
151
|
create: {
|
|
171
152
|
select_extension_point: "Which extension point do you want to use?",
|
|
172
153
|
script_name: "Script Name",
|
|
173
154
|
},
|
|
174
|
-
script_form: {
|
|
175
|
-
ask_app_api_key_default: "Which app do you want this script to belong to?",
|
|
176
|
-
ask_shop_domain_default: "Select a development store",
|
|
177
|
-
fetching_organizations: "Fetching partner organizations",
|
|
178
|
-
fetched_organizations: "Fetched partner organizations",
|
|
179
|
-
select_organization: "Select partner organization.",
|
|
180
|
-
using_app: "Using app {{green:%{title} (%{api_key})}}.",
|
|
181
|
-
using_development_store: "Using development store {{green:%{domain}}}",
|
|
182
|
-
using_organization: "Partner organization {{green:%s}}.",
|
|
183
|
-
},
|
|
184
155
|
},
|
|
185
156
|
|
|
186
157
|
application: {
|
|
@@ -44,6 +44,10 @@ module Script
|
|
|
44
44
|
cause_of_error: ShopifyCli::Context.message('script.error.invalid_context_cause'),
|
|
45
45
|
help_suggestion: ShopifyCli::Context.message('script.error.invalid_context_help'),
|
|
46
46
|
}
|
|
47
|
+
when Errors::InvalidConfigYAMLError
|
|
48
|
+
{
|
|
49
|
+
cause_of_error: ShopifyCli::Context.message('script.error.invalid_config', e.config_file),
|
|
50
|
+
}
|
|
47
51
|
when Errors::InvalidScriptNameError
|
|
48
52
|
{
|
|
49
53
|
cause_of_error: ShopifyCli::Context.message('script.error.invalid_script_name_cause'),
|
data/lib/rubygems_plugin.rb
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
Gem.post_uninstall do |uninstaller|
|
|
2
2
|
if uninstaller.spec.name == 'shopify-cli'
|
|
3
|
-
|
|
3
|
+
if RUBY_PLATFORM.match(/mingw32/)
|
|
4
|
+
bat_path = File.dirname(RbConfig.ruby)
|
|
5
|
+
bat = "#{bat_path}\\shopify.bat"
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
# delete the auto-generated batch script
|
|
8
|
+
File.unlink(bat)
|
|
9
|
+
else
|
|
10
|
+
require 'fileutils'
|
|
6
11
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
symlink = '/usr/local/bin/shopify'
|
|
13
|
+
|
|
14
|
+
# delete the symbolic link IFF it exists AND it does not point to a file
|
|
15
|
+
# (i.e., it's been left hanging as a result of the uninstall, as expected)
|
|
16
|
+
#
|
|
17
|
+
# if the file still exists, either the uninstall failed (possible but
|
|
18
|
+
# unlikely) OR
|
|
19
|
+
# there's another installation of the gem in another ruby folder that has
|
|
20
|
+
# overwritten it, so leave the symbolic link alone
|
|
21
|
+
system("sudo rm -f #{symlink}") if File.symlink?(symlink) && !File.exist?(symlink)
|
|
22
|
+
end
|
|
15
23
|
end
|
|
16
24
|
|
|
17
25
|
true
|
|
@@ -118,7 +118,7 @@ module ShopifyCli
|
|
|
118
118
|
kwargs = { input: data }
|
|
119
119
|
kwargs[:shop] = @shop
|
|
120
120
|
resp = AdminAPI.query(
|
|
121
|
-
@ctx, "create_#{snake_case_resource_type}", kwargs
|
|
121
|
+
@ctx, "create_#{snake_case_resource_type}", **kwargs
|
|
122
122
|
)
|
|
123
123
|
@ctx.abort(resp['errors']) if resp['errors']
|
|
124
124
|
@ctx.done(message(resp['data'])) unless @silent
|
data/lib/shopify-cli/command.rb
CHANGED
|
@@ -9,17 +9,19 @@ module ShopifyCli
|
|
|
9
9
|
attr_accessor :options
|
|
10
10
|
|
|
11
11
|
class << self
|
|
12
|
-
attr_writer :ctx
|
|
12
|
+
attr_writer :ctx, :task_registry
|
|
13
13
|
|
|
14
14
|
def call(args, command_name)
|
|
15
15
|
subcommand, resolved_name = subcommand_registry.lookup_command(args.first)
|
|
16
16
|
if subcommand
|
|
17
17
|
subcommand.ctx = @ctx
|
|
18
|
+
subcommand.task_registry = @task_registry
|
|
18
19
|
subcommand.call(args, resolved_name, command_name)
|
|
19
20
|
else
|
|
20
21
|
cmd = new(@ctx)
|
|
21
22
|
cmd.options.parse(@_options, args)
|
|
22
23
|
return call_help(command_name) if cmd.options.help
|
|
24
|
+
run_prerequisites
|
|
23
25
|
cmd.call(args, command_name)
|
|
24
26
|
end
|
|
25
27
|
end
|
|
@@ -41,13 +43,16 @@ module ShopifyCli
|
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
def prerequisite_task(*tasks)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
46
|
+
@prerequisite_tasks ||= []
|
|
47
|
+
@prerequisite_tasks += tasks
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def run_prerequisites
|
|
51
|
+
(@prerequisite_tasks || []).each { |task| task_registry[task]&.call(@ctx) }
|
|
47
52
|
end
|
|
48
53
|
|
|
49
|
-
def
|
|
50
|
-
@
|
|
54
|
+
def task_registry
|
|
55
|
+
@task_registry || ShopifyCli::Tasks::Registry
|
|
51
56
|
end
|
|
52
57
|
|
|
53
58
|
def call_help(*cmds)
|
|
@@ -57,6 +62,7 @@ module ShopifyCli
|
|
|
57
62
|
end
|
|
58
63
|
|
|
59
64
|
def initialize(ctx = nil)
|
|
65
|
+
super()
|
|
60
66
|
@ctx = ctx || ShopifyCli::Context.new
|
|
61
67
|
self.options = Options.new
|
|
62
68
|
end
|