module Ahub::APIResource
Attributes
attributes[R]
Public Class Methods
new(attrs)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 11 def initialize(attrs) @attributes ||= {} attrs.each_pair { |k,v| @attributes[k.to_sym] = v } attrs.each_pair do |k,v| attribute_name = k.to_s.underscore if instance_variable_get("@#{attribute_name}").nil? instance_variable_set("@#{attribute_name}", v) end next if respond_to?(k) && k != :id self.class.send(:define_method, attribute_name) do instance_variable_get("@#{__method__}") end end end
Public Instance Methods
admin_headers()
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 56 def admin_headers headers(username: Ahub::ADMIN_USER, password: Ahub::ADMIN_PASS) end
base_url()
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 78 def base_url class_name = name.gsub(/Ahub::/, '').downcase "#{Ahub::DOMAIN}/services/v2/#{class_name}" end
create_resource(url:, payload:, headers:)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 112 def create_resource(url:, payload:, headers:) response = RestClient.post(url, payload.to_json, headers) find(object_id_from_response(response)) end
find(id)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 60 def find(id) url = "#{base_url}/#{id}.json" new get_resource(url: url, headers:admin_headers) rescue RestClient::ResourceNotFound nil end
find_all(params: nil, page: 1, page_size: 50)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 68 def find_all(params: nil, page: 1, page_size: 50) url = "#{base_url}.json?page=#{page}&pageSize=#{page_size}" if params params.each{|k,v| url << "&#{k}=#{URI.encode(v)}"} end get_resources(url: url, headers: admin_headers, klass: self) end
get_resource(url:, headers:)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 87 def get_resource(url:, headers:) JSON.parse(RestClient.get(url, headers), symbolize_names:true) end
get_resources(url:, headers:, klass:)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 91 def get_resources(url:, headers:, klass:) response = JSON.parse(RestClient.get(url, headers), symbolize_names:true) response[:list].map do |node| klass.new(node) end end
headers(username:, password:)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 46 def headers(username:, password:) encoded = "Basic #{::Base64.strict_encode64("#{username}:#{password}")}" { 'Authorization' => encoded, 'Accept' => "application/json", 'Content-type' => "application/json", } end
json_url()
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 30 def json_url "#{self.class.base_url}/#{id}.json" if id end
object_id_from_response(response)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 83 def object_id_from_response(response) response.headers[:location].match(/(?<id>\d*)\.json/)[:id].to_i end
update()
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 34 def update raise NotImplementedError end
update_attribute(attribute, value)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 38 def update_attribute(attribute, value) payload = {} payload[attribute] = value self.class.update_resource(resource: self, payload: payload) end
update_resource(resource:, payload:)
click to toggle source
# File lib/ahub/modules/api_resource.rb, line 98 def update_resource(resource:, payload:) raise Exception.new('#id is required for an update') unless resource.id begin response = RestClient.put(resource.json_url, payload.to_json, admin_headers) resource.send(:initialize, JSON.parse(response)) payload.each{|k,v| resource.instance_variable_set("@#{k}", v) } true rescue Exception => e false end end