plugins/kernel_v2/config/vagrant.rb in vagrant-unbundled-2.2.3.0 vs plugins/kernel_v2/config/vagrant.rb in vagrant-unbundled-2.2.4.0

- old
+ new

@@ -5,11 +5,12 @@ class VagrantConfig < Vagrant.plugin("2", :config) attr_accessor :host attr_accessor :sensitive attr_accessor :plugins - VALID_PLUGIN_KEYS = [:sources, :version, :entry_point].freeze + VALID_PLUGIN_KEYS = ["sources", "version", "entry_point"].map(&:freeze).freeze + INVALID_PLUGIN_FORMAT = :invalid_plugin_format def initialize @host = UNSET_VALUE @sensitive = UNSET_VALUE @plugins = UNSET_VALUE @@ -41,17 +42,25 @@ if @sensitive && (!@sensitive.is_a?(Array) && !@sensitive.is_a?(String)) errors << I18n.t("vagrant.config.root.sensitive_bad_type") end - @plugins.each do |plugin_name, plugin_info| - invalid_keys = plugin_info.keys - VALID_PLUGIN_KEYS - if !invalid_keys.empty? - errors << I18n.t("vagrant.config.root.plugins_bad_key", - plugin_name: plugin_name, - plugin_key: invalid_keys.join(", ") - ) + if @plugins == INVALID_PLUGIN_FORMAT + errors << I18n.t("vagrant.config.root.plugins_invalid_format") + else + @plugins.each do |plugin_name, plugin_info| + if plugin_info.is_a?(Hash) + invalid_keys = plugin_info.keys - VALID_PLUGIN_KEYS + if !invalid_keys.empty? + errors << I18n.t("vagrant.config.root.plugins_bad_key", + plugin_name: plugin_name, + plugin_key: invalid_keys.join(", ") + ) + end + else + errors << I18n.t("vagrant.config.root.plugins_invalid_format") + end end end {"vagrant" => errors} end @@ -59,21 +68,29 @@ def to_s "Vagrant" end def format_plugins(val) - result = case val - when String - {val => {}} - when Array - Hash[val.map{|item| [item.to_s, {}]}] - else - val - end - result.keys.each do |key| - result[key] = Hash[result[key].map{|k,v| [k.to_sym, v]}] + case val + when String + {val => Vagrant::Util::HashWithIndifferentAccess.new} + when Array + val.inject(Vagrant::Util::HashWithIndifferentAccess.new) { |memo, item| + memo.merge(format_plugins(item)) + } + when Hash + Vagrant::Util::HashWithIndifferentAccess.new.tap { |h| + val.each_pair { |k, v| + if v.is_a?(Hash) + h[k] = Vagrant::Util::HashWithIndifferentAccess.new(v) + else + h[k] = v + end + } + } + else + INVALID_PLUGIN_FORMAT end - result end end end end