Last active
January 15, 2025 19:23
-
-
Save fnordfish/5ece8532766e46c884bb791b611c7a2c to your computer and use it in GitHub Desktop.
Add :stringify_names option to Psych.safe_dump
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/psych/visitors/yaml_tree.rb b/lib/psych/visitors/yaml_tree.rb | |
index 5149178..673c8bc 100644 | |
--- a/lib/psych/visitors/yaml_tree.rb | |
+++ b/lib/psych/visitors/yaml_tree.rb | |
@@ -70,6 +70,7 @@ module Psych | |
fail(ArgumentError, "Invalid line_width #{@line_width}, must be non-negative or -1 for unlimited.") | |
end | |
end | |
+ @stringify_names = options[:stringify_names] | |
@coders = [] | |
@dispatch_cache = Hash.new do |h,klass| | |
@@ -328,7 +329,7 @@ module Psych | |
if o.class == ::Hash | |
register(o, @emitter.start_mapping(nil, nil, true, Psych::Nodes::Mapping::BLOCK)) | |
o.each do |k,v| | |
- accept k | |
+ accept(@stringify_names && Symbol === k ? k.to_s : k) | |
accept v | |
end | |
@emitter.end_mapping | |
@@ -341,7 +342,7 @@ module Psych | |
register(o, @emitter.start_mapping(nil, '!set', false, Psych::Nodes::Mapping::BLOCK)) | |
o.each do |k,v| | |
- accept k | |
+ accept(@stringify_names && Symbol === k ? k.to_s : k) | |
accept v | |
end | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Psych.safe_dump({foo: { bar: "bar"} }, permitted_classes: [Symbol]) | |
=> "---\n:foo:\n :bar: bar\n" | |
Psych.safe_dump({foo: { bar: "bar"} }, stringify_names: true) | |
=> "---\nfoo:\n bar: bar\n" | |
Psych.safe_dump({foo: { bar: "bar", narf: :crash} }, stringify_names: true) | |
[...]/psych/lib/psych/visitors/yaml_tree.rb:580:in `visit_Symbol': Tried to dump unspecified class: Symbol(:crash) (Psych::DisallowedClass) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is now in Psych 5.2