summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2023-03-15 07:37:12 +0000
committerSam James <sam@gentoo.org>2023-03-18 00:02:01 +0000
commit557922daa276be471bff9f1fbfc9e4ee3fbbe6c9 (patch)
treeebc709c80bf238ff489d270f3785760af5396841
parentdev-ruby/webmock: enable ruby32 (diff)
downloadgentoo-557922da.tar.gz
gentoo-557922da.tar.bz2
gentoo-557922da.zip
dev-ruby/thor: enable ruby32
``` Finished in 0.6724 seconds (files took 0.35272 seconds to load) 800 examples, 0 failures, 1 pending ``` Signed-off-by: Sam James <sam@gentoo.org>
-rw-r--r--dev-ruby/thor/files/thor-1.2.1-tests.patch211
-rw-r--r--dev-ruby/thor/thor-1.2.1-r1.ebuild74
2 files changed, 285 insertions, 0 deletions
diff --git a/dev-ruby/thor/files/thor-1.2.1-tests.patch b/dev-ruby/thor/files/thor-1.2.1-tests.patch
new file mode 100644
index 000000000000..bd59deda2338
--- /dev/null
+++ b/dev-ruby/thor/files/thor-1.2.1-tests.patch
@@ -0,0 +1,211 @@
+https://github.com/rails/thor/issues/817
+https://github.com/rails/thor/commit/0def4cfba5bf470f76877eb3b8a8895f0018e574
+https://github.com/rails/thor/commit/46d1422902e1c66b31fae79be7dca79ff8b2e81b
+
+From 0def4cfba5bf470f76877eb3b8a8895f0018e574 Mon Sep 17 00:00:00 2001
+From: Tim Diggins <tim@red56.uk>
+Date: Fri, 4 Mar 2022 12:16:58 +0000
+Subject: [PATCH] fix expectations for ruby 3 treatment of hash arg
+
+--- a/spec/line_editor_spec.rb
++++ b/spec/line_editor_spec.rb
+@@ -13,7 +13,7 @@
+ describe ".readline" do
+ it "uses the Readline line editor" do
+ editor = double("Readline")
+- expect(Thor::LineEditor::Readline).to receive(:new).with("Enter your name ", :default => "Brian").and_return(editor)
++ expect(Thor::LineEditor::Readline).to receive(:new).with("Enter your name ", {:default => "Brian"}).and_return(editor)
+ expect(editor).to receive(:readline).and_return("George")
+ expect(Thor::LineEditor.readline("Enter your name ", :default => "Brian")).to eq("George")
+ end
+@@ -35,7 +35,7 @@
+ describe ".readline" do
+ it "uses the Basic line editor" do
+ editor = double("Basic")
+- expect(Thor::LineEditor::Basic).to receive(:new).with("Enter your name ", :default => "Brian").and_return(editor)
++ expect(Thor::LineEditor::Basic).to receive(:new).with("Enter your name ", {:default => "Brian"}).and_return(editor)
+ expect(editor).to receive(:readline).and_return("George")
+ expect(Thor::LineEditor.readline("Enter your name ", :default => "Brian")).to eq("George")
+ end
+--- a/spec/shell/basic_spec.rb
++++ b/spec/shell/basic_spec.rb
+@@ -70,80 +70,80 @@ def shell
+
+ it "prints a message to the user with the available options, expects case-sensitive matching, and determines the correctness of the answer" do
+ flavors = %w(strawberry chocolate vanilla)
+- expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', :limited_to => flavors).and_return("chocolate")
++ expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', {:limited_to => flavors}).and_return("chocolate")
+ expect(shell.ask('What\'s your favorite Neopolitan flavor?', :limited_to => flavors)).to eq("chocolate")
+ end
+
+ it "prints a message to the user with the available options, expects case-sensitive matching, and reasks the question after an incorrect response" do
+ flavors = %w(strawberry chocolate vanilla)
+ expect($stdout).to receive(:print).with("Your response must be one of: [strawberry, chocolate, vanilla]. Please try again.\n")
+- expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', :limited_to => flavors).and_return("moose tracks", "chocolate")
++ expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', {:limited_to => flavors}).and_return("moose tracks", "chocolate")
+ expect(shell.ask('What\'s your favorite Neopolitan flavor?', :limited_to => flavors)).to eq("chocolate")
+ end
+
+ it "prints a message to the user with the available options, expects case-sensitive matching, and reasks the question after a case-insensitive match" do
+ flavors = %w(strawberry chocolate vanilla)
+ expect($stdout).to receive(:print).with("Your response must be one of: [strawberry, chocolate, vanilla]. Please try again.\n")
+- expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', :limited_to => flavors).and_return("cHoCoLaTe", "chocolate")
++ expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', {:limited_to => flavors}).and_return("cHoCoLaTe", "chocolate")
+ expect(shell.ask('What\'s your favorite Neopolitan flavor?', :limited_to => flavors)).to eq("chocolate")
+ end
+
+ it "prints a message to the user with the available options, expects case-insensitive matching, and determines the correctness of the answer" do
+ flavors = %w(strawberry chocolate vanilla)
+- expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', :limited_to => flavors, :case_insensitive => true).and_return("CHOCOLATE")
++ expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', {:limited_to => flavors, :case_insensitive => true}).and_return("CHOCOLATE")
+ expect(shell.ask('What\'s your favorite Neopolitan flavor?', :limited_to => flavors, :case_insensitive => true)).to eq("chocolate")
+ end
+
+ it "prints a message to the user with the available options, expects case-insensitive matching, and reasks the question after an incorrect response" do
+ flavors = %w(strawberry chocolate vanilla)
+ expect($stdout).to receive(:print).with("Your response must be one of: [strawberry, chocolate, vanilla]. Please try again.\n")
+- expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', :limited_to => flavors, :case_insensitive => true).and_return("moose tracks", "chocolate")
++ expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] ', {:limited_to => flavors, :case_insensitive => true}).and_return("moose tracks", "chocolate")
+ expect(shell.ask('What\'s your favorite Neopolitan flavor?', :limited_to => flavors, :case_insensitive => true)).to eq("chocolate")
+ end
+
+ it "prints a message to the user containing a default and sets the default if only enter is pressed" do
+- expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? (vanilla) ', :default => "vanilla").and_return("")
++ expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? (vanilla) ', {:default => "vanilla"}).and_return("")
+ expect(shell.ask('What\'s your favorite Neopolitan flavor?', :default => "vanilla")).to eq("vanilla")
+ end
+
+ it "prints a message to the user with the available options and reasks the question after an incorrect response and then returns the default" do
+ flavors = %w(strawberry chocolate vanilla)
+ expect($stdout).to receive(:print).with("Your response must be one of: [strawberry, chocolate, vanilla]. Please try again.\n")
+- expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] (vanilla) ', :default => "vanilla", :limited_to => flavors).and_return("moose tracks", "")
++ expect(Thor::LineEditor).to receive(:readline).with('What\'s your favorite Neopolitan flavor? [strawberry, chocolate, vanilla] (vanilla) ', {:default => "vanilla", :limited_to => flavors}).and_return("moose tracks", "")
+ expect(shell.ask("What's your favorite Neopolitan flavor?", :default => "vanilla", :limited_to => flavors)).to eq("vanilla")
+ end
+ end
+
+ describe "#yes?" do
+ it "asks the user and returns true if the user replies yes" do
+- expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", :add_to_history => false).and_return("y")
++ expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", {:add_to_history => false}).and_return("y")
+ expect(shell.yes?("Should I overwrite it?")).to be true
+ end
+
+ it "asks the user and returns false if the user replies no" do
+- expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", :add_to_history => false).and_return("n")
++ expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", {:add_to_history => false}).and_return("n")
+ expect(shell.yes?("Should I overwrite it?")).not_to be true
+ end
+
+ it "asks the user and returns false if the user replies with an answer other than yes or no" do
+- expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", :add_to_history => false).and_return("foobar")
++ expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", {:add_to_history => false}).and_return("foobar")
+ expect(shell.yes?("Should I overwrite it?")).to be false
+ end
+ end
+
+ describe "#no?" do
+ it "asks the user and returns true if the user replies no" do
+- expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", :add_to_history => false).and_return("n")
++ expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", {:add_to_history => false}).and_return("n")
+ expect(shell.no?("Should I overwrite it?")).to be true
+ end
+
+ it "asks the user and returns false if the user replies yes" do
+- expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", :add_to_history => false).and_return("Yes")
++ expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", {:add_to_history => false}).and_return("Yes")
+ expect(shell.no?("Should I overwrite it?")).to be false
+ end
+
+ it "asks the user and returns false if the user replies with an answer other than yes or no" do
+- expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", :add_to_history => false).and_return("foobar")
++ expect(Thor::LineEditor).to receive(:readline).with("Should I overwrite it? ", {:add_to_history => false}).and_return("foobar")
+ expect(shell.no?("Should I overwrite it?")).to be false
+ end
+ end
+@@ -431,13 +431,13 @@ def #456 Lanç...
+ expect(content).to eq(<<-TABLE)
+ Name Number Color
+ Erik 1234567890123 green
+-TABLE
++ TABLE
+ end
+ end
+
+ describe "#file_collision" do
+ it "shows a menu with options" do
+- expect(Thor::LineEditor).to receive(:readline).with('Overwrite foo? (enter "h" for help) [Ynaqh] ', :add_to_history => false).and_return("n")
++ expect(Thor::LineEditor).to receive(:readline).with('Overwrite foo? (enter "h" for help) [Ynaqh] ', {:add_to_history => false}).and_return("n")
+ shell.file_collision("foo")
+ end
+
+@@ -478,7 +478,7 @@ def #456 Lanç...
+ end
+
+ it "always returns true if the user chooses always" do
+- expect(Thor::LineEditor).to receive(:readline).with('Overwrite foo? (enter "h" for help) [Ynaqh] ', :add_to_history => false).and_return("a")
++ expect(Thor::LineEditor).to receive(:readline).with('Overwrite foo? (enter "h" for help) [Ynaqh] ', {:add_to_history => false}).and_return("a")
+
+ expect(shell.file_collision("foo")).to be true
+
+@@ -488,7 +488,7 @@ def #456 Lanç...
+
+ describe "when a block is given" do
+ it "displays diff and merge options to the user" do
+- expect(Thor::LineEditor).to receive(:readline).with('Overwrite foo? (enter "h" for help) [Ynaqdhm] ', :add_to_history => false).and_return("s")
++ expect(Thor::LineEditor).to receive(:readline).with('Overwrite foo? (enter "h" for help) [Ynaqdhm] ', {:add_to_history => false}).and_return("s")
+ shell.file_collision("foo") {}
+ end
+
+From 46d1422902e1c66b31fae79be7dca79ff8b2e81b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?David=20Rodr=C3=ADguez?= <deivid.rodriguez@riseup.net>
+Date: Wed, 15 Jun 2022 19:35:27 +0200
+Subject: [PATCH] Reimplement did_you_mean suggestions to keep behaviour
+ accross rubies
+
+Ruby 3.2 will introduce `Exception#detailed_message` and `did_you_mean`
+has been already updated in Ruby 3.2 to use that.
+
+The new behaviour means not changing the original `Exception#message`.
+That means it is hard to get the previous error output, because
+`Exception#detailed_message` includes not only `did_you_mean`
+decorations, but also additional information like the exception class.
+
+To fix this, I bring the old did_you_mean behavior into Thor, so that
+the above changes do not affect us.
+--- a/lib/thor/error.rb
++++ b/lib/thor/error.rb
+@@ -11,7 +11,15 @@ def initialize(dictionary)
+ end
+ end
+
+- DidYouMean::Correctable
++ Module.new do
++ def to_s
++ super + DidYouMean.formatter.message_for(corrections)
++ end
++
++ def corrections
++ @corrections ||= self.class.const_get(:SpellChecker).new(self).corrections
++ end
++ end
+ end
+
+ # Thor::Error is raised when it's caused by wrong usage of thor classes. Those
+@@ -100,16 +108,4 @@ class RequiredArgumentMissingError < InvocationError
+
+ class MalformattedArgumentError < InvocationError
+ end
+-
+- if Correctable
+- if DidYouMean.respond_to?(:correct_error)
+- DidYouMean.correct_error(Thor::UndefinedCommandError, UndefinedCommandError::SpellChecker)
+- DidYouMean.correct_error(Thor::UnknownArgumentError, UnknownArgumentError::SpellChecker)
+- else
+- DidYouMean::SPELL_CHECKERS.merge!(
+- 'Thor::UndefinedCommandError' => UndefinedCommandError::SpellChecker,
+- 'Thor::UnknownArgumentError' => UnknownArgumentError::SpellChecker
+- )
+- end
+- end
+ end
diff --git a/dev-ruby/thor/thor-1.2.1-r1.ebuild b/dev-ruby/thor/thor-1.2.1-r1.ebuild
new file mode 100644
index 000000000000..42cd077c6593
--- /dev/null
+++ b/dev-ruby/thor/thor-1.2.1-r1.ebuild
@@ -0,0 +1,74 @@
+# Copyright 2000-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+USE_RUBY="ruby27 ruby30 ruby31 ruby32"
+
+RUBY_FAKEGEM_RECIPE_TEST="rspec3"
+RUBY_FAKEGEM_DOCDIR="rdoc"
+RUBY_FAKEGEM_EXTRADOC="README.md"
+RUBY_FAKEGEM_BINWRAP="thor"
+
+RUBY_FAKEGEM_GEMSPEC="thor.gemspec"
+
+inherit ruby-fakegem
+
+DESCRIPTION="A scripting framework that replaces rake and sake"
+HOMEPAGE="http://whatisthor.com/"
+
+SRC_URI="https://github.com/erikhuda/${PN}/archive/v${PV}.tar.gz -> ${PN}-git-${PV}.tgz"
+
+LICENSE="MIT"
+SLOT="$(ver_cut 1)"
+KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux"
+IUSE="doc"
+
+USE_RUBY="ruby27" ruby_add_bdepend "
+ test? (
+ dev-ruby/childlabor
+ dev-ruby/webmock
+ )"
+
+RDEPEND+=" !<dev-ruby/thor-0.20.3-r1:0"
+
+PATCHES=(
+ "${FILESDIR}"/thor-1.2.1-tests.patch
+)
+
+all_ruby_prepare() {
+ # Remove rspec default options (as we might not have the last
+ # rspec).
+ rm .rspec || die
+
+ # Remove Bundler
+ #rm Gemfile || die
+ sed -i -e '/[Bb]undler/d' Thorfile || die
+
+ # Remove mandatory coverage collection using simplecov which is not
+ # packaged.
+ sed -i -e '/require .simplecov/,/^end/ s:^:#:' spec/helper.rb || die
+
+ # Avoid a spec that requires UTF-8 support, so LANG=C still works,
+ # bug 430402
+ sed -i -e '/uses maximum terminal width/,/end/ s:^:#:' spec/shell/basic_spec.rb || die
+
+ # Avoid specs depending on git, bug 724058
+ rm -f spec/quality_spec.rb || die
+
+ # Avoid currently broken readline specs (already fixed upstream)
+ #rm -f spec/line_editor/readline_spec.rb spec/line_editor_spec.rb || die
+
+ # Avoid spec failing on whitespace difference in error message
+ sed -i -e '/raises an error for unknown switches/askip "whitespace differences"' spec/parser/options_spec.rb || die
+}
+
+each_ruby_test() {
+ case ${RUBY} in
+ *ruby30|*ruby31|*ruby32)
+ einfo "Skipping tests due to circular dependencies"
+ ;;
+ *)
+ RSPEC_VERSION=3 ruby-ng_rspec spec || die
+ ;;
+ esac
+}