def from_h(h)
      @key_ambiguity_validator.validate!(h)

      h.each do |property, value|
        p = property.to_sym
        if value.is_a?(::Hash) && __nested?(p)
          @data[p].from_h(value)
        elsif __configurable?(p)
          __assign!(p, value)
        end
      end

      self
    end
def from_h(h)
      @key_ambiguity_validator.validate!(h)

      h.each do |property, value|
        p = property.to_sym
        if value.is_a?(::Hash) && __nested?(p)
          @data[p].from_h(value)
        elsif __configurable?(p)
          __assign!(p, value)
        end
      end

      self
    end
A convenience accessor to instantiate a configuration from a hash
 @param [Hash] h the hash to read into the configuration
 @return [Configuration] the configuration with values assigned
 @raise [ConfigurationError] if the given hash ambiguous values
     - string and symbol keys with the same string value pointing to
     different values