class WCC::API::RestClient::Resource

Attributes

client[R]
endpoint[R]
model[R]
options[R]

Public Class Methods

new(client, endpoint, model, options) click to toggle source
# File lib/wcc/api/rest_client.rb, line 155
def initialize(client, endpoint, model, options)
  @client = client
  @endpoint = endpoint
  @model = model
  @options = options
end

Public Instance Methods

create(body) click to toggle source
# File lib/wcc/api/rest_client.rb, line 179
def create(body)
  resp = client.post(endpoint, body)
  resp.assert_ok!
  maybe_model_from_response(resp)
end
destroy(id) click to toggle source
# File lib/wcc/api/rest_client.rb, line 191
def destroy(id)
  resp = client.delete("#{endpoint}/#{id}")
  resp.assert_ok!
  maybe_model_from_response(resp)
end
find(id, query = {}) click to toggle source
# File lib/wcc/api/rest_client.rb, line 162
def find(id, query = {})
  query = (options[:query] || {}).merge(query)
  resp = client.get("#{endpoint}/#{id}", query)
  resp.assert_ok!
  body = options[:key] ? resp.body[options[:key]] : resp.body
  model.new(body, resp.headers.freeze)
end
list(**filters) click to toggle source
# File lib/wcc/api/rest_client.rb, line 170
def list(**filters)
  query = extract_params(filters)
  query = (options[:query] || {}).merge(query)
  query = query.merge!(apply_filters(filters, options[:filters]))
  resp = client.get(endpoint, query)
  resp.assert_ok!
  resp.items.map { |s| model.new(s) }
end
update(id, body) click to toggle source
# File lib/wcc/api/rest_client.rb, line 185
def update(id, body)
  resp = client.put("#{endpoint}/#{id}", body)
  resp.assert_ok!
  maybe_model_from_response(resp)
end

Protected Instance Methods

apply_filters(filters, expected_filters) click to toggle source
# File lib/wcc/api/rest_client.rb, line 220
def apply_filters(filters, expected_filters)
  defaults = default_filters(expected_filters) || {}
  filters.each_with_object(defaults) do |(k, v), h|
    k = k.to_s
    raise ArgumentError, "Unknown filter '#{k}'" unless expected_filters.include?(k)

    h[filter_key(k)] = v
  end
end
default_filters(expected_filters) click to toggle source
# File lib/wcc/api/rest_client.rb, line 230
def default_filters(expected_filters)
  options[:default_filters]&.each_with_object({}) do |(k, v), h|
    k = k.to_s
    h[filter_key(k)] = v if expected_filters.include?(k)
  end
end
extract_params(filters) click to toggle source
# File lib/wcc/api/rest_client.rb, line 209
def extract_params(filters)
  filters.each_with_object({}) do |(k, _v), h|
    k_s = k.to_s
    h[k_s] = filters.delete(k) if client.class.params.include?(k_s)
  end
end
filter_key(filter_name) click to toggle source
# File lib/wcc/api/rest_client.rb, line 216
def filter_key(filter_name)
  filter_name
end
maybe_model_from_response(resp) click to toggle source
# File lib/wcc/api/rest_client.rb, line 199
def maybe_model_from_response(resp)
  return true if resp.status == 204
  return true unless resp.raw_body.present?

  body = options[:key] ? resp.body[options[:key]] : resp.body
  return true unless body.present?

  model.new(body, resp.headers.freeze)
end