class Restforce::Concerns::CompositeAPI::Subrequests

def upsert(sobject, reference_id, ext_field, attrs)

def upsert(sobject, reference_id, ext_field, attrs)
  raise ArgumentError, 'External id field missing.' unless ext_field
  ext_id = attrs.fetch(attrs.keys.find do |k, _v|
    k.to_s.casecmp?(ext_field.to_s)
  end, nil)
  raise ArgumentError, 'External id missing from attrs.' unless ext_id
  attrs_without_ext_id = attrs.reject { |k, _v| k.to_s.casecmp?(ext_field) }
  requests << {
    method: 'PATCH',
    url: composite_api_path("#{sobject}/#{ext_field}/#{ext_id}"),
    body: attrs_without_ext_id,
    referenceId: reference_id
  }
end