diff options
-rw-r--r-- | ext/psych/lib/psych/visitors/yaml_tree.rb | 7 | ||||
-rw-r--r-- | test/psych/test_date_time.rb | 15 |
2 files changed, 21 insertions, 1 deletions
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb index e27c927996..a9476df96e 100644 --- a/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -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 diff --git a/test/psych/test_date_time.rb b/test/psych/test_date_time.rb index 4565b8e764..79a48e2472 100644 --- a/test/psych/test_date_time.rb +++ b/test/psych/test_date_time.rb @@ -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 |