class Restforce::Concerns::CompositeAPI::Subrequests

Attributes

options[R]
requests[R]

Public Class Methods

new(options) click to toggle source
# File lib/restforce/concerns/composite_api.rb, line 43
def initialize(options)
  @options = options
  @requests = []
end

Public Instance Methods

create(sobject, reference_id, attrs) click to toggle source
# File lib/restforce/concerns/composite_api.rb, line 49
def create(sobject, reference_id, attrs)
  requests << {
    method: 'POST',
    url: composite_api_path(sobject),
    body: attrs,
    referenceId: reference_id
  }
end
destroy(sobject, reference_id, id) click to toggle source
# File lib/restforce/concerns/composite_api.rb, line 71
def destroy(sobject, reference_id, id)
  requests << {
    method: 'DELETE',
    url: composite_api_path("#{sobject}/#{id}"),
    referenceId: reference_id
  }
end
find(sobject, reference_id, id) click to toggle source
# File lib/restforce/concerns/composite_api.rb, line 96
def find(sobject, reference_id, id)
  requests << {
    method: 'GET',
    url: composite_api_path("#{sobject}/#{id}"),
    referenceId: reference_id
  }
end
update(sobject, reference_id, attrs) click to toggle source
# File lib/restforce/concerns/composite_api.rb, line 58
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
upsert(sobject, reference_id, ext_field, attrs) click to toggle source
# File lib/restforce/concerns/composite_api.rb, line 79
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

Private Instance Methods

composite_api_path(path) click to toggle source
# File lib/restforce/concerns/composite_api.rb, line 106
def composite_api_path(path)
  "/services/data/v#{options[:api_version]}/sobjects/#{path}"
end