commit:     9087d07610d798a132d26d7b5519057e70603c5f
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Jun 23 08:24:17 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jun 23 08:51:08 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=9087d076

dev-ruby/pathutil: enable ruby31

Signed-off-by: Sam James <sam <AT> gentoo.org>

 .../pathutil/files/pathutil-0.16.2-ruby30.patch    |   2 +
 .../pathutil/files/pathutil-0.16.2-ruby31.patch    | 247 +++++++++++++++++++++
 dev-ruby/pathutil/pathutil-0.16.2-r2.ebuild        |  35 +++
 3 files changed, 284 insertions(+)

diff --git a/dev-ruby/pathutil/files/pathutil-0.16.2-ruby30.patch 
b/dev-ruby/pathutil/files/pathutil-0.16.2-ruby30.patch
index 374cd4005930..9bb290d4bf24 100644
--- a/dev-ruby/pathutil/files/pathutil-0.16.2-ruby30.patch
+++ b/dev-ruby/pathutil/files/pathutil-0.16.2-ruby30.patch
@@ -1,3 +1,5 @@
+https://github.com/envygeeks/pathutil/pull/5
+
 From 3451a10c362fc867b20c7e471a551b31c40a0246 Mon Sep 17 00:00:00 2001
 From: Tom Dunlap <[email protected]>
 Date: Tue, 9 Jun 2020 12:59:32 -0400

