Class: Latitude::API::APIObject

Inherits:
Object
  • Object
show all
Extended by:
Latitude::API::Attributes::ClassMethods
Includes:
Latitude::API::Attributes::InstanceMethods
Defined in:
lib/latitude/api/api_object.rb

Direct Known Subclasses

Objects::Billing, Objects::Currency, Objects::Limits, Objects::Project, Objects::Role, Objects::Stats, Objects::Tag, Objects::Team, Objects::User, Resources::BillingUsage::Period, Resources::ElasticIP::Location, Resources::ElasticIP::Region, Resources::ElasticIP::Server, Resources::Event::Author, Resources::Event::Target, Resources::Firewall::Assignment::Firewall, Resources::Firewall::Assignment::Server, Resources::Firewall::Rule, Resources::IP::Assignment, Resources::IP::Elastic, Resources::IP::Location, Resources::IP::Region, Resources::KubernetesCluster::ControlPlane, Resources::KubernetesCluster::Node, Resources::KubernetesCluster::Step, Resources::KubernetesCluster::Worker, Resources::Plan::BRL, Resources::Plan::Bandwidth::Brl, Resources::Plan::Bandwidth::Pricing, Resources::Plan::Bandwidth::Usd, Resources::Plan::Cpu, Resources::Plan::Drive, Resources::Plan::Gpu, Resources::Plan::Location, Resources::Plan::Memory, Resources::Plan::Nic, Resources::Plan::OperatingSystem::Feature, Resources::Plan::Pricing, Resources::Plan::Region, Resources::Plan::Spec, Resources::Plan::Storage::BRL, Resources::Plan::Storage::Pricing, Resources::Plan::Storage::Region, Resources::Plan::Storage::USD, Resources::Plan::USD, Resources::Plan::VirtualMachine::BRL, Resources::Plan::VirtualMachine::Disk, Resources::Plan::VirtualMachine::Location, Resources::Plan::VirtualMachine::Nic, Resources::Plan::VirtualMachine::Pricing, Resources::Plan::VirtualMachine::Region, Resources::Plan::VirtualMachine::Size, Resources::Plan::VirtualMachine::Spec, Resources::Plan::VirtualMachine::USD, Resources::Plan::VirtualMachine::Vcpu, Resources::Region::Country, Resources::Server::Distro, Resources::Server::Feature, Resources::Server::Interface, Resources::Server::OperatingSystem, Resources::Server::Plan, Resources::Server::Region, Resources::Server::Site, Resources::Server::Spec, Resources::Storage::Object::Region, Resources::Storage::Volume::Initiator, Resources::Team::User, Resources::Traffic::Data, Resources::Traffic::Quota::QuotaInMbp, Resources::Traffic::Quota::QuotaInTb, Resources::Traffic::Quota::QuotaPerProject, Resources::Traffic::Quota::QuotaPerRegion, Resources::Traffic::Region, Resources::UserTeam::User, Resources::VPNSession::Region, Resources::VPNSession::Site, Resources::VirtualMachine::Credential, Resources::VirtualMachine::Distro, Resources::VirtualMachine::Feature, Resources::VirtualMachine::OperatingSystem, Resources::VirtualMachine::Plan, Resources::VirtualMachine::Spec, Resources::VirtualNetwork::Assignment::Server, Resources::VirtualNetwork::Region, Resources::VirtualNetwork::Site

Constant Summary collapse

RESERVED =
i[attributes id type meta values].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Latitude::API::Attributes::ClassMethods

attribute, attribute_specs

Methods included from Latitude::API::Attributes::InstanceMethods

#attribute_spec, #read_attribute, #wrap_attribute

Constructor Details

#initialize(hash = {}) ⇒ APIObject

Returns a new instance of APIObject.



24
25
26
27
28
# File 'lib/latitude/api/api_object.rb', line 24

def initialize(hash = {})
  @raw = hash || {}
  @values = {}
  @raw.each { |k, v| @values[k.to_s] = wrap_attribute(k, v) }
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &blk) ⇒ Object



82
83
84
85
86
87
88
# File 'lib/latitude/api/api_object.rb', line 82

def method_missing(name, *args, &blk)
  key = normalize_method_name(name)
  return @values[key] if @values.key?(key) && args.empty?
  return !!@values[key.chomp("?")] if key.end_with?("?") && @values.key?(key.chomp("?")) && args.empty?

  super
end

Instance Attribute Details

#rawObject (readonly)

Returns the value of attribute raw.



11
12
13
# File 'lib/latitude/api/api_object.rb', line 11

def raw
  @raw
end

Class Method Details

.wrap(value) ⇒ Object



13
14
15
16
17
18
19
20
21
22
# File 'lib/latitude/api/api_object.rb', line 13

def self.wrap(value)
  case value
  when Hash
    new(value)
  when Array
    value.map { |v| wrap(v) }
  else
    value
  end
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



58
59
60
61
62
# File 'lib/latitude/api/api_object.rb', line 58

def ==(other)
  return false unless other.is_a?(self.class)

  to_h == other.to_h
end

#[](key) ⇒ Object



30
31
32
# File 'lib/latitude/api/api_object.rb', line 30

def [](key)
  @values[key.to_s]
end

#as_json(*_) ⇒ Object



54
55
56
# File 'lib/latitude/api/api_object.rb', line 54

def as_json(*_)
  to_h
end

#each(&blk) ⇒ Object



42
43
44
# File 'lib/latitude/api/api_object.rb', line 42

def each(&blk)
  @values.each(&blk)
end

#hashObject



66
67
68
# File 'lib/latitude/api/api_object.rb', line 66

def hash
  to_h.hash
end

#inspectObject



70
71
72
# File 'lib/latitude/api/api_object.rb', line 70

def inspect
  "#<#{self.class.name} #{to_h.inspect}>"
end

#key?(key) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/latitude/api/api_object.rb', line 34

def key?(key)
  @values.key?(key.to_s)
end

#keysObject



38
39
40
# File 'lib/latitude/api/api_object.rb', line 38

def keys
  @values.keys
end

#respond_to_missing?(name, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


74
75
76
77
78
79
80
# File 'lib/latitude/api/api_object.rb', line 74

def respond_to_missing?(name, include_private = false)
  key = normalize_method_name(name)
  return true if @values.key?(key)
  return true if key.end_with?("?") && @values.key?(key.chomp("?"))

  super
end

#to_hObject Also known as: to_hash



46
47
48
49
50
# File 'lib/latitude/api/api_object.rb', line 46

def to_h
  @values.each_with_object({}) do |(k, v), out|
    out[k] = unwrap(v)
  end
end