From 08f9fb3805a499ffd05e43506e1917345d9230cc Mon Sep 17 00:00:00 2001 From: Shizuo Fujita Date: Sat, 11 Jan 2025 12:14:18 +0900 Subject: [PATCH] Accept the object that has #to_path in Logger::LogDevice.new Because the `path` keyword in File.new will only accept objects that have `to_str`. --- lib/logger/log_device.rb | 1 + test/logger/test_logdevice.rb | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/logger/log_device.rb b/lib/logger/log_device.rb index 31aa727..774bf99 100644 --- a/lib/logger/log_device.rb +++ b/lib/logger/log_device.rb @@ -99,6 +99,7 @@ def fixup_mode(dev, filename) else def fixup_mode(dev, filename) return dev if @binmode + filename = filename.respond_to?(:to_path) ? filename.to_path : filename dev.autoclose = false old_dev = dev dev = File.new(dev.fileno, mode: MODE, path: filename) diff --git a/test/logger/test_logdevice.rb b/test/logger/test_logdevice.rb index 25c52c1..2d1a201 100644 --- a/test/logger/test_logdevice.rb +++ b/test/logger/test_logdevice.rb @@ -3,6 +3,7 @@ require 'logger' require 'tempfile' require 'tmpdir' +require 'pathname' class TestLogDevice < Test::Unit::TestCase class LogExcnRaiser @@ -79,6 +80,20 @@ def test_initialize File.unlink(tempfile) tempfile.close(true) end + # logfile object with Pathname object + tempfile = Tempfile.new("logger") + pathname = Pathname.new(tempfile.path) + logdev = d(pathname) + begin + logdev.write('world') + logfile = File.read(pathname) + assert_equal(1, logfile.split(/\n/).size) + assert_match(/^world$/, logfile) + assert_equal(pathname, logdev.filename) + ensure + logdev.close + tempfile.close(true) + end end def test_write