class EasyPost::EasyPostObject

Attributes

api_key[RW]
name[RW]
parent[RW]
unsaved_values[RW]

Public Class Methods

construct_from(values, api_key=nil, parent=nil, name=nil) click to toggle source
# File lib/easypost/object.rb, line 19
def self.construct_from(values, api_key=nil, parent=nil, name=nil)
  obj = self.new(values[:id], api_key, parent, name)
  obj.refresh_from(values, api_key)
  obj
end
new(id=nil, api_key=nil, parent=nil, name=nil) click to toggle source
# File lib/easypost/object.rb, line 9
def initialize(id=nil, api_key=nil, parent=nil, name=nil)
  @api_key = api_key
  @values = {}
  @unsaved_values = Set.new
  @transient_values = Set.new
  @parent = parent
  @name = name
  self.id = id if id
end

Public Instance Methods

[](k) click to toggle source
# File lib/easypost/object.rb, line 50
def [](k)
  @values[k.to_s]
end
[]=(k, v) click to toggle source
# File lib/easypost/object.rb, line 54
def []=(k, v)
  send(:"#{k}=", v)
end
as_json(options = {}) click to toggle source
# File lib/easypost/object.rb, line 70
def as_json(options = {})
  @values.as_json
end
deconstruct_keys(_keys) click to toggle source
# File lib/easypost/object.rb, line 78
def deconstruct_keys(_keys)
  @values.transform_keys(&:to_sym)
end
each(&blk) click to toggle source
# File lib/easypost/object.rb, line 82
def each(&blk)
  @values.each(&blk)
end
id() click to toggle source
# File lib/easypost/object.rb, line 90
def id
  @values[:id]
end
id=(id) click to toggle source
# File lib/easypost/object.rb, line 86
def id=(id)
  @values[:id] = id
end
inspect() click to toggle source
# File lib/easypost/object.rb, line 29
def inspect
  id_string = (self.respond_to?(:id) && !self.id.nil?) ? " id=#{self.id}" : ""
  "#<#{self.class}:#{id_string}> JSON: " + to_json
end
keys() click to toggle source
# File lib/easypost/object.rb, line 58
def keys
  @values.keys
end
refresh_from(values, api_key, partial=false) click to toggle source
# File lib/easypost/object.rb, line 34
def refresh_from(values, api_key, partial=false)
  @api_key = api_key

  added = Set.new(values.keys - @values.keys)

  instance_eval do
    add_accessors(added)
  end

  values.each do |k, v|
    @values[k.to_s] = EasyPost::Util.convert_to_easypost_object(v, api_key, self, k)
    @transient_values.delete(k)
    @unsaved_values.delete(k)
  end
end
to_hash() click to toggle source
# File lib/easypost/object.rb, line 74
def to_hash
  @values
end
to_json(options = {}) click to toggle source
# File lib/easypost/object.rb, line 66
def to_json(options = {})
  JSON.dump(@values)
end
to_s(*args) click to toggle source
# File lib/easypost/object.rb, line 25
def to_s(*args)
  JSON.dump(@values)
end
values() click to toggle source
# File lib/easypost/object.rb, line 62
def values
  @values.values
end

Protected Instance Methods

add_accessors(keys) click to toggle source
# File lib/easypost/object.rb, line 126
def add_accessors(keys)
  metaclass.instance_eval do
    keys.each do |k|
      next if @@immutable_values.include?(k)
      k = k.to_s
      k_eq = :"#{k}="
      define_method(k) { @values[k] }
      define_method(k_eq) do |v|
        @values[k] = v
        @unsaved_values.add(k)

        cur = self
        cur_parent = self.parent
        while cur_parent
          if cur.name
            cur_parent.unsaved_values.add(cur.name)
          end

          cur = cur_parent
          cur_parent = cur.parent
        end
      end
    end
  end
end
flatten_unsaved() click to toggle source
# File lib/easypost/object.rb, line 96
def flatten_unsaved
  values = {}
  for key in @unsaved_values
    value = @values[key]

    values[key] = value

    if value.is_a?(EasyPost::EasyPostObject)
      values[key] = flatten_unsaved(value)
    end
  end

  return values
end
metaclass() click to toggle source
# File lib/easypost/object.rb, line 111
def metaclass
  class << self; self; end
end
remove_accessors(keys) click to toggle source
# File lib/easypost/object.rb, line 115
def remove_accessors(keys)
  metaclass.instance_eval do
    keys.each do |k|
      next if @@immutable_values.include?(k)
      k_eq = :"#{k}="
      remove_method(k) if method_defined?(k)
      remove_method(k_eq) if method_defined?(k_eq)
    end
  end
end