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