easypost 3.5.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +19 -5
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +5 -0
  5. data/CHANGELOG.md +88 -88
  6. data/Gemfile +2 -0
  7. data/README.md +2 -10
  8. data/Rakefile +2 -1
  9. data/UPGRADE_GUIDE.md +62 -0
  10. data/VERSION +1 -1
  11. data/bin/easypost-irb +5 -3
  12. data/easycop.yml +180 -0
  13. data/easypost.gemspec +21 -19
  14. data/lib/easypost/address.rb +26 -26
  15. data/lib/easypost/api_key.rb +3 -0
  16. data/lib/easypost/batch.rb +31 -30
  17. data/lib/easypost/brand.rb +4 -0
  18. data/lib/easypost/carrier_account.rb +4 -0
  19. data/lib/easypost/carrier_type.rb +3 -0
  20. data/lib/easypost/customs_info.rb +5 -1
  21. data/lib/easypost/customs_item.rb +5 -1
  22. data/lib/easypost/error.rb +7 -7
  23. data/lib/easypost/event.rb +5 -1
  24. data/lib/easypost/insurance.rb +4 -0
  25. data/lib/easypost/object.rb +44 -28
  26. data/lib/easypost/order.rb +15 -11
  27. data/lib/easypost/parcel.rb +7 -0
  28. data/lib/easypost/pickup.rb +15 -9
  29. data/lib/easypost/pickup_rate.rb +3 -1
  30. data/lib/easypost/postage_label.rb +3 -0
  31. data/lib/easypost/rate.rb +7 -0
  32. data/lib/easypost/refund.rb +3 -0
  33. data/lib/easypost/report.rb +9 -16
  34. data/lib/easypost/resource.rb +41 -25
  35. data/lib/easypost/scan_form.rb +8 -3
  36. data/lib/easypost/shipment.rb +47 -51
  37. data/lib/easypost/tax_identifier.rb +4 -0
  38. data/lib/easypost/tracker.rb +9 -4
  39. data/lib/easypost/user.rb +14 -5
  40. data/lib/easypost/util.rb +21 -17
  41. data/lib/easypost/version.rb +3 -1
  42. data/lib/easypost/webhook.rb +18 -12
  43. data/lib/easypost.rb +59 -51
  44. metadata +74 -19
  45. data/lib/easypost/print_job.rb +0 -2
  46. data/lib/easypost/printer.rb +0 -24
data/easypost.gemspec CHANGED
@@ -1,31 +1,33 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require "easypost/version"
5
+ require 'easypost/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "easypost"
8
+ spec.name = 'easypost'
9
9
  spec.version = EasyPost::VERSION
10
- spec.licenses = ["MIT"]
11
- spec.date = Time.now.strftime("%Y-%m-%d")
12
- spec.summary = "EasyPost Ruby Client Library"
13
- spec.description = "Client library for accessing the EasyPost shipping API via Ruby."
14
- spec.authors = ["Jake Epstein", "Andrew Tribone", "James Brown"]
15
- spec.email = "support@easypost.com"
16
- spec.homepage = "https://www.easypost.com/docs"
10
+ spec.licenses = ['MIT']
11
+ spec.summary = 'EasyPost Ruby Client Library'
12
+ spec.description = 'Client library for accessing the EasyPost shipping API via Ruby.'
13
+ spec.authors = 'EasyPost Developers'
14
+ spec.email = 'oss@easypost.com'
15
+ spec.homepage = 'https://www.easypost.com/docs'
17
16
 
18
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
18
  f.match(%r{^(test|spec|features)/})
20
19
  end
21
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
22
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
23
- spec.require_paths = ["lib"]
24
- spec.required_ruby_version = ">= 2.2"
21
+ spec.require_paths = ['lib']
22
+ spec.required_ruby_version = '>= 2.5'
25
23
 
26
- spec.add_development_dependency "pry", "~> 0.13"
27
- spec.add_development_dependency "rake", "~> 13.0"
28
- spec.add_development_dependency "rspec", "~> 3.9"
29
- spec.add_development_dependency "webmock", "~> 3.8"
30
- spec.add_development_dependency "vcr", "~> 5.1"
24
+ spec.add_development_dependency 'pry', '~> 0.14'
25
+ spec.add_development_dependency 'rake', '~> 13.0'
26
+ spec.add_development_dependency 'rspec', '~> 3.10'
27
+ spec.add_development_dependency 'rubocop', '~> 1.24'
28
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.7'
29
+ spec.add_development_dependency 'simplecov', '~> 0.21'
30
+ spec.add_development_dependency 'simplecov-lcov', '~> 0.8'
31
+ spec.add_development_dependency 'vcr', '~> 6.0'
32
+ spec.add_development_dependency 'webmock', '~> 3.14'
31
33
  end
