def []=(key, hash)
      raise ArgumentError, "Must provide a hash for the value" unless hash.is_a?(Hash)
      @source[normalize_key(key)] = OpenStruct.new(@default.merge(hash))
    end
def []=(key, hash)
      raise ArgumentError, "Must provide a hash for the value" unless hash.is_a?(Hash)
      @source[normalize_key(key)] = OpenStruct.new(@default.merge(hash))
    end
Build a new AttributeCollection with an optional Hash.
 Note: this class normalizes the keys and creates OpenStructs for values.
 @param [Hash] default A hash with normalized keys and OpenStruct values
 Set one attribute in the collection.
 @param [String, Symbol] key
 @param [Hash] hash
 @return [OpenStruct] The hash, converted into an OpenStruct