[前][次][番号順一覧][スレッド一覧]

ruby-changes:65080

From: Nobuyoshi <ko1@a...>
Date: Fri, 29 Jan 2021 14:28:19 +0900 (JST)
Subject: [ruby-changes:65080] 9241211538 (master): Forward keyword arguments for Pathname#each_line [Bug #17589]

https://git.ruby-lang.org/ruby.git/commit/?id=9241211538

From 9241211538189a58b477bd55b539357617fd42ed Mon Sep 17 00:00:00 2001
From: Nobuyoshi Nakada <nobu@r...>
Date: Fri, 29 Jan 2021 13:09:38 +0900
Subject: Forward keyword arguments for Pathname#each_line [Bug #17589]

---
 ext/pathname/pathname.c        |  4 ++--
 test/pathname/test_pathname.rb | 26 ++++++++++++++++++++++++++
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/ext/pathname/pathname.c b/ext/pathname/pathname.c
index 6f4c8d2..55577d7 100644
--- a/ext/pathname/pathname.c
+++ b/ext/pathname/pathname.c
@@ -360,10 +360,10 @@ path_each_line(int argc, VALUE *argv, VALUE self) https://github.com/ruby/ruby/blob/trunk/ext/pathname/pathname.c#L360
     args[0] = get_strpath(self);
     n = rb_scan_args(argc, argv, "03", &args[1], &args[2], &args[3]);
     if (rb_block_given_p()) {
-        return rb_block_call(rb_cFile, id_foreach, 1+n, args, 0, 0);
+        return rb_block_call_kw(rb_cFile, id_foreach, 1+n, args, 0, 0, RB_PASS_CALLED_KEYWORDS);
     }
     else {
-        return rb_funcallv(rb_cFile, id_foreach, 1+n, args);
+        return rb_funcallv_kw(rb_cFile, id_foreach, 1+n, args, RB_PASS_CALLED_KEYWORDS);
     }
 }
 
diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb
index 2c07f77..b04c7eb 100644
--- a/test/pathname/test_pathname.rb
+++ b/test/pathname/test_pathname.rb
@@ -707,6 +707,32 @@ class TestPathname < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/pathname/test_pathname.rb#L707
     }
   end
 
+  def test_each_line_opts
+    with_tmpchdir('rubytest-pathname') {|dir|
+      open("a", "w") {|f| f.puts 1, 2 }
+      a = []
+      Pathname("a").each_line(chomp: true) {|line| a << line }
+      assert_equal(["1", "2"], a)
+
+      a = []
+      Pathname("a").each_line("2", chomp: true) {|line| a << line }
+      assert_equal(["1\n", "\n"], a)
+
+      a = []
+      Pathname("a").each_line(1, chomp: true) {|line| a << line }
+      assert_equal(["1", "", "2", ""], a)
+
+      a = []
+      Pathname("a").each_line("2", 1, chomp: true) {|line| a << line }
+      assert_equal(["1", "\n", "", "\n"], a)
+
+      a = []
+      enum = Pathname("a").each_line(chomp: true)
+      enum.each {|line| a << line }
+      assert_equal(["1", "2"], a)
+    }
+  end
+
   def test_readlines
     with_tmpchdir('rubytest-pathname') {|dir|
       open("a", "w") {|f| f.puts 1, 2 }
-- 
cgit v1.1


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]