Class: Shippo::API::Resource

Inherits:
ApiHash
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable, Extend::Operation, Extend::Transformers, Extend::Url
Defined in:
lib/shippo/api/resource.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Extend::Transformers

#transformers

Methods included from Extend::Operation

included

Methods included from Extend::Url

included

Constructor Details

#initialize(*args) ⇒ Resource

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



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 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

Instance Attribute Details

#objectObject

Returns the value of attribute object.



21
22
23
# File 'lib/shippo/api/resource.rb', line 21

def object
  @object
end

Class Method Details

.from(values) ⇒ Object

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



25
26
27
28
29
30
31
32
33
34
# 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

.short_name(name = self.name) ⇒ Object



36
37
38
# File 'lib/shippo/api/resource.rb', line 36

def self.short_name(name = self.name)
  name.split('::')[-1]
end

Instance Method Details

#inspectObject



65
66
67
# 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

#refreshObject



78
79
80
81
82
# File 'lib/shippo/api/resource.rb', line 78

def refresh
  response = Shippo::API.get(url)
  self.from(response)
  self
end

#success?Boolean

Returns:

  • (Boolean)


84
85
86
# 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_sObject



69
70
71
# 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

#urlObject



73
74
75
76
# 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?Boolean

Returns:

  • (Boolean)


88
89
90
# 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