https://github.com/envygeeks/pathutil/pull/5

From 3451a10c362fc867b20c7e471a551b31c40a0246 Mon Sep 17 00:00:00 2001
From: Tom Dunlap <tom@motevets.com>
Date: Tue, 9 Jun 2020 12:59:32 -0400
Subject: [PATCH] Fix ruby keyword parameter deprecation warnings

In ruby 2.7, using the last argument as keyword parameters became
deprecated in preparation for ruby 3.0. When running the tests, we saw
numerous deprecation warnings. This commit fixes up those deprecation
warnings by explicitly passing the last argument(s) as keyword
argument(s).

See: https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/

Fixes #4

Side note: this commit did not fix the `#binread` method because it was
untested, and when attempting to add tests, we got the following failing
test:

```
1) Pathutil#binread when set to normalize should use encode to convert CRLF to LF
   Failure/Error:
     File.binread(self, *args, kwd).encode({
       :universal_newline => true
     })

   TypeError:
     no implicit conversion of Hash into Integer
   # ./lib/pathutil.rb:509:in `binread'
   # ./lib/pathutil.rb:509:in `binread'
   # ./spec/tests/lib/pathutil_spec.rb:943:in `block (4 levels) in <top (required)>'
```

...which appears to be occuring because of an interface mismatch as
`IO#binread` does not take keyword arguments.

https://ruby-doc.org/core-2.7.1/IO.html#method-c-binread
---
 lib/pathutil.rb                         | 36 ++++++++-----------------
 spec/tests/lib/pathutil/helpers_spec.rb |  4 +--
 spec/tests/lib/pathutil_spec.rb         | 13 +++------
 3 files changed, 16 insertions(+), 37 deletions(-)

diff --git a/lib/pathutil.rb b/lib/pathutil.rb
index 1a15873..80913f2 100644
--- a/lib/pathutil.rb
+++ b/lib/pathutil.rb
@@ -456,14 +456,10 @@ def safe_copy(to, root: nil, ignore: [])
     to   = self.class.new(to)
 
     if directory?
-      safe_copy_directory(to, {
-        :root => root, :ignore => ignore
-      })
+      safe_copy_directory(to, root: root, ignore: ignore)
 
     else
-      safe_copy_file(to, {
-        :root => root
-      })
+      safe_copy_file(to, root: root)
     end
   end
 
@@ -494,14 +490,10 @@ def read(*args, **kwd)
     kwd[:encoding] ||= encoding
 
     if normalize[:read]
-      File.read(self, *args, kwd).encode({
-        :universal_newline => true
-      })
+      File.read(self, *args, **kwd).encode(universal_newline: true)
 
     else
-      File.read(
-        self, *args, kwd
-      )
+      File.read(self, *args, **kwd)
     end
   end
 
@@ -534,13 +526,13 @@ def readlines(*args, **kwd)
     kwd[:encoding] ||= encoding
 
     if normalize[:read]
-      File.readlines(self, *args, kwd).encode({
+      File.readlines(self, *args, **kwd).encode({
         :universal_newline => true
       })
 
     else
       File.readlines(
-        self, *args, kwd
+        self, *args, **kwd
       )
     end
   end
@@ -556,11 +548,11 @@ def write(data, *args, **kwd)
     if normalize[:write]
       File.write(self, data.encode(
         :crlf_newline => true
-      ), *args, kwd)
+      ), *args, **kwd)
 
     else
       File.write(
-        self, data, *args, kwd
+        self, data, *args, **kwd
       )
     end
   end
@@ -670,9 +662,7 @@ def expanded_paths(path)
   private
   def safe_copy_file(to, root: nil)
     raise Errno::EPERM, "#{self} not in #{root}" unless in_path?(root)
-    FileUtils.cp(self, to, {
-      :preserve => true
-    })
+    FileUtils.cp(self, to, preserve: true)
   end
 
   # --
@@ -697,15 +687,11 @@ def safe_copy_directory(to, root: nil, ignore: [])
             }"
 
           elsif file.file?
-            FileUtils.cp(file, to, {
-              :preserve => true
-            })
+            FileUtils.cp(file, to, preserve: true)
 
           else
             path = file.realpath
-            path.safe_copy(to.join(file.basename), {
-              :root => root, :ignore => ignore
-            })
+            path.safe_copy(to.join(file.basename), root: root, ignore: ignore)
           end
         end
       end
diff --git a/spec/tests/lib/pathutil/helpers_spec.rb b/spec/tests/lib/pathutil/helpers_spec.rb
index 4d64d0a..0dfbc00 100644
--- a/spec/tests/lib/pathutil/helpers_spec.rb
+++ b/spec/tests/lib/pathutil/helpers_spec.rb
@@ -76,9 +76,7 @@
           #
 
           after do
-            described_class.load_yaml("hello: world", {
-              :aliases => true
-            })
+            described_class.load_yaml("hello: world", aliases: true)
           end
         end
 
diff --git a/spec/tests/lib/pathutil_spec.rb b/spec/tests/lib/pathutil_spec.rb
index 784a16b..0ee7a12 100644
--- a/spec/tests/lib/pathutil_spec.rb
+++ b/spec/tests/lib/pathutil_spec.rb
@@ -944,9 +944,7 @@
 
     context "with an encoding argument" do
       before do
-        file.write("hello", {
-          :encoding => "ASCII"
-        })
+        file.write("hello", encoding: "ASCII")
       end
 
       #
@@ -1050,11 +1048,10 @@
           name1.join(name2.basename, name1.basename).touch
           name1.join(name1.basename).touch
 
-          name1.safe_copy(name2, {
-            :root => tmpdir1, :ignore => [
+          name1.safe_copy(name2, root: tmpdir1, ignore: [
               name1.join(name2.basename, name1.basename)
             ]
-          })
+          )
         end
 
         #
@@ -1077,9 +1074,7 @@
           name1.join(name2.basename, name1.basename).touch
           name1.join(name1.basename).touch
 
-          name1.safe_copy(name2, {
-            :root => tmpdir1
-          })
+          name1.safe_copy(name2, root: tmpdir1)
         end
 
         #
