def initialize(values_, format_, unparse_params_=nil)
unless values_.kind_of?(::Hash) || values_.kind_of?(::Array)
raise ::ArgumentError, "Expected hash or array but got #{values_.class}"
end
@_format = format_
@_unparse_params = unparse_params_
@_field_path = []
@_values = {}
values_ = _canonicalize_values_hash(values_) if values_.kind_of?(::Hash)
field_ = @_format.schema.root_field
while field_
value_ = values_.kind_of?(::Hash) ? values_[field_.name] : values_.shift
value_ = value_ ? field_.canonicalize_value(value_) : field_.default_value
@_field_path << field_
@_values[field_.name] = value_
field_ = field_.child(value_)
end
modules_ = @_format.schema.modules
extend(*modules_) if modules_.size > 0
end