class Radar::API::Resource
Public Class Methods
api_client()
click to toggle source
# File lib/radar/api/resource.rb, line 8 def self.api_client @api_client ||= Radar::API::Client.new end
class_name()
click to toggle source
# File lib/radar/api/resource.rb, line 12 def self.class_name name.split('::')[-1] end
descendants()
click to toggle source
# File lib/radar/api/resource.rb, line 22 def self.descendants ObjectSpace.each_object(Class).select do |klass| klass < self && klass != Radar::API::NestedResource end end
new(data = {})
click to toggle source
# File lib/radar/api/resource.rb, line 4 def initialize(data = {}) convert_to_obj(data) end
resource_base_path(path_base: '/v1/')
click to toggle source
# File lib/radar/api/resource.rb, line 16 def self.resource_base_path(path_base: '/v1/') raise NotImplementedError, 'Radar::API::Resource is an abstract class' if self == Resource path_base + self::RESOURCE_NAME[:plural] end
Public Instance Methods
to_h()
click to toggle source
# File lib/radar/api/resource.rb, line 28 def to_h instance_variables.each_with_object({}) do |instance_variable, h| key = instance_variable[1..instance_variable.length] value = instance_variable_get(instance_variable) h[key.to_sym] = build_hash_value_from_attribute_value(value) end end
Private Instance Methods
build_hash_value_from_attribute_value(attr_value)
click to toggle source
# File lib/radar/api/resource.rb, line 38 def build_hash_value_from_attribute_value(attr_value) return attr_value.to_h if known_resource_class?(attr_value.class) return attr_value.map(&:to_h) if collection_of_known_resource_class?(attr_value) attr_value end
build_object(key, value)
click to toggle source
# File lib/radar/api/resource.rb, line 61 def build_object(key, value) return build_resource_collection(key, value) if nested_resource_collection?(key, value) return build_resource(key, value) if nested_resource?(key, value) value end
build_resource(key, resource_attributes)
click to toggle source
# File lib/radar/api/resource.rb, line 73 def build_resource(key, resource_attributes) resource_class(key).new(resource_attributes) end
build_resource_collection(key, value)
click to toggle source
# File lib/radar/api/resource.rb, line 68 def build_resource_collection(key, value) resource_collection = value.map { |resource_attributes| build_resource(key, resource_attributes) } instance_variable_set("@#{key}", resource_collection) end
collection_of_known_resource_class?(object)
click to toggle source
# File lib/radar/api/resource.rb, line 45 def collection_of_known_resource_class?(object) object.is_a?(Array) && object.all? { |item| known_resource_class?(item.class) } end
convert_to_obj(hash)
click to toggle source
# File lib/radar/api/resource.rb, line 53 def convert_to_obj(hash) sanitized_hash(hash).each do |key, value| object = build_object(key, value) instance_variable_set("@#{key}", object) self.class.send(:attr_accessor, key) end end
known_resource_class?(object_class)
click to toggle source
# File lib/radar/api/resource.rb, line 49 def known_resource_class?(object_class) Radar.api_resources.value?(object_class) end
nested_resource?(key, value)
click to toggle source
# File lib/radar/api/resource.rb, line 81 def nested_resource?(key, value) Radar.api_resources.key?(key) && value.is_a?(Hash) end
nested_resource_collection?(key, value)
click to toggle source
# File lib/radar/api/resource.rb, line 77 def nested_resource_collection?(key, value) value.is_a?(Array) && value.all? { |obj| nested_resource?(key, obj) } end
resource_class(resource)
click to toggle source
# File lib/radar/api/resource.rb, line 85 def resource_class(resource) Radar.api_resources[resource] end
sanitized_hash(hash)
click to toggle source
# File lib/radar/api/resource.rb, line 89 def sanitized_hash(hash) hash.tap do |h| h.keys.each { |key| h[key.to_snake_case] = h.delete(key) } end end