class Recruitee::APIResource

Attributes

client[R]
resource_klass[R]

Public Class Methods

new(client, resource_klass) click to toggle source
# File lib/recruitee/api_resource.rb, line 7
def initialize(client, resource_klass)
  if client.nil? || resource_klass.nil?
    raise ArgumentError, 'client & resource class must be provided'
  end

  @client = client
  @resource_klass = resource_klass
end

Public Instance Methods

create(data = {}) click to toggle source
# File lib/recruitee/api_resource.rb, line 16
def create(data = {})
  body = namespaced_body(data)
  payload = request(:post, resource_url, body: body)

  initialize_from(payload[resource_name])
end
destroy(id, params = {}) click to toggle source
# File lib/recruitee/api_resource.rb, line 23
def destroy(id, params = {})
  payload = request(:delete, "#{resource_url}/#{id}", params: params)

  initialize_from(payload[resource_name])
end
find(id, params = {}) click to toggle source
# File lib/recruitee/api_resource.rb, line 29
def find(id, params = {})
  payload = request(:get, "#{resource_url}/#{id}", params: params)

  initialize_from(payload[resource_name])
end
list(params = {}) click to toggle source
# File lib/recruitee/api_resource.rb, line 35
def list(params = {})
  payload = request(:get, resource_url, params: params)

  payload["#{resource_name}s"].map { |props| initialize_from(props) }
end
resource_name() click to toggle source
# File lib/recruitee/api_resource.rb, line 48
def resource_name
  Util.underscore(resource_klass.name.split('::').last)
end
resource_url() click to toggle source
# File lib/recruitee/api_resource.rb, line 52
def resource_url
  "/#{resource_name}s"
end
update(id, data = {}) click to toggle source
# File lib/recruitee/api_resource.rb, line 41
def update(id, data = {})
  body = namespaced_body(data)
  payload = request(:patch, "#{resource_url}/#{id}", body: body)

  initialize_from(payload[resource_name])
end

Private Instance Methods

initialize_from(properties) click to toggle source
# File lib/recruitee/api_resource.rb, line 58
def initialize_from(properties)
  resource_klass.new(client, properties)
end
namespaced_body(data) click to toggle source
# File lib/recruitee/api_resource.rb, line 62
def namespaced_body(data)
  data[resource_name.to_sym] ? data : { "#{resource_name}": data }
end
request(*args) click to toggle source
# File lib/recruitee/api_resource.rb, line 66
def request(*args)
  response = client.request(*args)

  if response.status_code < 200 || response.status_code >= 400
    raise response.to_s
  end

  response.body
end