diff options
| -rw-r--r-- | lib/bundler/cli/gem.rb | 8 | ||||
| -rw-r--r-- | spec/bundler/commands/newgem_spec.rb | 10 |
2 files changed, 15 insertions, 3 deletions
diff --git a/lib/bundler/cli/gem.rb b/lib/bundler/cli/gem.rb index 783a833e77..e681326401 100644 --- a/lib/bundler/cli/gem.rb +++ b/lib/bundler/cli/gem.rb @@ -430,11 +430,15 @@ module Bundler end def ensure_safe_gem_name(name, constant_array) - if /(^\d)|[A-Z]/.match?(name) - Bundler.ui.error "Invalid gem name #{name} Please give a name which does not start with numbers nor include capital letters." + if /^\d/.match?(name) + Bundler.ui.error "Invalid gem name #{name} Please give a name which does not start with numbers." exit 1 end + if /[A-Z]/.match?(name) + Bundler.ui.warn "Gem names with capital letters are not recommended. Please use only lowercase letters, numbers, and hyphens." + end + constant_name = constant_array.join("::") existing_constant = constant_array.inject(Object) do |c, s| diff --git a/spec/bundler/commands/newgem_spec.rb b/spec/bundler/commands/newgem_spec.rb index 32f5e790af..26e27968b3 100644 --- a/spec/bundler/commands/newgem_spec.rb +++ b/spec/bundler/commands/newgem_spec.rb @@ -1982,9 +1982,17 @@ Usage: "bundle gem NAME [OPTIONS]" it { expect(err).to include("Invalid gem name #{subject}") } end + context "starting with a number" do + subject { "1gem" } + it { expect(err).to include("Invalid gem name #{subject}") } + end + context "including capital letter" do subject { "CAPITAL" } - it { expect(err).to include("Invalid gem name #{subject}") } + it "should warn but not error" do + expect(err).to include("Gem names with capital letters are not recommended") + expect(bundled_app("#{subject}/#{subject}.gemspec")).to exist + end end context "starting with an existing const name" do |