@@ -1,16 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Address objects are used to represent people, places, and organizations in a number of contexts.
1
4
  class EasyPost::Address < EasyPost::Resource
2
5
  attr_accessor :message # Backwards compatibility
3
6
 
4
- def self.create(params={}, api_key=nil)
7
+ # Create an Address.
8
+ def self.create(params = {}, api_key = nil)
5
9
  url = self.url
6
10
 
7
- address = params.reject { |k,_| k == :verify || k == :verify_strict }
11
+ address = params.reject { |k, _| [:verify, :verify_strict].include?(k) }
8
12
 
9
13
  if params[:verify] || params[:verify_strict]
10
14
  verify = params[:verify] || []
11
15
  verify_strict = params[:verify_strict] || []
12
16
 
13
- url += "?"
17
+ url += '?'
14
18
  verify.each do |verification|
15
19
  url += "verify[]=#{verification}&"
16
20
  end
@@ -19,40 +23,36 @@ class EasyPost::Address < EasyPost::Resource
19
23
  end
20
24
  end
21
25
 
22
- response = EasyPost.make_request(:post, url, api_key, {address: address})
23
- return EasyPost::Util.convert_to_easypost_object(response, api_key)
26
+ response = EasyPost.make_request(:post, url, api_key, { address: address })
27
+ EasyPost::Util.convert_to_easypost_object(response, api_key)
24
28
  end
25
29
 
26
- def self.create_and_verify(params={}, carrier=nil, api_key=nil)
30
+ # Create and verify an Address in one call.
31
+ def self.create_and_verify(params = {}, carrier = nil, api_key = nil)
27
32
  wrapped_params = {}
28
- wrapped_params[self.class_name().to_sym] = params
33
+ wrapped_params[class_name.to_sym] = params
29
34
  wrapped_params[:carrier] = carrier
30
- response = EasyPost.make_request(:post, url + '/create_and_verify', api_key, wrapped_params)
35
+ response = EasyPost.make_request(:post, "#{url}/create_and_verify", api_key, wrapped_params)
31
36
 
32
- if response.has_key?("address")
33
- if response.has_key?("message")
34
- response["address"]["message"] = response["message"]
35
- end
36
- verified_address = EasyPost::Util::convert_to_easypost_object(response["address"], api_key)
37
- return verified_address
38
- else
39
- raise EasyPost::Error.new("Unable to verify address.")
37
+ raise EasyPost::Error.new('Unable to verify address.') unless response.key?('address')
38
+
39
+ if response.key?('message')
40
+ response['address']['message'] = response['message']
40
41
  end
42
+
43
+ EasyPost::Util.convert_to_easypost_object(response['address'], api_key)
41
44
  end
42
45
 
43
- def verify(params={}, carrier=nil)
46
+ # Verify an Address.
47
+ def verify
44
48
  begin
45
- response = EasyPost.make_request(:get, url + '/verify?carrier=' + String(carrier), @api_key, params)
46
- rescue
47
- raise EasyPost::Error.new("Unable to verify address.")
49
+ response = EasyPost.make_request(:get, "#{url}/verify", @api_key)
50
+ rescue StandardError
51
+ raise EasyPost::Error.new('Unable to verify address.')
48
52
  end
49
53
 
50
- if response.has_key?("address")
51
- return EasyPost::Util::convert_to_easypost_object(response["address"], api_key)
52
- else
53
- raise EasyPost::Error.new("Unable to verify address.")
54
- end
54
+ raise EasyPost::Error.new('Unable to verify address.') unless response.key?('address')
55
55
 
56
- return self
56
+ EasyPost::Util.convert_to_easypost_object(response['address'], api_key)
57
57
  end
58
58
  end
@@ -1,2 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ # An ApiKey allows you to authenticate with the EasyPost API.
1
4
  class EasyPost::ApiKey < EasyPost::Resource
2
5
  end
@@ -1,49 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The Batch object allows you to perform operations on multiple Shipments at once.
1
4
  class EasyPost::Batch < EasyPost::Resource
