diff --git a/ext/pathname/pathname.c b/ext/pathname/pathname.c index 6f4c8d23b5..55577d7da7 100644 --- a/ext/pathname/pathname.c +++ b/ext/pathname/pathname.c @@ -360,10 +360,10 @@ path_each_line(int argc, VALUE *argv, VALUE self) 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 2c07f77511..b04c7ebdae 100644 --- a/test/pathname/test_pathname.rb +++ b/test/pathname/test_pathname.rb @@ -707,6 +707,32 @@ class TestPathname < Test::Unit::TestCase } 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 }