diff --git a/dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch 
b/dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch
new file mode 100644
index 000000000000..0bfc4c5919b5
--- /dev/null
+++ b/dev-ruby/pathutil/files/pathutil-0.16.2-ruby31.patch
@@ -0,0 +1,247 @@
+https://github.com/envygeeks/pathutil/pull/7
+
+From c0ecc9a516ed43facfb3a80735034c892d517d1a Mon Sep 17 00:00:00 2001
+From: Jakub Jirutka <[email protected]>
+Date: Sun, 3 Apr 2022 20:20:44 +0200
+Subject: [PATCH 1/2] Fix usage of YAML.safe_load for compatibility with Ruby
+ >=2.4
+
+YAML.safe_load in Ruby 3.1.1 doesn't accept deprecated positional parameters 
anymore:
+
+  1) Pathutil::Helpers#load_yaml should be able to parse YAML
+     Failure/Error:
+       YAML.safe_load(
+         data,
+         whitelist_classes,
+         whitelist_symbols,
+         aliases
+       )
+
+     ArgumentError:
+       wrong number of arguments (given 4, expected 1)
+     # ./lib/pathutil/helpers.rb:44:in `load_yaml'
+     # ./spec/tests/lib/pathutil/helpers_spec.rb:25:in `block (3 levels) in 
<top (required)>'
+
+From 868efe4022f944cef81b05ae01e00fab2d51ee5c Mon Sep 17 00:00:00 2001
+From: Jakub Jirutka <[email protected]>
+Date: Sun, 3 Apr 2022 20:35:50 +0200
+Subject: [PATCH 2/2] Remove deprecated SafeYAML support
+
+SafeYAML has been deprecated a very long time ago.
+--- a/Gemfile
++++ b/Gemfile
+@@ -7,7 +7,6 @@ gem "rake", :require => false
+ gemspec
+ 
+ group :test do
+-  gem "safe_yaml", :require => false
+   gem "luna-rspec-formatters", :require => false
+   gem "simplecov", :require => false
+ end
+--- a/README.md
++++ b/README.md
+@@ -26,7 +26,7 @@ but only if they originate from the given root.
+ - `>=`, `>` - Check if a file is in but ahead of a path: 
`Pathutil.new("/tmp/hello") > "/tmp" # => true`
+ - `in_path?` - Check if a file is within a given path: 
`Pathutil.new("/tmp/hello").in_path?("/tmp") # => true`
+ - `<=`, `<` - Check if a file is in but below a path: `Pathutil.new("/tmp") < 
"/tmp/hello" # => true`
+-- `read_yaml` - a wrapper around `Yaml.safe_load` and `SafeYAML` to make 
reading `YAML` easy.
++- `read_yaml` - a wrapper around `Yaml.safe_load` to make reading `YAML` easy.
+ - `children` - behaves like Pathname, except it accepts a block to work on 
the path.
+ - `safe_copy` - Copy files, disallowing symlinks unless `in_path?`
+ - `enforce_root` - Force a root if not already in that root.
+--- a/benchmark/yaml.rb
++++ /dev/null
+@@ -1,16 +0,0 @@
+-# Frozen-string-literal: true
+-# Copyright: 2015 - 2017 Jordon Bedwell - MIT License
+-# Encoding: utf-8
+-
+-require "bundler/setup"
+-require "safe_yaml/load"
+-require "benchmark/ips"
+-require "pathutil"
+-
+-data = "hello: world\nworld: hello"
+-Benchmark.ips :quiet => true do |x|
+-  x.json! "benchmark.json"
+-  x.report("A:SafeYAML.load") { SafeYAML.load(data) }
+-  x.report("B:Pathutil::Helpers.load_yaml") { 
Pathutil::Helpers.load_yaml(data) }
+-  x.compare!
+-end
+--- a/lib/pathutil/helpers.rb
++++ b/lib/pathutil/helpers.rb
+@@ -20,7 +20,7 @@ class Pathutil
+     end
+ 
+     # --
+-    # Wraps around YAML and SafeYAML to provide alternatives to Rubies.
++    # Wraps around YAMLto provide alternatives to Rubies.
+     # @note We default aliases to yes so we can detect if you explicit true.
+     # @return Hash
+     # --
+@@ -34,20 +34,12 @@ class Pathutil
+         )
+       end
+ 
+-      if !YAML.respond_to?(:safe_load)
+-        setup_safe_yaml whitelist_classes, aliases
+-        SafeYAML.load(
+-          data
+-        )
+-
+-      else
+-        YAML.safe_load(
+-          data,
+-          whitelist_classes,
+-          whitelist_symbols,
+-          aliases
+-        )
+-      end
++      YAML.safe_load(
++        data,
++        permitted_classes: whitelist_classes,
++        permitted_symbols: whitelist_symbols,
++        aliases: aliases
++      )
+     end
+ 
+     # --
+@@ -109,21 +101,5 @@ class Pathutil
+         prefix, ext || ""
+       ]
+     end
+-
+-    # --
+-    # Wrap around, cleanup, deprecate and use SafeYAML.
+-    # rubocop:enable Style/ParallelAssignment
+-    # --
+-    private
+-    def setup_safe_yaml(whitelist_classes, aliases)
+-      warn "WARN: SafeYAML does not support disabling  of aliases." if 
aliases && aliases != :yes
+-      warn "WARN: SafeYAML will be removed when Ruby 2.0 goes EOL."
+-      require "safe_yaml/load"
+-
+-      SafeYAML.restore_defaults!
+-      whitelist_classes.map(&SafeYAML.method(
+-        :whitelist_class!
+-      ))
+-    end
+   end
+ end
+--- a/spec/tests/lib/pathutil/helpers_spec.rb
++++ b/spec/tests/lib/pathutil/helpers_spec.rb
+@@ -26,113 +26,10 @@ describe Pathutil::Helpers do
+         "hello" => "world"
+       })
+     end
++  end
+ 
+     #
+ 
+-    context "when safe" do
+-      it "should reject any special classes", :disable => :oldest_ruby do
+-        expect { described_class.load_yaml(":hello: :world") }.to raise_error(
+-          Psych::DisallowedClass
+-        )
+-      end
+-
+-      #
+-
+-      context "when using SafeYAML" do
+-        before do
+-          allow(YAML).to 
receive(:respond_to?).with(:safe_load).and_return(false)
+-          expect_any_instance_of(described_class).to 
receive(:warn).and_return(
+-            nil
+-          )
+-        end
+-
+-        #
+-
+-        context do
+-          it "should warn it's deprecated" do
+-            expect(described_class).to receive(:warn).and_return(
+-              nil
+-            )
+-          end
+-
+-          #
+-
+-          after do
+-            described_class.load_yaml(
+-              ":hello: :world"
+-            )
+-          end
+-        end
+-
+-        #
+-
+-        context "when trying to disable aliases" do
+-          it "should warn that you cannot disable them in SafeYAML" do
+-            expect(described_class).to 
receive(:warn).exactly(2).times.and_return(
+-              nil
+-            )
+-          end
+-
+-          #
+-
+-          after do
+-            described_class.load_yaml("hello: world", aliases: true)
+-          end
+-        end
+-
+-        #
+-
+-        it "should parse with SafeYAML" do
+-          expect(described_class.load_yaml(":hello: :world")).to eq({
+-            ":hello" => ":world"
+-          })
+-        end
+-      end
+-    end
+-
+-    #
+-
+-    context "when whitelisting classes" do
+-      it "should allow that class to be loaded" do
+-        expect(described_class.load_yaml(":hello: :world", :whitelist_classes 
=> [Symbol])).to eq({
+-          :hello => :world
+-        })
+-      end
+-    end
+-
+-    #
+-
+-    context "when diallowing aliases" do
+-      it "should throw the parse" do
+-        yaml = "version: &version 1\nother_version: *version"
+-        expect { described_class.load_yaml(yaml, :aliases => false) }.to 
raise_error(
+-          Psych::BadAlias
+-        )
+-      end
+-    end
+-
+-    #
+-
+-    context do
+-      it "should allow aliases by default" do
+-        expect(described_class.load_yaml("version: &version 1\nother_version: 
*version")).to eq({
+-          "version" => 1, "other_version" => 1
+-        })
+-      end
+-    end
+-
+-    #
+-
+-    context do
+-      it "should parse YAML" do
+-        expect(described_class.load_yaml("hello: world\nworld: hello")).to 
eq({
+-          "hello" => "world",
+-          "world" => "hello"
+-        })
+-      end
+-    end
+-  end
+-
+   #
+ 
+   describe ".make_tmpname" do

