Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions lib/dry/cli/option.rb
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,8 @@ def alias_names

# @api private
def valid_value?(value)
return true if value.nil? && !required?

available_values = values
return true if available_values.nil?

Expand Down
11 changes: 11 additions & 0 deletions spec/support/fixtures/shared_commands.rb
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,17 @@ def call(steps:, **)
puts steps
end
end

class Vacuum < Dry::CLI::Command
desc "Vacuum the database"

argument :mode, desc: "Optional mode of vacuum", required: true, values: [:full, :freeze, :verbose]
argument :parallel, desc: "Parallel workers", values: [1, 2, 3]

def call(mode:, parallel: nil, **)
puts "mode: #{mode}, parallel: #{parallel}"
end
end
end

module Destroy
Expand Down
15 changes: 8 additions & 7 deletions spec/support/fixtures/with_block.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,15 @@
cli.register "callbacks", Webpack::CLI::CallbacksCommand

cli.register "db" do |prefix|
prefix.register "apply", Commands::DB::Apply
prefix.register "console", Commands::DB::Console
prefix.register "create", Commands::DB::Create
prefix.register "drop", Commands::DB::Drop
prefix.register "migrate", Commands::DB::Migrate
prefix.register "prepare", Commands::DB::Prepare
prefix.register "version", Commands::DB::Version
prefix.register "apply", Commands::DB::Apply
prefix.register "console", Commands::DB::Console
prefix.register "create", Commands::DB::Create
prefix.register "drop", Commands::DB::Drop
prefix.register "migrate", Commands::DB::Migrate
prefix.register "prepare", Commands::DB::Prepare
prefix.register "version", Commands::DB::Version
prefix.register "rollback", Commands::DB::Rollback
prefix.register "vacuum", Commands::DB::Vacuum
end

cli.register "destroy", aliases: ["d"] do |prefix|
Expand Down
15 changes: 8 additions & 7 deletions spec/support/fixtures/with_registry.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,15 @@ module Commands
register "assets precompile", ::Commands::Assets::Precompile
register "console", ::Commands::Console
register "db" do |prefix|
prefix.register "apply", ::Commands::DB::Apply
prefix.register "console", ::Commands::DB::Console
prefix.register "create", ::Commands::DB::Create
prefix.register "drop", ::Commands::DB::Drop
prefix.register "migrate", ::Commands::DB::Migrate
prefix.register "prepare", ::Commands::DB::Prepare
prefix.register "version", ::Commands::DB::Version
prefix.register "apply", ::Commands::DB::Apply
prefix.register "console", ::Commands::DB::Console
prefix.register "create", ::Commands::DB::Create
prefix.register "drop", ::Commands::DB::Drop
prefix.register "migrate", ::Commands::DB::Migrate
prefix.register "prepare", ::Commands::DB::Prepare
prefix.register "version", ::Commands::DB::Version
prefix.register "rollback", ::Commands::DB::Rollback
prefix.register "vacuum", ::Commands::DB::Vacuum
end

register "destroy", aliases: ["d"] do |prefix|
Expand Down
15 changes: 8 additions & 7 deletions spec/support/fixtures/with_zero_arity_block.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,15 @@
register "callbacks", Webpack::CLI::CallbacksCommand

register "db" do
register "apply", Commands::DB::Apply
register "console", Commands::DB::Console
register "create", Commands::DB::Create
register "drop", Commands::DB::Drop
register "migrate", Commands::DB::Migrate
register "prepare", Commands::DB::Prepare
register "version", Commands::DB::Version
register "apply", Commands::DB::Apply
register "console", Commands::DB::Console
register "create", Commands::DB::Create
register "drop", Commands::DB::Drop
register "migrate", Commands::DB::Migrate
register "prepare", Commands::DB::Prepare
register "version", Commands::DB::Version
register "rollback", Commands::DB::Rollback
register "vacuum", Commands::DB::Vacuum
end

register "destroy", aliases: ["d"] do
Expand Down
18 changes: 16 additions & 2 deletions spec/support/shared_examples/commands.rb
Original file line number Diff line number Diff line change
Expand Up @@ -156,15 +156,15 @@
expect(output).to eq("exec - Task: test - Directories: []\n")
end

it "capture all the remaining arguments" do
it "captures all the remaining arguments" do
output = capture_output { cli.call(arguments: %w[exec test api admin]) }
expect(output).to eq("exec - Task: test - Directories: [\"api\", \"admin\"]\n")
end
end

context "with supported values" do
context "and with supported value passed" do
it "call the command with the option" do
it "calls the command with the option" do
output = capture_output { cli.call(arguments: %w[console --engine=pry]) }
expect(output).to eq("console - engine: pry\n")
end
Expand All @@ -183,6 +183,20 @@
expect(error).to eq("ERROR: \"rspec db rollback\" was called with arguments \"4\"\n")
end
end

context "without a required argument limited by values array" do
it "prints error" do
error = capture_error { cli.call(arguments: %w[db vacuum]) }
expect(error).to eq("ERROR: \"rspec db vacuum\" was called with arguments \"\"\n")
end
end

context "without an optional argument limited by values array" do
it "can be used" do
output = capture_output { cli.call(arguments: %w[db vacuum full]) }
expect(output).to eq("mode: full, parallel: \n")
end
end
end

it "with help param" do
Expand Down