2
- def self.create_and_buy(params={}, api_key=nil)
5
+ # Create and buy a batch in one call.
6
+ def self.create_and_buy(params = {}, api_key = nil)
3
7
  wrapped_params = {}
4
- wrapped_params[self.class_name().to_sym] = params
5
- response = EasyPost.make_request(:post, url + '/create_and_buy', api_key, wrapped_params)
8
+ wrapped_params[class_name.to_sym] = params
9
+ response = EasyPost.make_request(:post, "#{url}/create_and_buy", api_key, wrapped_params)
6
10
 
7
- return EasyPost::Util.convert_to_easypost_object(response, api_key)
11
+ EasyPost::Util.convert_to_easypost_object(response, api_key)
8
12
  end
9
13
 
10
- def buy(params={})
11
- response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
12
- self.refresh_from(response, @api_key, true)
14
+ # Buy a Batch.
15
+ def buy(params = {})
16
+ response = EasyPost.make_request(:post, "#{url}/buy", @api_key, params)
17
+ refresh_from(response, @api_key)
13
18
 
14
- return self
19
+ self
15
20
  end
16
21
 
17
- def label(params={})
18
- response = EasyPost.make_request(:post, url + '/label', @api_key, params)
19
- self.refresh_from(response, @api_key, true)
22
+ # Convert the label format of a Batch.
23
+ def label(params = {})
24
+ response = EasyPost.make_request(:post, "#{url}/label", @api_key, params)
25
+ refresh_from(response, @api_key)
20
26
 
21
- return self
27
+ self
22
28
  end
23
29
 
24
- def remove_shipments(params={})
25
- response = EasyPost.make_request(:post, url + '/remove_shipments', @api_key, params)
26
- self.refresh_from(response, @api_key, true)
30
+ # Remove Shipments from a Batch.
31
+ def remove_shipments(params = {})
32
+ response = EasyPost.make_request(:post, "#{url}/remove_shipments", @api_key, params)
33
+ refresh_from(response, @api_key)
27
34
 
28
- return self
35
+ self
29
36
  end
30
37
 
31
- def add_shipments(params={})
32
- response = EasyPost.make_request(:post, url + '/add_shipments', @api_key, params)
33
- self.refresh_from(response, @api_key, true)
38
+ # Add Shipments to a Batch.
39
+ def add_shipments(params = {})
40
+ response = EasyPost.make_request(:post, "#{url}/add_shipments", @api_key, params)
41
+ refresh_from(response, @api_key)
34
42
 
35
- return self
43
+ self
36
44
  end
37
45
 
38
- def stamp_and_barcode_by_reference(params={})
39
- response = EasyPost.make_request(:get, url + '/stamp_and_barcode_by_reference', @api_key, params)
40
-
41
- return response
42
- end
43
-
44
- def create_scan_form(params={})
45
- response = EasyPost.make_request(:post, url + '/scan_form', @api_key, params)
46
-
47
- return response
46
+ # Create a ScanForm for a Batch.
47
+ def create_scan_form(params = {})
48
+ EasyPost.make_request(:post, "#{url}/scan_form", @api_key, params)
48
49
  end
49
50
  end
@@ -1,4 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The Brand object allows you to customize the publicly-accessible html page that shows tracking details for every EasyPost tracker.
1
4
  class EasyPost::Brand < EasyPost::Resource
5
+ # The url of the Brand object.
2
6
  def url
3
7
  if user_id.nil? || user_id.empty?
4
8
  raise EasyPost::Error, "Missing user_id: #{self.class} instance is missing user_id"
@@ -1,4 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A CarrierAccount encapsulates your credentials with the carrier.
1
4
  class EasyPost::CarrierAccount < EasyPost::Resource
5
+ # Retrieve a list of available CarrierAccount types for the authenticated User.
2
6
  def self.types
3
7
  EasyPost::CarrierType.all
4
8
  end
@@ -1,2 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The CarrierType object provides an interface for determining the valid fields of a CarrierAccount.
1
4
  class EasyPost::CarrierType < EasyPost::Resource
2
5
  end
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # CustomsInfo objects contain CustomsItem objects and all necessary information for the generation of customs forms required for international shipping.
1
4
  class EasyPost::CustomsInfo < EasyPost::Resource
