From 799da6dbe80b4808e66d81c0004d279abcbf55ea Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Tue, 21 Feb 2017 11:12:34 +0200 Subject: [PATCH 1/5] Prepend selected ruby to PATH in RubyRequirement --- .../Homebrew/requirements/ruby_requirement.rb | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/Library/Homebrew/requirements/ruby_requirement.rb b/Library/Homebrew/requirements/ruby_requirement.rb index a890435a58..e432edddbe 100644 --- a/Library/Homebrew/requirements/ruby_requirement.rb +++ b/Library/Homebrew/requirements/ruby_requirement.rb @@ -9,15 +9,14 @@ class RubyRequirement < Requirement end satisfy build_env: false do - which_all("ruby").detect do |ruby| - version = /\d\.\d/.match Utils.popen_read(ruby, "--version") - next unless version - Version.create(version.to_s) >= Version.create(@version) - end + found_ruby = rubies.detect { |ruby| suitable?(ruby) } + return unless found_ruby + ENV.prepend_path "PATH", found_ruby.dirname + found_ruby end def message - s = "Ruby #{@version} is required to install this formula." + s = "Ruby >= #{@version} is required to install this formula." s += super s end @@ -33,4 +32,30 @@ class RubyRequirement < Requirement name end end + + private + + def rubies + rubies = which_all("ruby") + if ruby_formula.installed? + rubies.unshift Pathname.new(ruby_formula.bin/"ruby") + end + rubies.uniq + end + + def suitable?(ruby) + version = Utils.popen_read(ruby, "-e", "print RUBY_VERSION").strip + version =~ /^\d+\.\d+/ && Version.create(version) >= min_version + end + + def min_version + @min_version ||= Version.create(@version) + end + + def ruby_formula + @ruby_formula ||= Formula["ruby"] + rescue FormulaUnavailableError + nil + end + end From df7ae5eb26a9552ff61c66ed5680c701bf0be7df Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Tue, 21 Feb 2017 11:24:53 +0200 Subject: [PATCH 2/5] Use the env block --- Library/Homebrew/requirements/ruby_requirement.rb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/requirements/ruby_requirement.rb b/Library/Homebrew/requirements/ruby_requirement.rb index e432edddbe..817cf3e327 100644 --- a/Library/Homebrew/requirements/ruby_requirement.rb +++ b/Library/Homebrew/requirements/ruby_requirement.rb @@ -8,11 +8,10 @@ class RubyRequirement < Requirement super end - satisfy build_env: false do - found_ruby = rubies.detect { |ruby| suitable?(ruby) } - return unless found_ruby - ENV.prepend_path "PATH", found_ruby.dirname - found_ruby + satisfy build_env: false { suitable_ruby } + + env do + ENV.prepend_path "PATH", suitable_ruby end def message @@ -35,6 +34,10 @@ class RubyRequirement < Requirement private + def suitable_ruby + rubies.detect { |ruby| suitable?(ruby) } + end + def rubies rubies = which_all("ruby") if ruby_formula.installed? From 91c1a54b674c0468729de9ba62cccfaef2188af7 Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Tue, 21 Feb 2017 11:26:40 +0200 Subject: [PATCH 3/5] Extra check --- Library/Homebrew/requirements/ruby_requirement.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/requirements/ruby_requirement.rb b/Library/Homebrew/requirements/ruby_requirement.rb index 817cf3e327..f03399078f 100644 --- a/Library/Homebrew/requirements/ruby_requirement.rb +++ b/Library/Homebrew/requirements/ruby_requirement.rb @@ -40,7 +40,7 @@ class RubyRequirement < Requirement def rubies rubies = which_all("ruby") - if ruby_formula.installed? + if ruby_formula && ruby_formula.installed? rubies.unshift Pathname.new(ruby_formula.bin/"ruby") end rubies.uniq From f5a0ae176a1abed5ecba42a436a8a32595c21a9d Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Tue, 21 Feb 2017 13:16:04 +0200 Subject: [PATCH 4/5] Syntax fail --- Library/Homebrew/requirements/ruby_requirement.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/requirements/ruby_requirement.rb b/Library/Homebrew/requirements/ruby_requirement.rb index f03399078f..0caedb5ca9 100644 --- a/Library/Homebrew/requirements/ruby_requirement.rb +++ b/Library/Homebrew/requirements/ruby_requirement.rb @@ -8,7 +8,7 @@ class RubyRequirement < Requirement super end - satisfy build_env: false { suitable_ruby } + satisfy(build_env: false) { suitable_ruby } env do ENV.prepend_path "PATH", suitable_ruby From b4a2fe502cc8bef717e9f52efe5926cc27d1e9a6 Mon Sep 17 00:00:00 2001 From: Kimmo Lehto Date: Wed, 22 Feb 2017 09:21:31 +0200 Subject: [PATCH 5/5] Proposed changes --- .../Homebrew/requirements/ruby_requirement.rb | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Library/Homebrew/requirements/ruby_requirement.rb b/Library/Homebrew/requirements/ruby_requirement.rb index 0caedb5ca9..327c131708 100644 --- a/Library/Homebrew/requirements/ruby_requirement.rb +++ b/Library/Homebrew/requirements/ruby_requirement.rb @@ -8,10 +8,10 @@ class RubyRequirement < Requirement super end - satisfy(build_env: false) { suitable_ruby } + satisfy(build_env: false) { new_enough_ruby } env do - ENV.prepend_path "PATH", suitable_ruby + ENV.prepend_path "PATH", new_enough_ruby end def message @@ -34,19 +34,20 @@ class RubyRequirement < Requirement private - def suitable_ruby - rubies.detect { |ruby| suitable?(ruby) } + def new_enough_ruby + rubies.detect { |ruby| new_enough?(ruby) } end def rubies rubies = which_all("ruby") + ruby_formula = Formula["ruby"] if ruby_formula && ruby_formula.installed? - rubies.unshift Pathname.new(ruby_formula.bin/"ruby") + rubies.unshift ruby_formula.bin/"ruby" end rubies.uniq end - def suitable?(ruby) + def new_enough?(ruby) version = Utils.popen_read(ruby, "-e", "print RUBY_VERSION").strip version =~ /^\d+\.\d+/ && Version.create(version) >= min_version end @@ -54,11 +55,4 @@ class RubyRequirement < Requirement def min_version @min_version ||= Version.create(@version) end - - def ruby_formula - @ruby_formula ||= Formula["ruby"] - rescue FormulaUnavailableError - nil - end - end