diff options
-rw-r--r-- | lib/bundler/cli.rb | 13 | ||||
-rw-r--r-- | spec/commands/newgem_spec.rb | 8 |
2 files changed, 20 insertions, 1 deletions
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb index 1fea6fdcb5..eb9362a500 100644 --- a/lib/bundler/cli.rb +++ b/lib/bundler/cli.rb @@ -418,8 +418,19 @@ module Bundler commands["gem"].tap do |gem_command| def gem_command.run(instance, args = []) + arity = 1 # name + require "bundler/cli/gem" - Gem.new(instance.options, *args, instance).run + cmd_args = args + [instance] + cmd_args.unshift(instance.options) + + cmd = begin + Gem.new(*cmd_args) + rescue ArgumentError => e + instance.class.handle_argument_error(self, e, args, arity) + end + + cmd.run end end diff --git a/spec/commands/newgem_spec.rb b/spec/commands/newgem_spec.rb index 26dd3b4d96..766def1644 100644 --- a/spec/commands/newgem_spec.rb +++ b/spec/commands/newgem_spec.rb @@ -748,6 +748,14 @@ describe "bundle gem" do bundle "gem 'foo bar'" expect(out).to end_with("Invalid gem name foo bar -- `Foo bar` is an invalid constant name") end + + it "fails gracefully when multiple names are passed" do + bundle "gem foo bar baz" + expect(out).to eq(<<-E.strip) +ERROR: "bundle gem" was called with arguments ["foo", "bar", "baz"] +Usage: "bundle gem GEM [OPTIONS]" + E + end end describe "#ensure_safe_gem_name" do |