[ruby/psych] Format Date in ISO-8601 explicitly

Fix https://github.com/ruby/psych/pull/644

https://github.com/ruby/psych/commit/b1ade765ba
This commit is contained in:
Nobuyoshi Nakada 2025-03-27 23:47:13 +09:00 committed by git
parent 5adb2591da
commit 49d49d5985
2 changed files with 21 additions and 1 deletions

View File

@ -189,7 +189,8 @@ module Psych
end
def visit_Date o
register o, visit_Integer(o.gregorian)
formatted = format_date o
register o, @emitter.scalar(formatted, nil, nil, true, false, Nodes::Scalar::ANY)
end
def visit_DateTime o
@ -486,6 +487,10 @@ module Psych
end
end
def format_date date
date.strftime("%Y-%m-%d")
end
def register target, yaml_obj
@st.register target, yaml_obj
yaml_obj

View File

@ -85,5 +85,20 @@ module Psych
assert_match('&', yaml)
assert_match('*', yaml)
end
def test_overwritten_to_s
pend "Failing on JRuby" if RUBY_PLATFORM =~ /java/
s = Psych.dump(Date.new(2023, 9, 2), permitted_classes: [Date])
assert_separately(%W[-rpsych -rdate - #{s}], "#{<<~"begin;"}\n#{<<~'end;'}")
class Date
undef to_s
def to_s; strftime("%D"); end
end
expected = ARGV.shift
begin;
s = Psych.dump(Date.new(2023, 9, 2), permitted_classes: [Date])
assert_equal(expected, s)
end;
end
end
end