2
- def self.all(filters={}, api_key=nil)
5
+ # Retrieve a list of CustomsInfo objects
6
+ def self.all
3
7
  raise NotImplementedError.new('CustomsInfo.all not implemented.')
4
8
  end
5
9
  end
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A CustomsItem object describes goods for international shipment and should be created then included in a CustomsInfo object.
1
4
  class EasyPost::CustomsItem < EasyPost::Resource
2
- def self.all(filters={}, api_key=nil)
5
+ # Retrieve a list of CustomsItem objects
6
+ def self.all
3
7
  raise NotImplementedError.new('CustomsItem.all not implemented.')
4
8
  end
5
9
  end
@@ -1,15 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # EasyPost Error object.
1
4
  class EasyPost::Error < StandardError
2
- attr_reader :message
3
- attr_reader :status
4
- attr_reader :http_status # deprecated
5
- attr_reader :http_body
6
- attr_reader :code
7
- attr_reader :errors
5
+ attr_reader :message, :status, :http_body, :code, :errors
8
6
 
7
+ # Initialize a new EasyPost Error
9
8
  def initialize(message = nil, status = nil, code = nil, errors = nil, http_body = nil)
10
9
  @message = message
11
10
  @status = status
12
- @http_status = status # deprecated
13
11
  @code = code
14
12
  @errors = errors
15
13
  @http_body = http_body
@@ -17,10 +15,12 @@ class EasyPost::Error < StandardError
17
15
  super(message)
18
16
  end
19
17
 
18
+ # Convert an error to a string.
20
19
  def to_s
21
20
  "#{code} (#{status}): #{message} #{errors}".strip
22
21
  end
23
22
 
23
+ # Compare error properties.
24
24
  def ==(other)
25
25
  other.is_a?(EasyPost::Error) &&
26
26
  message == other.message &&
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
 
5
+ # Webhook Events are triggered by changes in objects you've created via the API.
3
6
  class EasyPost::Event < EasyPost::Resource
7
+ # Converts a raw webhook event into an EasyPost object.
4
8
  def self.receive(values)
5
- return EasyPost::Util::convert_to_easypost_object(JSON.parse(values), nil)
9
+ EasyPost::Util.convert_to_easypost_object(JSON.parse(values), nil)
6
10
  end
7
11
  end
@@ -1,2 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # An Insurance object represents insurance for packages purchased both via the EasyPost API as well
4
+ # as shipments purchased through third parties and later registered with EasyPost.
1
5
  class EasyPost::Insurance < EasyPost::Resource
2
6
  end
@@ -1,12 +1,17 @@
1
- require "set"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'set'
4
+
5
+ # The EasyPostObject is extended by the EasyPost Resource object.
3
6
  class EasyPost::EasyPostObject
4
7
  include Enumerable
5
8
 
6
9
  attr_accessor :parent, :name, :api_key, :unsaved_values
7
- @@immutable_values = Set.new([:api_key, :id])
8
10
 
9
- def initialize(id=nil, api_key=nil, parent=nil, name=nil)
11
+ @@immutable_values = Set.new([:api_key, :id]) # rubocop:disable Style/ClassVars
12
+
13
+ # Initialize an EasyPostObject.
14
+ def initialize(id = nil, api_key = nil, parent = nil, name = nil)
10
15
  @api_key = api_key
11
16
  @values = {}
12
17
  @unsaved_values = Set.new
@@ -16,22 +21,26 @@ class EasyPost::EasyPostObject
16
21
  self.id = id if id
17
22
  end
18
23
 
19
- def self.construct_from(values, api_key=nil, parent=nil, name=nil)
20
- obj = self.new(values[:id], api_key, parent, name)
24
+ # Construct an object from values.
25
+ def self.construct_from(values, api_key = nil, parent = nil, name = nil)
26
+ obj = new(values[:id], api_key, parent, name)
21
27
  obj.refresh_from(values, api_key)
22
28
  obj
23
29
  end
24
30
 
25
- def to_s(*args)
31
+ # Convert to a string.
32
+ def to_s(*_args)
26
33
  JSON.dump(@values)
27
34
  end
28
35
 
36
+ # Inspect JSON.
29
37
  def inspect
30
- id_string = (self.respond_to?(:id) && !self.id.nil?) ? " id=#{self.id}" : ""
38
+ id_string = respond_to?(:id) && !id.nil? ? " id=#{id}" : ''
31
39
  "#<#{self.class}:#{id_string}> JSON: " + to_json