diff --git a/dev-ruby/pathutil/pathutil-0.16.2-r2.ebuild 
b/dev-ruby/pathutil/pathutil-0.16.2-r2.ebuild
new file mode 100644
index 000000000000..296caa499f17
--- /dev/null
+++ b/dev-ruby/pathutil/pathutil-0.16.2-r2.ebuild
@@ -0,0 +1,35 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+USE_RUBY="ruby30 ruby31"
+RUBY_FAKEGEM_RECIPE_TEST="rspec3"
+RUBY_FAKEGEM_GEMSPEC="Gem.gemspec"
+
+inherit ruby-fakegem
+
+DESCRIPTION="Like Pathname but a little less insane"
+HOMEPAGE="https://rubygems.org/gems/pathutil 
https://github.com/envygeeks/pathutil";
+SRC_URI="https://github.com/envygeeks/pathutil/archive/v${PV}.tar.gz -> 
${P}.tar.gz"
+
+LICENSE="MIT"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64"
+
+ruby_add_rdepend "
+       >=dev-ruby/forwardable-extended-2.6
+       <dev-ruby/forwardable-extended-3
+"
+
+PATCHES=(
+       "${FILESDIR}/${P}-ruby30.patch"
+       "${FILESDIR}/${P}-ruby31.patch"
+)
+
+all_ruby_prepare() {
+       sed -i -e '/\(coverage\|luna\|rspec\/helpers\)/ s:^:#:' \
+               -e '1irequire "pathname"; require "tempfile"; require "tmpdir"; 
require "json" ; gem "psych", "~> 5.0"' \
+               spec/rspec/helper.rb || die
+       rm -f spec/support/coverage.rb || die
+}

Reply via email to