class Sisense::API::Resource
Public Class Methods
api_client()
click to toggle source
# File lib/sisense/api/resource.rb, line 8 def self.api_client @api_client ||= Sisense::API::Client.new end
class_name()
click to toggle source
# File lib/sisense/api/resource.rb, line 12 def self.class_name name.split("::")[-1] end
descendants()
click to toggle source
# File lib/sisense/api/resource.rb, line 23 def self.descendants ObjectSpace.each_object(Class).select do |klass| klass < self && klass != Sisense::API::NestedResource end end
new(data = {})
click to toggle source
# File lib/sisense/api/resource.rb, line 4 def initialize(data = {}) convert_to_obj(data) end
resource_base_path(use_legacy_api: false)
click to toggle source
# File lib/sisense/api/resource.rb, line 16 def self.resource_base_path(use_legacy_api: false) raise NotImplementedError, "Sisense::API::Resource is an abstract class" if self == Resource path_base = use_legacy_api ? "/api/" : "/api/v1/" path_base + self::RESOURCE_NAME end
Public Instance Methods
to_h()
click to toggle source
# File lib/sisense/api/resource.rb, line 29 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/sisense/api/resource.rb, line 39 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/sisense/api/resource.rb, line 62 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/sisense/api/resource.rb, line 74 def build_resource(key, resource_attributes) resource_class(key).new(resource_attributes) end
build_resource_collection(key, value)
click to toggle source
# File lib/sisense/api/resource.rb, line 69 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/sisense/api/resource.rb, line 46 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/sisense/api/resource.rb, line 54 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/sisense/api/resource.rb, line 50 def known_resource_class?(object_class) Sisense.api_resources.value?(object_class) end
nested_resource?(key, value)
click to toggle source
# File lib/sisense/api/resource.rb, line 82 def nested_resource?(key, value) Sisense.api_resources.key?(key) && value.is_a?(Hash) end
nested_resource_collection?(key, value)
click to toggle source
# File lib/sisense/api/resource.rb, line 78 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/sisense/api/resource.rb, line 86 def resource_class(resource) Sisense.api_resources[resource] end
sanitized_hash(hash)
click to toggle source
# File lib/sisense/api/resource.rb, line 90 def sanitized_hash(hash) hash.tap do |h| h.keys.each { |key| h[key.to_snake_case] = h.delete(key) } end end