summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb7
-rw-r--r--test/psych/test_date_time.rb15
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