Class: EasyPost::Resource

Inherits:
EasyPostObject show all
Defined in:
lib/easypost/resource.rb

Instance Attribute Summary

Attributes inherited from EasyPostObject

#api_key, #name, #parent, #unsaved_values

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from EasyPostObject

#[], #[]=, #as_json, construct_from, #each, #id, #id=, #initialize, #inspect, #keys, #refresh_from, #to_hash, #to_json, #to_s, #values

Constructor Details

This class inherits a constructor from EasyPost::EasyPostObject

Class Method Details

.all(filters = {}, api_key = nil) ⇒ Object



33
34
35
36
# File 'lib/easypost/resource.rb', line 33

def self.all(filters={}, api_key=nil)
  response, api_key = EasyPost.request(:get, url, api_key, filters)
  return Util.convert_to_easypost_object(response, api_key)
end

.class_nameObject



3
4
5
6
7
# File 'lib/easypost/resource.rb', line 3

def self.class_name
  camel = self.name.split('::')[-1]
  snake = camel[0..0] + camel[1..-1].gsub(/([A-Z])/, '_\1')
  return snake.downcase
end

.create(params = {}, api_key = nil) ⇒ Object



44
45
46
47
48
49
# File 'lib/easypost/resource.rb', line 44

def self.create(params={}, api_key=nil)
  wrapped_params = {}
  wrapped_params[self.class_name().to_sym] = params
  response, api_key = EasyPost.request(:post, self.url, api_key, wrapped_params)
  return Util.convert_to_easypost_object(response, api_key)
end

.retrieve(id, api_key = nil) ⇒ Object



38
39
40
41
42
# File 'lib/easypost/resource.rb', line 38

def self.retrieve(id, api_key=nil)
  instance = self.new(id, api_key)
  instance.refresh
  return instance
end

.urlObject



9
10
11
12
13
14
15
16
17
18
# File 'lib/easypost/resource.rb', line 9

def self.url
  if self.class_name == 'resource'
    raise NotImplementedError.new('Resource is an abstract class.  You should perform actions on its subclasses (Address, Shipment, etc.)')
  end
  if(self.class_name[-1..-1] == 's' || self.class_name[-1..-1] == 'h')
    return "/#{CGI.escape(self.class_name.downcase)}es"
  else
    return "/#{CGI.escape(class_name.downcase)}s"
  end
end

Instance Method Details

#deleteObject



51
52
53
54
55
# File 'lib/easypost/resource.rb', line 51

def delete
  response, api_key = EasyPost.request(:delete, url, @api_key)
  refresh_from(response, api_key)
  return self
end

#refreshObject



27
28
29
30
31
# File 'lib/easypost/resource.rb', line 27

def refresh
  response, api_key = EasyPost.request(:get, url, @api_key, @retrieve_options)
  refresh_from(response, api_key)
  return self
end

#saveObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/easypost/resource.rb', line 57

def save
  if @unsaved_values.length > 0
    values = {}
    @unsaved_values.each { |k| values[k] = @values[k] }

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

    wrapped_params = {self.class.class_name => values}

    response, api_key = EasyPost.request(:put, url, @api_key, wrapped_params)
    refresh_from(response, api_key)
  end
  return self
end

#urlObject



20
21
22
23
24
25
# File 'lib/easypost/resource.rb', line 20

def url
  unless self.id
    raise Error.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{self.id.inspect}")
  end
  return "#{self.class.url}/#{CGI.escape(id)}"
end