From f288806d0223955974096e8360fa5ec7ba6b0d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Rodr=C3=ADguez?= Date: Mon, 8 Jul 2019 15:32:18 +0200 Subject: Remove development dependencies from gemspec And refactor development setup. --- Rakefile | 44 ++++++++------------------------------------ bin/rake | 16 ++++------------ bin/rspec | 16 ++++------------ bin/rubocop | 16 ++++------------ bundler.gemspec | 7 ------- spec/support/rubygems_ext.rb | 37 +++++++++++++++++++++++++++++++++++-- 6 files changed, 55 insertions(+), 81 deletions(-) diff --git a/Rakefile b/Rakefile index 2ac7738a3d..9c6543a264 100644 --- a/Rakefile +++ b/Rakefile @@ -3,9 +3,7 @@ $:.unshift File.expand_path("../lib", __FILE__) require "benchmark" -def development_dependencies - @development_dependencies ||= Gem::Specification.load("bundler.gemspec").development_dependencies -end +require_relative "spec/support/rubygems_ext" # Benchmark task execution module Rake @@ -36,17 +34,7 @@ namespace :spec do desc "Ensure spec dependencies are installed" task :deps do - deps = Hash[development_dependencies.map do |d| - [d.name, d.requirement.to_s] - end] - - # JRuby can't build ronn, so we skip that - deps.delete("ronn") if RUBY_ENGINE == "jruby" - - gem_install_command = "install --no-document --conservative " + deps.sort_by {|name, _| name }.map do |name, version| - "'#{name}:#{version}'" - end.join(" ") - sh %(#{Gem.ruby} -S gem #{gem_install_command}) + Spec::Rubygems.dev_setup end namespace :travis do @@ -191,18 +179,10 @@ namespace :man do if RUBY_ENGINE == "jruby" task(:build) {} else - ronn_dep = development_dependencies.find do |dep| - dep.name == "ronn" - end - - ronn_requirement = ronn_dep.requirement.to_s - begin - gem "ronn", ronn_requirement - - require "ronn" - rescue LoadError - task(:build) { abort "We couln't activate ronn (#{ronn_requirement}). Try `gem install ronn:'#{ronn_requirement}'` to be able to build the help pages" } + Spec::Rubygems.gem_require("ronn") + rescue Gem::LoadError => e + task(:build) { abort "We couln't activate ronn (#{e.requirement}). Try `gem install ronn:'#{e.requirement}'` to be able to build the help pages" } else directory "man" @@ -254,18 +234,10 @@ namespace :man do end end -automatiek_dep = development_dependencies.find do |dep| - dep.name == "automatiek" -end - -automatiek_requirement = automatiek_dep.requirement.to_s - begin - gem "automatiek", automatiek_requirement - - require "automatiek" -rescue LoadError - msg = "We couldn't activate automatiek (#{automatiek_requirement}). Try `gem install automatiek:'#{automatiek_requirement}'` to be able to vendor gems" + Spec::Rubygems.gem_require("automatiek") +rescue Gem::LoadError => e + msg = "We couldn't activate automatiek (#{e.requirement}). Try `gem install automatiek:'#{e.requirement}'` to be able to vendor gems" namespace :vendor do desc "Vendor a specific version of molinillo" diff --git a/bin/rake b/bin/rake index cf4131d5b0..f9a28e88c2 100755 --- a/bin/rake +++ b/bin/rake @@ -3,18 +3,10 @@ load File.expand_path("../with_rubygems", __FILE__) if ENV["RGV"] -require "rubygems" - -bundler_spec = Gem::Specification.load(File.expand_path("../../bundler.gemspec", __FILE__)) -rake = bundler_spec.development_dependencies.find do |dep| - dep.name == "rake" -end - -rake_requirement = rake.requirement.to_s +require_relative "../spec/support/rubygems_ext" begin - gem "rake", rake_requirement - load Gem.bin_path("rake", "rake") -rescue Gem::LoadError - warn "We couln't activate rake (#{rake_requirement}). Run `gem install rake:'#{rake_requirement}'`" + Spec::Rubygems.gem_load("rake", "rake") +rescue Gem::LoadError => e + warn "We couln't activate rake (#{e.requirement}). Run `gem install rake:'#{e.requirement}'`" end diff --git a/bin/rspec b/bin/rspec index a3980e6744..7d6c53cda4 100755 --- a/bin/rspec +++ b/bin/rspec @@ -3,18 +3,10 @@ load File.expand_path("../with_rubygems", __FILE__) if ENV["RGV"] -require "rubygems" - -bundler_spec = Gem::Specification.load(File.expand_path("../../bundler.gemspec", __FILE__)) -rspec = bundler_spec.development_dependencies.find do |dep| - dep.name == "rspec" -end - -rspec_requirement = rspec.requirement.to_s +require_relative "../spec/support/rubygems_ext" begin - gem "rspec", rspec_requirement - load Gem.bin_path("rspec-core", "rspec") -rescue Gem::LoadError - warn "We couln't activate rspec (#{rspec_requirement}). Try `gem install rspec:'#{rspec_requirement}'`" + Spec::Rubygems.gem_load("rspec-core", "rspec") +rescue Gem::LoadError => e + warn "We couln't activate rspec (#{e.requirement}). Run `gem install rspec:'#{e.requirement}'`" end diff --git a/bin/rubocop b/bin/rubocop index ef86f084a9..f700d073ca 100755 --- a/bin/rubocop +++ b/bin/rubocop @@ -3,18 +3,10 @@ load File.expand_path("../with_rubygems", __FILE__) if ENV["RGV"] -require "rubygems" - -bundler_spec = Gem::Specification.load(File.expand_path("../../bundler.gemspec", __FILE__)) -rubocop = bundler_spec.dependencies.find do |dep| - dep.name == "rubocop" -end - -rubocop_requirement = rubocop.requirement.to_s +require_relative "../spec/support/rubygems_ext" begin - gem "rubocop", rubocop_requirement - load Gem.bin_path("rubocop", "rubocop") -rescue Gem::LoadError - warn "We couln't activate rubocop (#{rubocop_requirement}). Try `gem install rubocop:'#{rubocop_requirement}'`" + Spec::Rubygems.gem_load("rubocop", "rubocop") +rescue Gem::LoadError => e + warn "We couln't activate rubocop (#{e.requirement}). Run `gem install rubocop:'#{e.requirement}'`" end diff --git a/bundler.gemspec b/bundler.gemspec index 9164ee70d2..3b515caad9 100644 --- a/bundler.gemspec +++ b/bundler.gemspec @@ -34,13 +34,6 @@ Gem::Specification.new do |s| s.required_ruby_version = ">= 2.3.0" s.required_rubygems_version = ">= 2.5.0" - s.add_development_dependency "automatiek", "~> 0.1.0" - s.add_development_dependency "rake", "~> 12.0" - s.add_development_dependency "ronn", "~> 0.7.3" - s.add_development_dependency "rspec", "~> 3.6" - s.add_development_dependency "rubocop", "= 0.72.0" - s.add_development_dependency "rubocop-performance", "= 1.4.0" - s.files = Dir.glob("{lib,exe}/**/*", File::FNM_DOTMATCH).reject {|f| File.directory?(f) } # we don't check in man pages, but we need to ship them because diff --git a/spec/support/rubygems_ext.rb b/spec/support/rubygems_ext.rb index 1a2588f30a..f7482260e4 100644 --- a/spec/support/rubygems_ext.rb +++ b/spec/support/rubygems_ext.rb @@ -1,11 +1,20 @@ # frozen_string_literal: true require "rubygems/user_interaction" -require "support/path" +require_relative "path" require "fileutils" module Spec module Rubygems + DEV_DEPS = { + "automatiek" => "~> 0.1.0", + "rake" => "~> 12.0", + "ronn" => "~> 0.7.3", + "rspec" => "~> 3.6", + "rubocop" => "= 0.72.0", + "rubocop-performance" => "= 1.4.0", + }.freeze + DEPS = { # artifice doesn't support rack 2.x now. "rack" => "< 2.0", @@ -17,9 +26,33 @@ module Spec "rake" => "12.3.2", "builder" => "~> 3.2", # ruby-graphviz is used by the viz tests - "ruby-graphviz" => nil, + "ruby-graphviz" => ">= 0.a", }.freeze + def self.dev_setup + deps = DEV_DEPS + + # JRuby can't build ronn, so we skip that + deps.delete("ronn") if RUBY_ENGINE == "jruby" + + install_gems(deps) + end + + def self.gem_load(gem_name, bin_container) + gem_activate(gem_name) + load Gem.bin_path(gem_name, bin_container) + end + + def self.gem_activate(gem_name) + gem_requirement = DEV_DEPS[gem_name] + gem gem_name, gem_requirement + end + + def self.gem_require(gem_name) + gem_activate(gem_name) + require gem_name + end + def self.setup Gem.clear_paths -- cgit v1.2.1