class JsonApiClient::Query::Requestor

Attributes

klass[R]

Public Class Methods

new(klass) click to toggle source
# File lib/json_api_client/query/requestor.rb, line 7
def initialize(klass)
  @klass = klass
end

Public Instance Methods

create(record) click to toggle source

expects a record

# File lib/json_api_client/query/requestor.rb, line 12
def create(record)
  request(
    :post,
    klass.path(record.path_attributes),
    body: { data: record.as_json_api },
    params: record.request_params.to_params
  )
end
custom(method_name, options, params) click to toggle source
# File lib/json_api_client/query/requestor.rb, line 44
def custom(method_name, options, params)
  path = resource_path(params)
  params.delete(klass.primary_key)
  path = File.join(path, method_name.to_s)
  request_method = options.fetch(:request_method, :get).to_sym
  query_params, body_params = [:get, :delete].include?(request_method) ? [params, nil] : [nil, params]
  request(request_method, path, params: query_params, body: body_params)
end
destroy(record) click to toggle source
# File lib/json_api_client/query/requestor.rb, line 36
def destroy(record)
  request(:delete, resource_path(record.path_attributes))
end
get(params = {}) click to toggle source
# File lib/json_api_client/query/requestor.rb, line 30
def get(params = {})
  path = resource_path(params)
  params.delete(klass.primary_key)
  request(:get, path, params: params)
end
linked(path) click to toggle source
# File lib/json_api_client/query/requestor.rb, line 40
def linked(path)
  request(:get, path)
end
update(record) click to toggle source
# File lib/json_api_client/query/requestor.rb, line 21
def update(record)
  request(
    :patch,
    resource_path(record.path_attributes),
    body: { data: record.as_json_api },
    params: record.request_params.to_params
  )
end

Protected Instance Methods

request(type, path, params: nil, body: nil) click to toggle source
# File lib/json_api_client/query/requestor.rb, line 66
def request(type, path, params: nil, body: nil)
  response = connection.run(type, path, params: params, body: body, headers: klass.custom_headers)
  klass.parser.parse(klass, response)
end
resource_path(parameters) click to toggle source
# File lib/json_api_client/query/requestor.rb, line 58
def resource_path(parameters)
  if resource_id = parameters[klass.primary_key]
    File.join(klass.path(parameters), encode_part(resource_id))
  else
    klass.path(parameters)
  end
end