module Arbor::API
Public Instance Methods
changelog(type, from_revision = 0)
click to toggle source
# File lib/arbor/api.rb, line 21 def changelog(type, from_revision = 0) resource = parse_resource_name(type) data = get("/rest-v2/#{resource.dasherize.tr('/', '_')}/changelog?from-revision=#{from_revision}") data['changes'].each do |c| c['entityType'] = "change" @highest_revision = [highest_revision, BigDecimal.new(c['toRevision'])].max end unmarshall_data(data, 'changes') end
query(type, query = nil)
click to toggle source
# File lib/arbor/api.rb, line 12 def query(type, query = nil) resource = parse_resource_name(type) query_string = query.build_query_string if query data = get("/rest-v2/#{resource.dasherize.tr('/', '_')}?#{query_string}") unmarshall_data(data, resource) end
retrieve(type, id)
click to toggle source
# File lib/arbor/api.rb, line 5 def retrieve(type, id) resource = parse_resource_name(type) data = get("/rest-v2/#{resource.dasherize}/#{id}") unmarshall_data(data, resource) end
Private Instance Methods
unmarshall_data(data, resource)
click to toggle source
# File lib/arbor/api.rb, line 35 def unmarshall_data(data, resource) singular_resource = resource.singularize.camelize(:lower).gsub('::', '_') plural_resource = resource.camelize(:lower).gsub('::', '_') if (res = data[singular_resource]) Model::Serialiser.parse_resource(res).tap { |obj| obj.attach_client(self) if obj.respond_to?(:attach_client) obj.lock_attributes = true if obj.respond_to?(:lock_attributes) } elsif data[plural_resource] data[plural_resource].map do |res| Model::Serialiser.parse_resource(res).tap { |obj| obj.attach_client(self) if obj.respond_to?(:attach_client) } end elsif data.empty? [] elsif data["errors"] || (data["status"] && !data["status"]["success"]) raise Errors::APIError, "#{data["status"]["code"]} #{data["status"]["reason"]}: #{data["status"]["errors"].join(", ")}" elsif (data[:response] && !data["response"]["success"]) raise Errors::APIError, "#{data["response"]["code"]} #{data["response"]["reason"]}" else raise Errors::SerialisationError, "Unexpected root key in API data. Expected: #{plural_resource} or #{singular_resource}. Actual data: #{data}" end end