rfix 1.4.1 → 2.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/rfix +78 -34
- data/lib/rfix.rb +17 -28
- data/lib/rfix/branch.rb +3 -25
- data/lib/rfix/branch/base.rb +27 -0
- data/lib/rfix/branch/head.rb +15 -0
- data/lib/rfix/branch/main.rb +33 -0
- data/lib/rfix/branch/name.rb +21 -0
- data/lib/rfix/branch/reference.rb +15 -0
- data/lib/rfix/branch/upstream.rb +17 -0
- data/lib/rfix/cli/command.rb +19 -0
- data/lib/rfix/cli/command/base.rb +65 -0
- data/lib/rfix/cli/command/branch.rb +13 -0
- data/lib/rfix/cli/command/config.rb +22 -0
- data/lib/rfix/cli/command/extension.rb +25 -0
- data/lib/rfix/cli/command/help.rb +11 -0
- data/lib/rfix/cli/command/info.rb +11 -0
- data/lib/rfix/cli/command/lint.rb +17 -0
- data/lib/rfix/cli/command/local.rb +11 -0
- data/lib/rfix/cli/command/origin.rb +11 -0
- data/lib/rfix/cli/command/setup.rb +11 -0
- data/lib/rfix/error.rb +5 -1
- data/lib/rfix/extension/offense.rb +79 -0
- data/lib/rfix/extension/pastel.rb +11 -0
- data/lib/rfix/extension/string.rb +12 -0
- data/lib/rfix/extension/strings.rb +9 -0
- data/lib/rfix/file.rb +6 -41
- data/lib/rfix/file/base.rb +73 -0
- data/lib/rfix/file/deleted.rb +17 -0
- data/lib/rfix/file/ignored.rb +17 -0
- data/lib/rfix/file/tracked.rb +42 -0
- data/lib/rfix/file/untracked.rb +20 -0
- data/lib/rfix/formatter.rb +125 -86
- data/lib/rfix/highlighter.rb +118 -0
- data/lib/rfix/indicator.rb +19 -0
- data/lib/rfix/log.rb +12 -121
- data/lib/rfix/rake/gemfile.rb +111 -0
- data/lib/rfix/rake/paths.rb +25 -23
- data/lib/rfix/rake/support.rb +72 -57
- data/lib/rfix/repository.rb +114 -164
- data/lib/rfix/types.rb +52 -0
- data/lib/rfix/version.rb +1 -1
- data/rfix.gemspec +28 -38
- data/vendor/dry-cli/CHANGELOG.md +191 -0
- data/vendor/dry-cli/CODEOWNERS +1 -0
- data/vendor/dry-cli/CODE_OF_CONDUCT.md +13 -0
- data/vendor/dry-cli/CONTRIBUTING.md +29 -0
- data/vendor/dry-cli/Gemfile +14 -0
- data/vendor/dry-cli/Gemfile.devtools +18 -0
- data/vendor/dry-cli/LICENSE +20 -0
- data/vendor/dry-cli/README.md +29 -0
- data/vendor/dry-cli/Rakefile +13 -0
- data/vendor/dry-cli/bin/console +15 -0
- data/vendor/dry-cli/bin/setup +8 -0
- data/vendor/dry-cli/changelog.yml +97 -0
- data/vendor/dry-cli/docsite/source/arguments.html.md +57 -0
- data/vendor/dry-cli/docsite/source/callbacks.html.md +51 -0
- data/vendor/dry-cli/docsite/source/commands-with-subcommands-and-params.md +86 -0
- data/vendor/dry-cli/docsite/source/commands.html.md +41 -0
- data/vendor/dry-cli/docsite/source/index.html.md +302 -0
- data/vendor/dry-cli/docsite/source/options.html.md +51 -0
- data/vendor/dry-cli/docsite/source/subcommands.html.md +38 -0
- data/vendor/dry-cli/docsite/source/variadic-arguments.html.md +45 -0
- data/vendor/dry-cli/dry-cli.gemspec +36 -0
- data/vendor/dry-cli/lib/dry/cli.rb +224 -0
- data/vendor/dry-cli/lib/dry/cli/banner.rb +135 -0
- data/vendor/dry-cli/lib/dry/cli/command.rb +387 -0
- data/vendor/dry-cli/lib/dry/cli/command_registry.rb +253 -0
- data/vendor/dry-cli/lib/dry/cli/errors.rb +37 -0
- data/vendor/dry-cli/lib/dry/cli/inflector.rb +17 -0
- data/vendor/dry-cli/lib/dry/cli/inline.rb +75 -0
- data/vendor/dry-cli/lib/dry/cli/option.rb +131 -0
- data/vendor/dry-cli/lib/dry/cli/parser.rb +138 -0
- data/vendor/dry-cli/lib/dry/cli/program_name.rb +21 -0
- data/vendor/dry-cli/lib/dry/cli/registry.rb +338 -0
- data/vendor/dry-cli/lib/dry/cli/usage.rb +94 -0
- data/vendor/dry-cli/lib/dry/cli/version.rb +8 -0
- data/vendor/dry-cli/project.yml +13 -0
- data/vendor/dry-cli/spec/integration/commands_spec.rb +14 -0
- data/vendor/dry-cli/spec/integration/inherited_commands_spec.rb +24 -0
- data/vendor/dry-cli/spec/integration/inline_spec.rb +43 -0
- data/vendor/dry-cli/spec/integration/processes_errors_spec.rb +29 -0
- data/vendor/dry-cli/spec/integration/rendering_spec.rb +31 -0
- data/vendor/dry-cli/spec/integration/single_command_spec.rb +81 -0
- data/vendor/dry-cli/spec/integration/subcommands_spec.rb +60 -0
- data/vendor/dry-cli/spec/integration/third_party_gems_spec.rb +18 -0
- data/vendor/dry-cli/spec/spec_helper.rb +15 -0
- data/vendor/dry-cli/spec/support/coverage.rb +15 -0
- data/vendor/dry-cli/spec/support/files.rb +13 -0
- data/vendor/dry-cli/spec/support/fixtures/based +65 -0
- data/vendor/dry-cli/spec/support/fixtures/baz +9 -0
- data/vendor/dry-cli/spec/support/fixtures/baz_command.rb +19 -0
- data/vendor/dry-cli/spec/support/fixtures/foo +588 -0
- data/vendor/dry-cli/spec/support/fixtures/infinites +31 -0
- data/vendor/dry-cli/spec/support/fixtures/inline +20 -0
- data/vendor/dry-cli/spec/support/fixtures/registry.rb +15 -0
- data/vendor/dry-cli/spec/support/fixtures/shared_commands.rb +596 -0
- data/vendor/dry-cli/spec/support/fixtures/with_block.rb +86 -0
- data/vendor/dry-cli/spec/support/fixtures/with_registry.rb +90 -0
- data/vendor/dry-cli/spec/support/fixtures/with_zero_arity_block.rb +87 -0
- data/vendor/dry-cli/spec/support/helpers.rb +37 -0
- data/vendor/dry-cli/spec/support/path.rb +24 -0
- data/vendor/dry-cli/spec/support/rspec.rb +26 -0
- data/vendor/dry-cli/spec/support/rspec_options.rb +16 -0
- data/vendor/dry-cli/spec/support/shared_examples/commands.rb +300 -0
- data/vendor/dry-cli/spec/support/shared_examples/inherited_commands.rb +197 -0
- data/vendor/dry-cli/spec/support/shared_examples/rendering.rb +181 -0
- data/vendor/dry-cli/spec/support/shared_examples/subcommands.rb +226 -0
- data/vendor/dry-cli/spec/support/shared_examples/third_party_gems.rb +49 -0
- data/vendor/dry-cli/spec/support/warnings.rb +10 -0
- data/vendor/dry-cli/spec/unit/dry/cli/cli_spec.rb +123 -0
- data/vendor/dry-cli/spec/unit/dry/cli/inflector_spec.rb +26 -0
- data/vendor/dry-cli/spec/unit/dry/cli/registry_spec.rb +78 -0
- data/vendor/dry-cli/spec/unit/dry/cli/version_spec.rb +7 -0
- data/vendor/strings-ansi/CHANGELOG.md +24 -0
- data/vendor/strings-ansi/CODE_OF_CONDUCT.md +74 -0
- data/vendor/strings-ansi/Gemfile +11 -0
- data/{LICENSE.txt → vendor/strings-ansi/LICENSE.txt} +1 -1
- data/vendor/strings-ansi/README.md +155 -0
- data/vendor/strings-ansi/Rakefile +8 -0
- data/vendor/strings-ansi/appveyor.yml +32 -0
- data/vendor/strings-ansi/bin/console +14 -0
- data/vendor/strings-ansi/bin/setup +8 -0
- data/vendor/strings-ansi/lib/strings-ansi.rb +1 -0
- data/vendor/strings-ansi/lib/strings/ansi.rb +84 -0
- data/vendor/strings-ansi/lib/strings/ansi/extensions.rb +23 -0
- data/vendor/strings-ansi/lib/strings/ansi/version.rb +7 -0
- data/vendor/strings-ansi/spec/fixtures/ansi_codes.yaml +194 -0
- data/vendor/strings-ansi/spec/spec_helper.rb +51 -0
- data/vendor/strings-ansi/spec/unit/ansi_spec.rb +15 -0
- data/vendor/strings-ansi/spec/unit/extensions_spec.rb +19 -0
- data/vendor/strings-ansi/spec/unit/only_ansi_spec.rb +36 -0
- data/vendor/strings-ansi/spec/unit/sanitize_spec.rb +53 -0
- data/vendor/strings-ansi/strings-ansi.gemspec +34 -0
- data/vendor/strings-ansi/tasks/console.rake +11 -0
- data/vendor/strings-ansi/tasks/coverage.rake +11 -0
- data/vendor/strings-ansi/tasks/spec.rake +29 -0
- metadata +274 -188
- data/.github/workflows/main.yml +0 -26
- data/.gitignore +0 -43
- data/.rspec +0 -2
- data/.rubocop.yml +0 -87
- data/.travis.yml +0 -35
- data/Gemfile +0 -2
- data/Gemfile.base +0 -14
- data/Gemfile.base.lock +0 -172
- data/Gemfile.lock +0 -188
- data/Guardfile +0 -16
- data/Makefile +0 -12
- data/README.md +0 -85
- data/Rakefile +0 -31
- data/bin/bundle +0 -114
- data/bin/console +0 -29
- data/bin/guard +0 -29
- data/bin/rake +0 -29
- data/bin/rfix +0 -29
- data/bin/rspec +0 -29
- data/bin/setup +0 -29
- data/ci/Gemfile.rubocop-0.80 +0 -2
- data/ci/Gemfile.rubocop-0.80.lock +0 -170
- data/ci/Gemfile.rubocop-0.81 +0 -2
- data/ci/Gemfile.rubocop-0.81.lock +0 -170
- data/ci/Gemfile.rubocop-0.82 +0 -2
- data/ci/Gemfile.rubocop-0.82.lock +0 -170
- data/ci/Gemfile.rubocop-0.83 +0 -2
- data/ci/Gemfile.rubocop-0.83.lock +0 -168
- data/ci/Gemfile.rubocop-0.84 +0 -2
- data/ci/Gemfile.rubocop-0.84.lock +0 -171
- data/ci/Gemfile.rubocop-0.85 +0 -2
- data/ci/Gemfile.rubocop-0.85.1 +0 -2
- data/ci/Gemfile.rubocop-0.85.1.lock +0 -173
- data/ci/Gemfile.rubocop-0.85.lock +0 -173
- data/lib/rfix/box.rb +0 -112
- data/lib/rfix/branches/base.rb +0 -15
- data/lib/rfix/branches/head.rb +0 -13
- data/lib/rfix/branches/main.rb +0 -28
- data/lib/rfix/branches/name.rb +0 -23
- data/lib/rfix/branches/reference.rb +0 -21
- data/lib/rfix/branches/upstream.rb +0 -13
- data/lib/rfix/cmd.rb +0 -39
- data/lib/rfix/commands/branch.rb +0 -15
- data/lib/rfix/commands/extensions/options.rb +0 -8
- data/lib/rfix/commands/help.rb +0 -7
- data/lib/rfix/commands/helper/args.rb +0 -141
- data/lib/rfix/commands/helper/help.rb +0 -6
- data/lib/rfix/commands/helper/loader.rb +0 -6
- data/lib/rfix/commands/helper/option.rb +0 -0
- data/lib/rfix/commands/helper/params.rb +0 -0
- data/lib/rfix/commands/helper/rubocop.rb +0 -17
- data/lib/rfix/commands/info.rb +0 -30
- data/lib/rfix/commands/lint.rb +0 -22
- data/lib/rfix/commands/local.rb +0 -12
- data/lib/rfix/commands/origin.rb +0 -19
- data/lib/rfix/commands/setup.rb +0 -29
- data/lib/rfix/commands/welcome.rb +0 -24
- data/lib/rfix/deleted.rb +0 -13
- data/lib/rfix/extensions/extensions.rb +0 -18
- data/lib/rfix/extensions/offense.rb +0 -78
- data/lib/rfix/extensions/string.rb +0 -8
- data/lib/rfix/file_cache.rb +0 -59
- data/lib/rfix/git_helper.rb +0 -59
- data/lib/rfix/indentation.rb +0 -39
- data/lib/rfix/loader/bundler.rb +0 -37
- data/lib/rfix/loader/env.rb +0 -33
- data/lib/rfix/loader/spec.rb +0 -41
- data/lib/rfix/no_file.rb +0 -13
- data/lib/rfix/rfix.rb +0 -34
- data/lib/rfix/tracked.rb +0 -72
- data/lib/rfix/tracked_file.rb +0 -16
- data/lib/rfix/untracked.rb +0 -13
- data/resources/ps.png +0 -0
- data/tasks/bump.rake +0 -11
- data/tasks/bundle.rake +0 -17
- data/tasks/complex.rake +0 -54
- data/tasks/execute.rake +0 -38
- data/tasks/libgit2.rake +0 -33
- data/tasks/simple.rake +0 -62
- data/tasks/travis.rake +0 -74
- data/tasks/vendor.rake +0 -34
@@ -0,0 +1,197 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_examples "Inherited commands" do |cli|
|
4
|
+
let(:cli) { cli }
|
5
|
+
|
6
|
+
let(:cmd) { File.basename($PROGRAM_NAME, File.extname($PROGRAM_NAME)) }
|
7
|
+
|
8
|
+
context "with help flag" do
|
9
|
+
it "shows subcommands " do
|
10
|
+
error = capture_error { cli.call(arguments: %w[i]) }
|
11
|
+
expected = <<~DESC
|
12
|
+
Commands:
|
13
|
+
rspec i addons APP # Lists your add-ons and attachments
|
14
|
+
rspec i logs APP # Display recent log output
|
15
|
+
rspec i run APP CMD # Run a one-off process inside your app
|
16
|
+
rspec i subrun APP CMD
|
17
|
+
DESC
|
18
|
+
expect(error).to eq(expected)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "shows run's help" do
|
22
|
+
output = capture_output { cli.call(arguments: %w[i run --help]) }
|
23
|
+
expected = <<~DESC
|
24
|
+
Command:
|
25
|
+
#{cmd} i run
|
26
|
+
|
27
|
+
Usage:
|
28
|
+
#{cmd} i run APP CMD
|
29
|
+
|
30
|
+
Description:
|
31
|
+
Run a one-off process inside your app
|
32
|
+
|
33
|
+
Arguments:
|
34
|
+
APP # REQUIRED Application name
|
35
|
+
CMD # REQUIRED Command to execute
|
36
|
+
|
37
|
+
Options:
|
38
|
+
--verbosity=VALUE # Verbosity level, default: "INFO"
|
39
|
+
--help, -h # Print this help
|
40
|
+
DESC
|
41
|
+
expect(output).to eq(expected)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "shows subrun's help" do
|
45
|
+
output = capture_output { cli.call(arguments: %w[i subrun --help]) }
|
46
|
+
expected = <<~DESC
|
47
|
+
Command:
|
48
|
+
#{cmd} i subrun
|
49
|
+
|
50
|
+
Usage:
|
51
|
+
#{cmd} i subrun APP CMD
|
52
|
+
|
53
|
+
Arguments:
|
54
|
+
APP # REQUIRED Application name
|
55
|
+
CMD # REQUIRED Command to execute
|
56
|
+
|
57
|
+
Options:
|
58
|
+
--verbosity=VALUE # Verbosity level, default: "INFO"
|
59
|
+
--help, -h # Print this help
|
60
|
+
DESC
|
61
|
+
expect(output).to eq(expected)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "shows addon's help" do
|
65
|
+
output = capture_output { cli.call(arguments: %w[i addons --help]) }
|
66
|
+
expected = <<~DESC
|
67
|
+
Command:
|
68
|
+
#{cmd} i addons
|
69
|
+
|
70
|
+
Usage:
|
71
|
+
#{cmd} i addons APP
|
72
|
+
|
73
|
+
Description:
|
74
|
+
Lists your add-ons and attachments
|
75
|
+
|
76
|
+
Arguments:
|
77
|
+
APP # REQUIRED Application name
|
78
|
+
|
79
|
+
Options:
|
80
|
+
--verbosity=VALUE # Verbosity level, default: "INFO"
|
81
|
+
--[no-]json # return add-ons in json format, default: false
|
82
|
+
--help, -h # Print this help
|
83
|
+
|
84
|
+
Examples:
|
85
|
+
#{cmd} i addons APP_NAME
|
86
|
+
#{cmd} i addons APP_NAME --json
|
87
|
+
DESC
|
88
|
+
expect(output).to eq(expected)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "shows log's help" do
|
92
|
+
output = capture_output { cli.call(arguments: %w[i logs --help]) }
|
93
|
+
expected = <<~DESC
|
94
|
+
Command:
|
95
|
+
#{cmd} i logs
|
96
|
+
|
97
|
+
Usage:
|
98
|
+
#{cmd} i logs APP
|
99
|
+
|
100
|
+
Description:
|
101
|
+
Display recent log output
|
102
|
+
|
103
|
+
Arguments:
|
104
|
+
APP # REQUIRED Application name
|
105
|
+
|
106
|
+
Options:
|
107
|
+
--verbosity=VALUE # Verbosity level, default: "INFO"
|
108
|
+
--num=VALUE # number of lines to display
|
109
|
+
--[no-]tail # continually stream log
|
110
|
+
--help, -h # Print this help
|
111
|
+
|
112
|
+
Examples:
|
113
|
+
#{cmd} i logs APP_NAME
|
114
|
+
#{cmd} i logs APP_NAME --num=50
|
115
|
+
#{cmd} i logs APP_NAME --tail
|
116
|
+
DESC
|
117
|
+
expect(output).to eq(expected)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
context "with inherited arguments" do
|
122
|
+
it "run expects APP_NAME and CMD_NAME" do
|
123
|
+
output = capture_output { cli.call(arguments: %w[i run application_name command_name]) }
|
124
|
+
expect(output).to include("App: application_name - Command: command_name")
|
125
|
+
end
|
126
|
+
|
127
|
+
it "subrun expects APP_NAME and CMD_NAME" do
|
128
|
+
output = capture_output { cli.call(arguments: %w[i subrun application_name command_name]) }
|
129
|
+
expect(output).to include("App: application_name - Command: command_name")
|
130
|
+
end
|
131
|
+
|
132
|
+
it "addons expects APP_NAME" do
|
133
|
+
output = capture_output { cli.call(arguments: %w[i addons application_name]) }
|
134
|
+
expect(output).to include("App: application_name")
|
135
|
+
end
|
136
|
+
|
137
|
+
it "logs expects APP_NAME" do
|
138
|
+
output = capture_output { cli.call(arguments: %w[i logs application_name]) }
|
139
|
+
expect(output).to include("App: application_name")
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
context "with inherited options" do
|
144
|
+
it "run has default verbosity_level" do
|
145
|
+
output = capture_output { cli.call(arguments: %w[i run application_name command_name]) }
|
146
|
+
expect(output).to include('Options: {:verbosity=>"INFO"}')
|
147
|
+
end
|
148
|
+
|
149
|
+
it "subrun has default verbosity_level too" do
|
150
|
+
output = capture_output { cli.call(arguments: %w[i subrun application_name command_name]) }
|
151
|
+
expect(output).to include('Options: {:verbosity=>"INFO"}')
|
152
|
+
end
|
153
|
+
|
154
|
+
it "addons has verbosity_level set to debug" do
|
155
|
+
output = capture_output do
|
156
|
+
cli.call(arguments: %w[i addons application_name --verbosity=DEBUG])
|
157
|
+
end
|
158
|
+
expect(output).to include("Options: {:verbosity=>\"DEBUG\", :json=>false}")
|
159
|
+
end
|
160
|
+
|
161
|
+
it "logs has verbosity_level set to WARNING" do
|
162
|
+
output = capture_output do
|
163
|
+
cli.call(arguments: %w[i logs application_name --verbosity=WARNING])
|
164
|
+
end
|
165
|
+
expect(output).to include("Options: {:verbosity=>\"WARNING\"}")
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
context "with description" do
|
170
|
+
it "subclass does not inherit it" do
|
171
|
+
output = capture_output { cli.call(arguments: %w[i run --help]) }
|
172
|
+
expect(output).not_to include("Base description")
|
173
|
+
end
|
174
|
+
|
175
|
+
it "subclasses subclass does not inherit it" do
|
176
|
+
output = capture_output { cli.call(arguments: %w[i subrun --help]) }
|
177
|
+
expect(output).not_to include("Run a one-off process inside your app")
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
context "with example" do
|
182
|
+
it "subclass does not inherit it" do
|
183
|
+
output = capture_output { cli.call(arguments: %w[i logs --help]) }
|
184
|
+
expect(output).not_to include("Base example")
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
context "with multible subclasses of Dry::CLI::Command" do
|
189
|
+
it "subclasses do nod share options" do
|
190
|
+
output = capture_output { cli.call(arguments: %w[i logs application_name --tail --num=50]) }
|
191
|
+
expect(output).not_to include(":json=>false}")
|
192
|
+
|
193
|
+
output = capture_output { cli.call(arguments: %w[i addons application_name]) }
|
194
|
+
expect(output).not_to include(":tail=>false}")
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_examples "Rendering" do |cli|
|
4
|
+
let(:cli) { cli }
|
5
|
+
|
6
|
+
let(:cmd) { File.basename($PROGRAM_NAME, File.extname($PROGRAM_NAME)) }
|
7
|
+
|
8
|
+
it "prints required params" do
|
9
|
+
error = capture_error { cli.call }
|
10
|
+
expected = <<~DESC
|
11
|
+
Commands:
|
12
|
+
#{cmd} assets [SUBCOMMAND]
|
13
|
+
#{cmd} callbacks DIR # Command with callbacks
|
14
|
+
#{cmd} console # Starts Foo console
|
15
|
+
#{cmd} db [SUBCOMMAND]
|
16
|
+
#{cmd} destroy [SUBCOMMAND]
|
17
|
+
#{cmd} exec TASK [DIRS] # Execute a task
|
18
|
+
#{cmd} generate [SUBCOMMAND]
|
19
|
+
#{cmd} greeting [RESPONSE]
|
20
|
+
#{cmd} hello # Print a greeting
|
21
|
+
#{cmd} inherited [SUBCOMMAND]
|
22
|
+
#{cmd} new PROJECT # Generate a new Foo project
|
23
|
+
#{cmd} options-with-aliases # Accepts options with aliases
|
24
|
+
#{cmd} root-command [ARGUMENT|SUBCOMMAND] # Root command with arguments and subcommands
|
25
|
+
#{cmd} routes # Print routes
|
26
|
+
#{cmd} server # Start Foo server (only for development)
|
27
|
+
#{cmd} sub [SUBCOMMAND]
|
28
|
+
#{cmd} variadic [SUBCOMMAND]
|
29
|
+
#{cmd} version # Print Foo version
|
30
|
+
#{cmd} with-initializer
|
31
|
+
DESC
|
32
|
+
|
33
|
+
expect(error).to eq(expected)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "prints required params with labels" do
|
37
|
+
error = capture_error { cli.call(arguments: ["destroy"]) }
|
38
|
+
|
39
|
+
expected = <<~DESC
|
40
|
+
Commands:
|
41
|
+
#{cmd} destroy action APP ACTION # Destroy an action from app
|
42
|
+
#{cmd} destroy app APP # Destroy an app
|
43
|
+
#{cmd} destroy mailer MAILER # Destroy a mailer
|
44
|
+
#{cmd} destroy migration MIGRATION # Destroy a migration
|
45
|
+
#{cmd} destroy model MODEL # Destroy a model
|
46
|
+
DESC
|
47
|
+
|
48
|
+
expect(error).to eq(expected)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "prints available commands for unknown subcommand" do
|
52
|
+
error = capture_error { cli.call(arguments: %w[generate unknown]) }
|
53
|
+
|
54
|
+
expected = <<~DESC
|
55
|
+
Commands:
|
56
|
+
#{cmd} generate action APP ACTION # Generate an action for app
|
57
|
+
#{cmd} generate app APP # Generate an app
|
58
|
+
#{cmd} generate mailer MAILER # Generate a mailer
|
59
|
+
#{cmd} generate migration MIGRATION # Generate a migration
|
60
|
+
#{cmd} generate model MODEL # Generate a model
|
61
|
+
#{cmd} generate secret [APP] # Generate session secret
|
62
|
+
#{cmd} generate webpack # Generate webpack configuration
|
63
|
+
DESC
|
64
|
+
|
65
|
+
expect(error).to eq(expected)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "prints available commands for unknown command" do
|
69
|
+
error = capture_error { cli.call(arguments: ["unknown"]) }
|
70
|
+
|
71
|
+
expected = <<~DESC
|
72
|
+
Commands:
|
73
|
+
#{cmd} assets [SUBCOMMAND]
|
74
|
+
#{cmd} callbacks DIR # Command with callbacks
|
75
|
+
#{cmd} console # Starts Foo console
|
76
|
+
#{cmd} db [SUBCOMMAND]
|
77
|
+
#{cmd} destroy [SUBCOMMAND]
|
78
|
+
#{cmd} exec TASK [DIRS] # Execute a task
|
79
|
+
#{cmd} generate [SUBCOMMAND]
|
80
|
+
#{cmd} greeting [RESPONSE]
|
81
|
+
#{cmd} hello # Print a greeting
|
82
|
+
#{cmd} inherited [SUBCOMMAND]
|
83
|
+
#{cmd} new PROJECT # Generate a new Foo project
|
84
|
+
#{cmd} options-with-aliases # Accepts options with aliases
|
85
|
+
#{cmd} root-command [ARGUMENT|SUBCOMMAND] # Root command with arguments and subcommands
|
86
|
+
#{cmd} routes # Print routes
|
87
|
+
#{cmd} server # Start Foo server (only for development)
|
88
|
+
#{cmd} sub [SUBCOMMAND]
|
89
|
+
#{cmd} variadic [SUBCOMMAND]
|
90
|
+
#{cmd} version # Print Foo version
|
91
|
+
#{cmd} with-initializer
|
92
|
+
DESC
|
93
|
+
|
94
|
+
expect(error).to eq(expected)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "prints first level" do
|
98
|
+
error = capture_error { cli.call }
|
99
|
+
|
100
|
+
expected = <<~DESC
|
101
|
+
Commands:
|
102
|
+
#{cmd} assets [SUBCOMMAND]
|
103
|
+
#{cmd} callbacks DIR # Command with callbacks
|
104
|
+
#{cmd} console # Starts Foo console
|
105
|
+
#{cmd} db [SUBCOMMAND]
|
106
|
+
#{cmd} destroy [SUBCOMMAND]
|
107
|
+
#{cmd} exec TASK [DIRS] # Execute a task
|
108
|
+
#{cmd} generate [SUBCOMMAND]
|
109
|
+
#{cmd} greeting [RESPONSE]
|
110
|
+
#{cmd} hello # Print a greeting
|
111
|
+
#{cmd} inherited [SUBCOMMAND]
|
112
|
+
#{cmd} new PROJECT # Generate a new Foo project
|
113
|
+
#{cmd} options-with-aliases # Accepts options with aliases
|
114
|
+
#{cmd} root-command [ARGUMENT|SUBCOMMAND] # Root command with arguments and subcommands
|
115
|
+
#{cmd} routes # Print routes
|
116
|
+
#{cmd} server # Start Foo server (only for development)
|
117
|
+
#{cmd} sub [SUBCOMMAND]
|
118
|
+
#{cmd} variadic [SUBCOMMAND]
|
119
|
+
#{cmd} version # Print Foo version
|
120
|
+
#{cmd} with-initializer
|
121
|
+
DESC
|
122
|
+
|
123
|
+
expect(error).to eq(expected)
|
124
|
+
end
|
125
|
+
|
126
|
+
it "prints subcommand's commands" do
|
127
|
+
error = capture_error { cli.call(arguments: ["generate"]) }
|
128
|
+
|
129
|
+
expected = <<~DESC
|
130
|
+
Commands:
|
131
|
+
#{cmd} generate action APP ACTION # Generate an action for app
|
132
|
+
#{cmd} generate app APP # Generate an app
|
133
|
+
#{cmd} generate mailer MAILER # Generate a mailer
|
134
|
+
#{cmd} generate migration MIGRATION # Generate a migration
|
135
|
+
#{cmd} generate model MODEL # Generate a model
|
136
|
+
#{cmd} generate secret [APP] # Generate session secret
|
137
|
+
#{cmd} generate webpack # Generate webpack configuration
|
138
|
+
DESC
|
139
|
+
|
140
|
+
expect(error).to eq(expected)
|
141
|
+
end
|
142
|
+
|
143
|
+
it "prints subcommand's subcommand" do
|
144
|
+
error = capture_error { cli.call(arguments: %w[generate application]) }
|
145
|
+
|
146
|
+
expected = <<~DESC
|
147
|
+
Commands:
|
148
|
+
#{cmd} generate action APP ACTION # Generate an action for app
|
149
|
+
#{cmd} generate app APP # Generate an app
|
150
|
+
#{cmd} generate mailer MAILER # Generate a mailer
|
151
|
+
#{cmd} generate migration MIGRATION # Generate a migration
|
152
|
+
#{cmd} generate model MODEL # Generate a model
|
153
|
+
#{cmd} generate secret [APP] # Generate session secret
|
154
|
+
#{cmd} generate webpack # Generate webpack configuration
|
155
|
+
DESC
|
156
|
+
expect(error).to eq(expected)
|
157
|
+
end
|
158
|
+
|
159
|
+
it "prints list options when calling help" do
|
160
|
+
output = capture_output { cli.call(arguments: %w[options-with-aliases --help]) }
|
161
|
+
|
162
|
+
expected = <<~DESC
|
163
|
+
Command:
|
164
|
+
#{cmd} options-with-aliases
|
165
|
+
|
166
|
+
Usage:
|
167
|
+
#{cmd} options-with-aliases
|
168
|
+
|
169
|
+
Description:
|
170
|
+
Accepts options with aliases
|
171
|
+
|
172
|
+
Options:
|
173
|
+
--url=VALUE, -u VALUE # The action URL
|
174
|
+
--[no-]flag, -f # The flag
|
175
|
+
--[no-]opt, -o # The opt, default: false
|
176
|
+
--help, -h # Print this help
|
177
|
+
DESC
|
178
|
+
|
179
|
+
expect(output).to eq(expected)
|
180
|
+
end
|
181
|
+
end
|
@@ -0,0 +1,226 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.shared_examples "Subcommands" do |cli|
|
4
|
+
let(:cli) { cli }
|
5
|
+
|
6
|
+
let(:cmd) { File.basename($PROGRAM_NAME, File.extname($PROGRAM_NAME)) }
|
7
|
+
|
8
|
+
it "calls subcommand" do
|
9
|
+
error = capture_error { cli.call(arguments: %w[generate model]) }
|
10
|
+
expected = <<~DESC
|
11
|
+
ERROR: "#{cmd} generate model" was called with no arguments
|
12
|
+
Usage: "#{cmd} generate model MODEL"
|
13
|
+
DESC
|
14
|
+
|
15
|
+
expect(error).to eq(expected)
|
16
|
+
end
|
17
|
+
|
18
|
+
context "works with params" do
|
19
|
+
it "without params" do
|
20
|
+
error = capture_error { cli.call(arguments: %w[generate model]) }
|
21
|
+
expected = <<~DESC
|
22
|
+
ERROR: "#{cmd} generate model" was called with no arguments
|
23
|
+
Usage: "#{cmd} generate model MODEL"
|
24
|
+
DESC
|
25
|
+
|
26
|
+
expect(error).to eq(expected)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "a param using space" do
|
30
|
+
output = capture_output { cli.call(arguments: %w[server --port 2306]) }
|
31
|
+
expect(output).to eq(
|
32
|
+
"server - {:code_reloading=>true, :deps=>[\"dep1\", \"dep2\"], :port=>\"2306\"}\n"
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "a param using equal sign" do
|
37
|
+
output = capture_output { cli.call(arguments: %w[server --port=2306]) }
|
38
|
+
expect(output).to eq(
|
39
|
+
"server - {:code_reloading=>true, :deps=>[\"dep1\", \"dep2\"], :port=>\"2306\"}\n"
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "a param using alias" do
|
44
|
+
output = capture_output { cli.call(arguments: %w[server -p 2306]) }
|
45
|
+
expect(output).to eq(
|
46
|
+
"server - {:code_reloading=>true, :deps=>[\"dep1\", \"dep2\"], :port=>\"2306\"}\n"
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "with help param" do
|
51
|
+
output = capture_output { cli.call(arguments: %w[generate model --help]) }
|
52
|
+
|
53
|
+
expected = <<~DESC
|
54
|
+
Command:
|
55
|
+
#{cmd} generate model
|
56
|
+
|
57
|
+
Usage:
|
58
|
+
#{cmd} generate model MODEL
|
59
|
+
|
60
|
+
Description:
|
61
|
+
Generate a model
|
62
|
+
|
63
|
+
Arguments:
|
64
|
+
MODEL # REQUIRED Model name (eg. `user`)
|
65
|
+
|
66
|
+
Options:
|
67
|
+
--[no-]skip-migration # Skip migration, default: false
|
68
|
+
--help, -h # Print this help
|
69
|
+
|
70
|
+
Examples:
|
71
|
+
#{cmd} generate model user # Generate `User` entity, `UserRepository` repository, and the migration
|
72
|
+
#{cmd} generate model user --skip-migration # Generate `User` entity and `UserRepository` repository
|
73
|
+
DESC
|
74
|
+
|
75
|
+
expect(output).to eq(expected)
|
76
|
+
end
|
77
|
+
|
78
|
+
context "with required params" do
|
79
|
+
it "only one param" do
|
80
|
+
output = capture_output { cli.call(arguments: %w[generate model user]) }
|
81
|
+
expect(output).to eq("generate model - model: user\n")
|
82
|
+
end
|
83
|
+
|
84
|
+
it "more than one param" do
|
85
|
+
output = capture_output { cli.call(arguments: %w[destroy action web users#index]) }
|
86
|
+
expect(output).to eq("destroy action - app: web, action: users#index\n")
|
87
|
+
end
|
88
|
+
|
89
|
+
it "more than one param and with optional params" do
|
90
|
+
output = capture_output { cli.call(arguments: %w[generate action web users#index --url=/signin]) } # rubocop:disable Metrics/LineLength
|
91
|
+
expect(output).to eq("generate action - app: web, action: users#index, options: {:skip_view=>false, :url=>\"/signin\"}\n") # rubocop:disable Metrics/LineLength
|
92
|
+
end
|
93
|
+
|
94
|
+
it "more than one param and with boolean params" do
|
95
|
+
output = capture_output { cli.call(arguments: %w[generate action web users#index --skip-view --url=/signin]) } # rubocop:disable Metrics/LineLength
|
96
|
+
expect(output).to eq("generate action - app: web, action: users#index, options: {:skip_view=>true, :url=>\"/signin\"}\n") # rubocop:disable Metrics/LineLength
|
97
|
+
end
|
98
|
+
|
99
|
+
it "more than required params" do
|
100
|
+
output = capture_output { cli.call(arguments: %w[destroy action web users#index unexpected_param]) } # rubocop:disable Metrics/LineLength
|
101
|
+
expect(output).to eq("destroy action - app: web, action: users#index\n")
|
102
|
+
end
|
103
|
+
|
104
|
+
it "an error is displayed if there aren't required params" do
|
105
|
+
error = capture_error { cli.call(arguments: %w[destroy action]) }
|
106
|
+
expected = <<~DESC
|
107
|
+
ERROR: "#{cmd} destroy action" was called with no arguments
|
108
|
+
Usage: "#{cmd} destroy action APP ACTION"
|
109
|
+
DESC
|
110
|
+
|
111
|
+
expect(error).to eq(expected)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "an error is displayed if there are some required params" do
|
115
|
+
error = capture_error { cli.call(arguments: %w[destroy action web]) }
|
116
|
+
expected = <<~DESC
|
117
|
+
ERROR: "#{cmd} destroy action" was called with arguments [\"web\"]
|
118
|
+
Usage: "#{cmd} destroy action APP ACTION"
|
119
|
+
DESC
|
120
|
+
|
121
|
+
expect(error).to eq(expected)
|
122
|
+
end
|
123
|
+
|
124
|
+
context "and a default value" do
|
125
|
+
it "returns the default value if nothing is passed" do
|
126
|
+
output = capture_output { cli.call(arguments: %w[db rollback]) }
|
127
|
+
|
128
|
+
expect(output).to eq("1\n")
|
129
|
+
end
|
130
|
+
|
131
|
+
it "returns the passed value" do
|
132
|
+
output = capture_output { cli.call(arguments: %w[db rollback 3]) }
|
133
|
+
|
134
|
+
expect(output).to eq("3\n")
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
context "works with root command" do
|
141
|
+
it "shows help" do
|
142
|
+
output = capture_output { cli.call(arguments: %w[root-command sub-command -h]) }
|
143
|
+
expected = <<~DESC
|
144
|
+
Command:
|
145
|
+
rspec root-command sub-command
|
146
|
+
|
147
|
+
Usage:
|
148
|
+
rspec root-command sub-command ROOT_COMMAND_SUB_COMMAND_ARGUMENT
|
149
|
+
|
150
|
+
Description:
|
151
|
+
Root command sub command
|
152
|
+
|
153
|
+
Arguments:
|
154
|
+
ROOT_COMMAND_SUB_COMMAND_ARGUMENT # REQUIRED Root command sub command argument
|
155
|
+
|
156
|
+
Options:
|
157
|
+
--root-command-sub-command-option=VALUE # Root command sub command option
|
158
|
+
--help, -h # Print this help
|
159
|
+
DESC
|
160
|
+
|
161
|
+
expect(output).to eq(expected)
|
162
|
+
|
163
|
+
output = capture_output { cli.call(arguments: %w[root-command sub-command --help]) }
|
164
|
+
expect(output).to eq(expected)
|
165
|
+
end
|
166
|
+
|
167
|
+
context "works with params" do
|
168
|
+
it "without params" do
|
169
|
+
error = capture_error { cli.call(arguments: %w[root-command sub-command]) }
|
170
|
+
expected = <<~DESC
|
171
|
+
ERROR: "rspec root-command sub-command" was called with no arguments
|
172
|
+
Usage: "rspec root-command sub-command ROOT_COMMAND_SUB_COMMAND_ARGUMENT"
|
173
|
+
DESC
|
174
|
+
|
175
|
+
expect(error).to eq(expected)
|
176
|
+
end
|
177
|
+
|
178
|
+
it "with params" do
|
179
|
+
output = capture_output {
|
180
|
+
cli.call(arguments: ["root-command", "sub-command", '"hello world"'])
|
181
|
+
}
|
182
|
+
expected = <<~DESC
|
183
|
+
I'm a root-command sub-command argument:"hello world"
|
184
|
+
I'm a root-command sub-command option:
|
185
|
+
DESC
|
186
|
+
|
187
|
+
expect(output).to eq(expected)
|
188
|
+
end
|
189
|
+
|
190
|
+
it "with option using space" do
|
191
|
+
output = capture_output {
|
192
|
+
cli.call(arguments: [
|
193
|
+
"root-command",
|
194
|
+
"sub-command",
|
195
|
+
'"hello world"',
|
196
|
+
"--root-command-sub-command-option",
|
197
|
+
'"bye world"'
|
198
|
+
])
|
199
|
+
}
|
200
|
+
expected = <<~DESC
|
201
|
+
I'm a root-command sub-command argument:"hello world"
|
202
|
+
I'm a root-command sub-command option:"bye world"
|
203
|
+
DESC
|
204
|
+
|
205
|
+
expect(output).to eq(expected)
|
206
|
+
end
|
207
|
+
|
208
|
+
it "with option using equal sign" do
|
209
|
+
output = capture_output {
|
210
|
+
cli.call(arguments: [
|
211
|
+
"root-command",
|
212
|
+
"sub-command",
|
213
|
+
'"hello world"',
|
214
|
+
'--root-command-sub-command-option="bye world"'
|
215
|
+
])
|
216
|
+
}
|
217
|
+
expected = <<~DESC
|
218
|
+
I'm a root-command sub-command argument:"hello world"
|
219
|
+
I'm a root-command sub-command option:"bye world"
|
220
|
+
DESC
|
221
|
+
|
222
|
+
expect(output).to eq(expected)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|