summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Fischbach <mail@timfischbach.de>2015-07-05 22:18:42 +0200
committerAndre Arko <andre@arko.net>2015-07-27 13:22:41 -0700
commit1691f6ab287d047913b9cee3c25e7e2493311034 (patch)
tree596ca851ca66291846cfbad59b9bcd9f13c7f7a8
parent0433b83757cf8e5e424221f8752bf59b1ac5d693 (diff)
downloadbundler-1691f6ab287d047913b9cee3c25e7e2493311034.tar.gz
Pessimistic test framework versions for bundle gem command
Use a pessimistic version requirement for RSpec and Minitest in gemspecs generated by the `bundle gem` command. It is best practice to at least depend on major versions of development dependency gems. * Hard code major versions of the two testing frameworks. * Add a spec that tests that only specific version requirements are used in development dependencies.
-rw-r--r--lib/bundler/cli/gem.rb7
-rw-r--r--lib/bundler/templates/newgem/newgem.gemspec.tt2
-rw-r--r--spec/commands/newgem_spec.rb12
3 files changed, 20 insertions, 1 deletions
diff --git a/lib/bundler/cli/gem.rb b/lib/bundler/cli/gem.rb
index cef64f27a8..4a4d0d1ac5 100644
--- a/lib/bundler/cli/gem.rb
+++ b/lib/bundler/cli/gem.rb
@@ -2,6 +2,11 @@ require "pathname"
module Bundler
class CLI::Gem
+ TEST_FRAMEWORK_VERSIONS = {
+ 'rspec' => '3.0',
+ 'minitest' => '5.0'
+ }
+
attr_reader :options, :gem_name, :thor, :name, :target
def initialize(options, gem_name, thor)
@@ -63,6 +68,8 @@ module Bundler
if test_framework = ask_and_set_test_framework
config[:test] = test_framework
+ config[:test_framework_version] = TEST_FRAMEWORK_VERSIONS[test_framework]
+
templates.merge!(".travis.yml.tt" => ".travis.yml")
case test_framework
diff --git a/lib/bundler/templates/newgem/newgem.gemspec.tt b/lib/bundler/templates/newgem/newgem.gemspec.tt
index 89f669120b..c35ee72dff 100644
--- a/lib/bundler/templates/newgem/newgem.gemspec.tt
+++ b/lib/bundler/templates/newgem/newgem.gemspec.tt
@@ -38,6 +38,6 @@ Gem::Specification.new do |spec|
spec.add_development_dependency "rake-compiler"
<%- end -%>
<%- if config[:test] -%>
- spec.add_development_dependency "<%=config[:test]%>"
+ spec.add_development_dependency "<%=config[:test]%>", "~> <%=config[:test_framework_version]%>"
<%- end -%>
end
diff --git a/spec/commands/newgem_spec.rb b/spec/commands/newgem_spec.rb
index 8acde88b5e..4df2760696 100644
--- a/spec/commands/newgem_spec.rb
+++ b/spec/commands/newgem_spec.rb
@@ -54,6 +54,14 @@ describe "bundle gem" do
end
end
+ shared_examples_for "following best practices for gem dependencies" do
+ it "only adds development dependencies with specific version requirements" do
+ unspecific_dev_dependencies = generated_gem.gemspec.development_dependencies.reject(&:specific?)
+
+ expect(unspecific_dev_dependencies).to eq([])
+ end
+ end
+
it "generates a valid gemspec" do
system_gems ["rake-10.0.2"]
@@ -238,6 +246,8 @@ describe "bundle gem" do
bundle "gem #{gem_name} --test=rspec"
end
+ it_should_behave_like("following best practices for gem dependencies")
+
it "builds spec skeleton" do
expect(bundled_app("test_gem/.rspec")).to exist
expect(bundled_app("test_gem/spec/test_gem_spec.rb")).to exist
@@ -289,6 +299,8 @@ describe "bundle gem" do
bundle "gem #{gem_name} --test=minitest"
end
+ it_should_behave_like("following best practices for gem dependencies")
+
it "builds spec skeleton" do
expect(bundled_app("test_gem/test/test_gem_test.rb")).to exist
expect(bundled_app("test_gem/test/test_helper.rb")).to exist