class Shippo::API::Resource

Attributes

object[RW]

Public Class Methods

from(values) click to toggle source

Creates a possibly recursive chain (map of lists, etc) of Resource instances based on whether each value is a scalar, array or a hash.

# File lib/shippo/api/resource.rb, line 25
def self.from(values)
  # recursive on arrays
  if values.is_a?(Array)
    values.map { |list| from(list) }
  elsif values.respond_to?(:keys) # a Hash or a Hash derivative
    new(values)
  else
    values
  end
end
new(*args) click to toggle source

As a Hashie::Mash subclass, Resource can initialize from another hash

Calls superclass method
# File lib/shippo/api/resource.rb, line 49
def initialize(*args)
  if args.first.is_a?(Integer) or
    (args.first.is_a?(String) && args.first =~ /^[0-9A-Fa-f]+$/)
    self.id = args.first
  elsif args.first.respond_to?(:keys)
    h = ApiHash.new(args.first)
    self.deep_merge!(h)
    self.object = ApiObject.create_object(self)
    transformers.each do |transformer|
      transformer.new(self).transform
    end
  else
    super(*args)
  end
end
short_name(name = self.name) click to toggle source
# File lib/shippo/api/resource.rb, line 36
def self.short_name(name = self.name)
  name.split('::')[-1]
end

Public Instance Methods

inspect() click to toggle source
# File lib/shippo/api/resource.rb, line 65
def inspect
  "#<#{self.class.short_name}:0x#{self.object_id.to_s(16)}#{id.nil? ? '' : "[id=#{id}]"}#{to_hash.inspect}->#{object.inspect}"
end
refresh() click to toggle source
# File lib/shippo/api/resource.rb, line 78
def refresh
  response = Shippo::API.get(url)
  self.from(response)
  self
end
success?() click to toggle source
# File lib/shippo/api/resource.rb, line 84
def success?
  self.object && self.object.status && self.object.status.eql?(Shippo::API::Category::Status::SUCCESS)
end
to_s() click to toggle source
# File lib/shippo/api/resource.rb, line 69
def to_s
  self.class.short_name + self.to_hash.to_s + '->' + self.object.to_s
end
url() click to toggle source
# File lib/shippo/api/resource.rb, line 73
def url
  raise Shippo::Exceptions::MissingDataError.new("#{self.class} has no object_id") unless id
  "#{self.class.url}/#{CGI.escape(id)}"
end
valid?() click to toggle source
# File lib/shippo/api/resource.rb, line 88
def valid?
  self.object && self.object.state && self.object.state.eql?(Shippo::API::Category::State::VALID)
end