32
40
  end
33
41
 
34
- def refresh_from(values, api_key, partial=false)
42
+ # Refresh an object from the API.
43
+ def refresh_from(values, api_key)
35
44
  @api_key = api_key
36
45
 
37
46
  added = Set.new(values.keys - @values.keys)
@@ -40,6 +49,9 @@ class EasyPost::EasyPostObject
40
49
  add_accessors(added)
41
50
  end
42
51
 
52
+ # IDs don't change, do not update it
53
+ @values.delete(:id)
54
+
43
55
  values.each do |k, v|
44
56
  @values[k.to_s] = EasyPost::Util.convert_to_easypost_object(v, api_key, self, k)
45
57
  @transient_values.delete(k)
@@ -47,55 +59,67 @@ class EasyPost::EasyPostObject
47
59
  end
48
60
  end
49
61
 
50
- def [](k)
51
- @values[k.to_s]
62
+ # Get element of an array.
63
+ def [](key)
64
+ @values[key.to_s]
52
65
  end
53
66
 
54
- def []=(k, v)
55
- send(:"#{k}=", v)
67
+ # Set the element of an array.
68
+ def []=(key, value)
69
+ send(:"#{key}=", value)
56
70
  end
57
71
 
72
+ # Keys of an object.
58
73
  def keys
59
74
  @values.keys
60
75
  end
61
76
 
77
+ # Values of an object.
62
78
  def values
63
79
  @values.values
64
80
  end
65
81
 
66
- def to_json(options = {})
82
+ # Make values JSON.
83
+ def to_json(_options = {})
67
84
  JSON.dump(@values)
68
85
  end
69
86
 
70
- def as_json(options = {})
87
+ # Get values as JSON.
88
+ def as_json(_options = {})
71
89
  @values.as_json
72
90
  end
73
91
 
92
+ # Make values a hash.
74
93
  def to_hash
75
94
  @values
76
95
  end
77
96
 
97
+ # Deconstruct the keys of an object.
78
98
  def deconstruct_keys(_keys)
79
99
  @values.transform_keys(&:to_sym)
80
100
  end
81
101
 
102
+ # Get each element of values.
82
103
  def each(&blk)
83
104
  @values.each(&blk)
84
105
  end
85
106
 
107
+ # Set the ID of an object.
86
108
  def id=(id)
87
109
  @values[:id] = id
88
110
  end
89
111
 
112
+ # Get the ID of an object.
90
113
  def id
91
114
  @values[:id]
92
115
  end
93
116
 
94
117
  protected
95
118
 
119
+ # Flatten the unsaved values of an object.
96
120
  def flatten_unsaved
97
121
  values = {}
98
- for key in @unsaved_values
122
+ @unsaved_values.each do |key|
99
123
  value = @values[key]
100
124
 
101
125
  values[key] = value
@@ -105,28 +129,20 @@ class EasyPost::EasyPostObject
105
129
  end
106
130
  end
107
131
 
108
- return values
132
+ values
109
133
  end
110
134
 
135
+ # The metaclass of an object.
111
136
  def metaclass
112
137
  class << self; self; end
113
138
  end
114
139
 
115
- def remove_accessors(keys)
116
- metaclass.instance_eval do
117
- keys.each do |k|
118
- next if @@immutable_values.include?(k)
119
- k_eq = :"#{k}="
120
- remove_method(k) if method_defined?(k)
121
- remove_method(k_eq) if method_defined?(k_eq)
122
- end
123
- end
124
- end
125
-
140
+ # Add accessors of an object.
126
141
  def add_accessors(keys)
127
142
  metaclass.instance_eval do
128
143
  keys.each do |k|
129
144
  next if @@immutable_values.include?(k)
145
+
130
146
  k = k.to_s
131
147
  k_eq = :"#{k}="
132
148
  define_method(k) { @values[k] }
@@ -135,7 +151,7 @@ class EasyPost::EasyPostObject
135
151
  @unsaved_values.add(k)
136
152
 
137
153
  cur = self
138
- cur_parent = self.parent
154
+ cur_parent = parent
139
155
  while cur_parent
140
156
  if cur.name
141
157
  cur_parent.unsaved_values.add(cur.name)
@@ -1,13 +1,17 @@
1
- class EasyPost::Order < EasyPost::Resource
1
+ # frozen_string_literal: true
2
2
 
