class Restforce::Concerns::CompositeAPI::Subrequests
def composite_api_path(path)
def composite_api_path(path) "/services/data/v#{options[:api_version]}/sobjects/#{path}" end
def create(sobject, reference_id, attrs)
def create(sobject, reference_id, attrs) requests << { method: 'POST', url: composite_api_path(sobject), body: attrs, referenceId: reference_id } end
def destroy(sobject, reference_id, id)
def destroy(sobject, reference_id, id) requests << { method: 'DELETE', url: composite_api_path("#{sobject}/#{id}"), referenceId: reference_id } end
def find(sobject, reference_id, id)
def find(sobject, reference_id, id) requests << { method: 'GET', url: composite_api_path("#{sobject}/#{id}"), referenceId: reference_id } end
def initialize(options)
def initialize(options) @options = options @requests = [] end
def update(sobject, reference_id, attrs)
def update(sobject, reference_id, attrs) id = attrs.fetch(attrs.keys.find { |k, _v| k.to_s.casecmp?('id') }, nil) raise ArgumentError, 'Id field missing from attrs.' unless id attrs_without_id = attrs.reject { |k, _v| k.to_s.casecmp?('id') } requests << { method: 'PATCH', url: composite_api_path("#{sobject}/#{id}"), body: attrs_without_id, referenceId: reference_id } end
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