def unparse(value_, params_=nil)
unparse_params_ = value_.unparse_params || default_unparse_params
_interpret_field_lists(unparse_params_)
if params_
unparse_params_.merge!(params_)
_interpret_field_lists(unparse_params_)
end
skipped_handler_list_ = nil
requires_next_field_ = false
string_ = ''
value_.each_field_object do |field_, val_|
handler_ = @field_handlers[field_.name]
unparse_data_ = handler_.unparse(val_, unparse_params_, requires_next_field_)
if unparse_data_
if skipped_handler_list_ && handler_.requires_previous_field
skipped_handler_list_.each do |pair_|
frag_ = pair_[0].unparse(pair_[1], unparse_params_, true)
unless frag_
raise Errors::UnparseError, "Field #{field_.name} empty although a prerequisite for a later field"
end
string_ << frag_[0]
end
end
skipped_handler_list_ = nil
string_ << unparse_data_[0]
requires_next_field_ = unparse_data_[1]
else
if handler_.requires_previous_field
(skipped_handler_list_ ||= []) << [handler_, val_]
else
skipped_handler_list_ = [[handler_, val_]]
end
requires_next_field_ = false
end
end
string_ << (unparse_params_[:suffix] || '')
string_
end