From 26bb190c521acf1bbdf796fb410b0c5a091495bb Mon Sep 17 00:00:00 2001 From: kwatch Date: Sat, 19 Nov 2016 09:28:32 +0900 Subject: [PATCH 5/9] feat(psych): add hook points for merge ('<<') --- ext/psych/lib/psych/visitors/to_ruby.rb | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/ext/psych/lib/psych/visitors/to_ruby.rb b/ext/psych/lib/psych/visitors/to_ruby.rb index cebafee..f96ca98 100644 --- a/ext/psych/lib/psych/visitors/to_ruby.rb +++ b/ext/psych/lib/psych/visitors/to_ruby.rb @@ -354,17 +354,13 @@ def revive_hash hash, o case v when Nodes::Alias, Nodes::Mapping begin - hash.merge! val + merge_mapping(hash, val) rescue TypeError hash[key] = val end when Nodes::Sequence begin - h = {} - val.reverse_each do |value| - h.merge! value - end - hash.merge! h + merge_sequence(hash, val) rescue TypeError hash[key] = val end @@ -379,6 +375,18 @@ def revive_hash hash, o hash end + def merge_mapping hash, val + hash.merge! val + end + + def merge_sequence hash, val + h = {} + val.reverse_each do |value| + h.merge! value + end + hash.merge! h + end + def merge_key hash, key, val end -- 2.9.3 (Apple Git-75)