3
- def get_rates(params={})
4
- response = EasyPost.make_request(:get, url + '/rates', @api_key, params)
5
- self.refresh_from(response, @api_key, true)
3
+ # The Order object represents a collection of packages and can be used for Multi-Piece Shipments.
4
+ class EasyPost::Order < EasyPost::Resource
5
+ # Get the rates of an Order.
6
+ def get_rates(params = {})
7
+ response = EasyPost.make_request(:get, "#{url}/rates", @api_key, params)
8
+ refresh_from(response, @api_key)
6
9
 
7
- return self
10
+ self
8
11
  end
9
12
 
10
- def buy(params={})
13
+ # Buy an Order.
14
+ def buy(params = {})
11
15
  if params.instance_of?(EasyPost::Rate)
12
16
  temp = params.clone
13
17
  params = {}
@@ -15,14 +19,14 @@ class EasyPost::Order < EasyPost::Resource
15
19
  params[:service] = temp.service
16
20
  end
17
21
 
18
- response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
19
- self.refresh_from(response, @api_key, true)
22
+ response = EasyPost.make_request(:post, "#{url}/buy", @api_key, params)
23
+ refresh_from(response, @api_key)
20
24
 
21
- return self
25
+ self
22
26
  end
23
27
 
24
- def self.all(filters={}, api_key=nil)
28
+ # Retrieve a list of Order objects.
29
+ def self.all
25
30
  raise NotImplementedError.new('Order.all not implemented.')
26
31
  end
27
-
28
32
  end
@@ -1,2 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Parcel objects represent the physical container being shipped.
1
4
  class EasyPost::Parcel < EasyPost::Resource
5
+ # Retrieving all Parcel objects is not supported.
6
+ def self.all
7
+ raise NotImplementedError.new('Parcel.all not implemented.')
8
+ end
2
9
  end
@@ -1,5 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The Pickup object allows you to schedule a pickup from your carrier from your customer's residence or place of business.
1
4
  class EasyPost::Pickup < EasyPost::Resource
2
- def buy(params={})
5
+ # Buy a Pickup.
6
+ def buy(params = {})
3
7
  if params.instance_of?(EasyPost::PickupRate)
4
8
  temp = params.clone
5
9
  params = {}
@@ -7,20 +11,22 @@ class EasyPost::Pickup < EasyPost::Resource
7
11
  params[:service] = temp.service
8
12
  end
9
13
 
10
- response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
11
- self.refresh_from(response, @api_key, true)
14
+ response = EasyPost.make_request(:post, "#{url}/buy", @api_key, params)
15
+ refresh_from(response, @api_key)
12
16
 
13
- return self
17
+ self
14
18
  end
15
19
 
16
- def cancel(params={})
17
- response = EasyPost.make_request(:post, url + '/cancel', @api_key, params)
18
- self.refresh_from(response, @api_key, true)
20
+ # Cancel a Pickup.
21
+ def cancel(params = {})
22
+ response = EasyPost.make_request(:post, "#{url}/cancel", @api_key, params)
23
+ refresh_from(response, @api_key)
19
24
 
20
- return self
25
+ self
21
26
  end
22
27
 
23
- def self.all(filters={}, api_key=nil)
28
+ # Retrieve a list of all Pickup objects.
29
+ def self.all
24
30
  raise NotImplementedError.new('Pickup.all not implemented.')
25
31
  end
26
32
  end
@@ -1,3 +1,5 @@
1
- class EasyPost::PickupRate < EasyPost::Resource
1
+ # frozen_string_literal: true
2
2
 
3
+ # A PickupRate is the rate available for a Pickup.
4
+ class EasyPost::PickupRate < EasyPost::Resource
3
5
  end
@@ -1,2 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ # PostageLabel is the object containing details about the shipping label.
1
4
  class EasyPost::PostageLabel < EasyPost::Resource
2
5
  end
data/lib/easypost/rate.rb CHANGED
@@ -1,2 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A Rate object contains all the details about the rate of a Shipment.
1
4
  class EasyPost::Rate < EasyPost::Resource
5
+ # Retrieving all Rate objects is not supported.
6
+ def self.all
7
+ raise NotImplementedError.new('Rate.all not implemented.')
8
+ end
2
9
  end
@@ -1,2 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The Refund object contains details about the Refund of a Shipment.
1
4
  class EasyPost::Refund < EasyPost::Resource
2
5
  end