class Ponto::BaseResource
Public Class Methods
create_by_uri(uri:, resource_type:, attributes:, access_token:, meta: nil)
click to toggle source
# File lib/ponto/api/base_resource.rb, line 3 def self.create_by_uri(uri:, resource_type:, attributes:, access_token:, meta: nil) payload = { data: { type: resource_type, attributes: attributes } } payload[:data][:meta] = meta if meta raw_item = Ponto.client.post(uri: uri, payload: payload, access_token: access_token) new(raw_item["data"]) end
destroy_by_uri(uri:, access_token:, headers: nil)
click to toggle source
# File lib/ponto/api/base_resource.rb, line 39 def self.destroy_by_uri(uri:, access_token:, headers: nil) raw_item = Ponto.client.delete(uri: uri, headers: headers, access_token: access_token) new(raw_item["data"]) end
find_by_uri(uri:, access_token:, headers: nil)
click to toggle source
# File lib/ponto/api/base_resource.rb, line 30 def self.find_by_uri(uri:, access_token:, headers: nil) new(find_raw_by_uri(uri: uri, headers: headers, access_token: access_token)) end
find_raw_by_uri(uri:, access_token:, headers: nil)
click to toggle source
# File lib/ponto/api/base_resource.rb, line 34 def self.find_raw_by_uri(uri:, access_token:, headers: nil) raw_item = Ponto.client.get(uri: uri, headers: headers, access_token: access_token) raw_item["data"] end
list_by_uri(uri:, access_token:, query_params: {}, headers: nil)
click to toggle source
# File lib/ponto/api/base_resource.rb, line 15 def self.list_by_uri(uri:, access_token:, query_params: {}, headers: nil) raw_response = Ponto.client.get(uri: uri, query_params: query_params, headers: headers, access_token: access_token) items = raw_response["data"].map do |raw_item| new(raw_item) end Ponto::Collection.new( klass: self, items: items, links: raw_response["links"], paging: raw_response.dig("meta", "paging"), synchronized_at: raw_response.dig("meta", "synchronizedAt"), latest_synchronization: raw_response.dig("meta", "latestSynchronization"), ) end
new(raw)
click to toggle source
Calls superclass method
# File lib/ponto/api/base_resource.rb, line 44 def initialize(raw) attributes = prepare_attributes(raw) super(attributes) relationships = raw["relationships"] || {} setup_relationships(relationships) links = raw["links"] || {} setup_links(links) meta = raw["meta"] || {} end
Public Instance Methods
reload!()
click to toggle source
# File lib/ponto/api/base_resource.rb, line 57 def reload! reloaded = self.class.find_raw_by_uri(uri) attributes = prepare_attributes(reloaded) attributes.each do |key, value| self[key] = value end self end
Private Instance Methods
prepare_attributes(raw)
click to toggle source
# File lib/ponto/api/base_resource.rb, line 68 def prepare_attributes(raw) base = { "id" => raw["id"], } attributes = raw["attributes"] || {} meta = raw["meta"] || {} params = base.merge(attributes).merge(meta) Ponto::Util.underscorize_hash(params) end
setup_links(links)
click to toggle source
# File lib/ponto/api/base_resource.rb, line 99 def setup_links(links) links.each do |key, link| self[Ponto::Util.underscore("#{key}_link")] = link end end
setup_relationships(relationships)
click to toggle source
# File lib/ponto/api/base_resource.rb, line 78 def setup_relationships(relationships) relationships.each do |key, relationship| if relationship["data"] klass = Ponto.const_get(Ponto::Util.camelize(key)) method_name = Ponto::Util.underscore(key) define_singleton_method(method_name) do |headers: nil| klass.find_by_uri(uri: relationship["links"]["related"], headers: headers) end self[Ponto::Util.underscore("#{key}_id")] = relationship["data"]["id"] else singular_key = key[0..-2] klass = Ponto.const_get(Ponto::Util.camelize(singular_key)) method_name = Ponto::Util.underscore(key) define_singleton_method(method_name) do |headers: nil, **query_params| uri = relationship["links"]["related"] klass.list_by_uri(uri: uri, headers: headers, query_params: query_params) end end end end