module Restforce::Concerns::CompositeAPI

def composite(all_or_none: false, collate_subrequests: false)

def composite(all_or_none: false, collate_subrequests: false)
  subrequests = Subrequests.new(options)
  yield(subrequests)
  if subrequests.requests.length > 25
    raise ArgumentError, 'Cannot have more than 25 subrequests.'
  end
  properties = {
    compositeRequest: subrequests.requests,
    allOrNone: all_or_none,
    collateSubrequests: collate_subrequests
  }
  response = api_post('composite', properties.to_json)
  results = response.body['compositeResponse']
  has_errors = results.any? { |result| result['httpStatusCode'].digits.last == 4 }
  if all_or_none && has_errors
    last_error_index = results.rindex { |result| result['httpStatusCode'] != 412 }
    last_error = results[last_error_index]
    raise CompositeAPIError.new(last_error['body'][0]['errorCode'], response)
  end
  results
end

def composite!(collate_subrequests: false, &block)

def composite!(collate_subrequests: false, &block)
  composite(all_or_none: true, collate_subrequests: collate_subrequests, &block)
end