diff --git a/Fix-expectations-for-ruby-3-treatment-of-hash-arg.patch b/Fix-expectations-for-ruby-3-treatment-of-hash-arg.patch new file mode 100644 index 0000000..ad9d6de --- /dev/null +++ b/Fix-expectations-for-ruby-3-treatment-of-hash-arg.patch @@ -0,0 +1,164 @@ +From 0def4cfba5bf470f76877eb3b8a8895f0018e574 Mon Sep 17 00:00:00 2001 +From: Tim Diggins +Date: Fri, 4 Mar 2022 12:16:58 +0000 +Subject: [PATCH] fix expectations for ruby 3 treatment of hash arg + +--- + spec/line_editor_spec.rb | 4 ++-- + spec/shell/basic_spec.rb | 34 +++++++++++++++++----------------- + 2 files changed, 19 insertions(+), 19 deletions(-) + +diff --git a/spec/line_editor_spec.rb b/spec/line_editor_spec.rb +index 575fd336e..f034ec8df 100644 +--- 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 +diff --git a/spec/shell/basic_spec.rb b/spec/shell/basic_spec.rb +index b51c5e8af..b795a80a8 100644 +--- 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 + diff --git a/Support-latest-did_you_mean.patch b/Support-latest-did_you_mean.patch new file mode 100644 index 0000000..c9913e3 --- /dev/null +++ b/Support-latest-did_you_mean.patch @@ -0,0 +1,33 @@ +From 98dbec75e4237fb8fb1b4190fd91cc22ad65068f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?David=20Rodr=C3=ADguez?= +Date: Wed, 22 Dec 2021 13:54:23 +0100 +Subject: [PATCH] Support latest did_you_mean + +Using `DidYouMean::SPELL_CHECKERS.merge!` has been deprecated. +--- + lib/thor/error.rb | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/lib/thor/error.rb b/lib/thor/error.rb +index c7c285906..893b135ec 100644 +--- a/lib/thor/error.rb ++++ b/lib/thor/error.rb +@@ -102,9 +102,14 @@ class MalformattedArgumentError < InvocationError + end + + if Correctable +- DidYouMean::SPELL_CHECKERS.merge!( +- 'Thor::UndefinedCommandError' => UndefinedCommandError::SpellChecker, +- 'Thor::UnknownArgumentError' => UnknownArgumentError::SpellChecker +- ) ++ 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/rubygem-thor.spec b/rubygem-thor.spec index fdc0ad8..25158be 100644 --- a/rubygem-thor.spec +++ b/rubygem-thor.spec @@ -2,13 +2,15 @@ Name: rubygem-%{gem_name} Version: 1.1.0 -Release: 3 +Release: 4 Summary: Thor is a toolkit for building powerful command-line interfaces License: MIT URL: http://whatisthor.com/ Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem Source1: %{gem_name}-%{version}-spec.txz Patch0: rubygem-thor-1.1.0-Fix-rspec-mocks-3.10.2-compatibility.patch +Patch1: Support-latest-did_you_mean.patch +Patch2: Fix-expectations-for-ruby-3-treatment-of-hash-arg.patch Requires: rubygem(io-console) BuildRequires: ruby(release) @@ -39,8 +41,11 @@ Documentation for %{name}. pushd %{_builddir} %patch0 -p1 +%patch2 -p1 popd +%patch1 -p1 + %build gem build ../%{gem_name}-%{version}.gemspec %gem_install @@ -85,6 +90,9 @@ popd %{gem_instdir}/thor.gemspec %changelog +* Tue Jan 17 2023 yaoxin - 1.1.0-4 +- Fix build failed due to ruby update to 3.1.3 + * Wed Jun 29 2022 liyanan - 1.1.0-3 - Fix build failed with rubygem-rspec-mocks