From 4b14221be48efa3c404d06550ca2c2169b8611df Mon Sep 17 00:00:00 2001 From: Chris Roberts Date: Wed, 17 Nov 2021 14:52:39 -0800 Subject: [PATCH] Full extract all nested values when mapping --- plugins/commands/serve/mappers/wrappers.rb | 39 ++++++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/plugins/commands/serve/mappers/wrappers.rb b/plugins/commands/serve/mappers/wrappers.rb index 5af37df8e..89c22c397 100644 --- a/plugins/commands/serve/mappers/wrappers.rb +++ b/plugins/commands/serve/mappers/wrappers.rb @@ -17,7 +17,34 @@ module VagrantPlugins value.new.value.class : value.new.values.class n = type.name.to_s.split("::").last - Class.new(Mapper).class_eval " + + Class.new(Mapper) do + def converter(proto) + v = extract(proto) + embiggen(v) + end + + def extract(v) + if v.respond_to?(:value) + v = v.value + elsif v.respond_to?(:values) + v = v.values.to_a + elsif v.respond_to?(:fields) + v = v.fields.to_h + else + v + end + end + + def embiggen(v) + return v if !v.is_a?(Enumerable) + v.class[ + v.map { |nv| + embiggen(extract(nv)) + } + ] + end + end.class_eval " def initialize super( inputs: [Input.new(type: #{value.name})], @@ -33,16 +60,6 @@ module VagrantPlugins def to_s '<#{name}To#{n}:' + object_id.to_s + '>' end - - def converter(proto) - if proto.respond_to?(:value) - proto.value - elsif proto.respond_to?(:values) - proto.values.to_a - else - proto.fields.to_h - end - end " end end