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