easypost 3.0.0 → 3.1.5

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 (51) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +9 -0
  3. data/CHANGELOG +35 -0
  4. data/README.md +2 -1
  5. data/VERSION +1 -1
  6. data/easypost.gemspec +24 -20
  7. data/lib/easypost/address.rb +47 -47
  8. data/lib/easypost/batch.rb +34 -38
  9. data/lib/easypost/carrier_account.rb +4 -6
  10. data/lib/easypost/customs_info.rb +3 -2
  11. data/lib/easypost/customs_item.rb +3 -2
  12. data/lib/easypost/error.rb +25 -33
  13. data/lib/easypost/event.rb +3 -6
  14. data/lib/easypost/insurance.rb +1 -3
  15. data/lib/easypost/item.rb +4 -8
  16. data/lib/easypost/object.rb +111 -113
  17. data/lib/easypost/order.rb +20 -18
  18. data/lib/easypost/parcel.rb +1 -3
  19. data/lib/easypost/pickup.rb +19 -18
  20. data/lib/easypost/pickup_rate.rb +1 -3
  21. data/lib/easypost/postage_label.rb +1 -3
  22. data/lib/easypost/print_job.rb +1 -5
  23. data/lib/easypost/printer.rb +18 -22
  24. data/lib/easypost/rate.rb +1 -3
  25. data/lib/easypost/refund.rb +1 -3
  26. data/lib/easypost/report.rb +22 -24
  27. data/lib/easypost/resource.rb +58 -60
  28. data/lib/easypost/scan_form.rb +4 -6
  29. data/lib/easypost/shipment.rb +84 -92
  30. data/lib/easypost/tracker.rb +10 -12
  31. data/lib/easypost/user.rb +33 -37
  32. data/lib/easypost/util.rb +99 -136
  33. data/lib/easypost/webhook.rb +22 -21
  34. data/lib/easypost.rb +108 -118
  35. metadata +33 -61
  36. data/circle.yml +0 -3
  37. data/spec/address_spec.rb +0 -81
  38. data/spec/batch_spec.rb +0 -48
  39. data/spec/carrier_account_spec.rb +0 -121
  40. data/spec/insurance_spec.rb +0 -69
  41. data/spec/item_spec.rb +0 -105
  42. data/spec/order_spec.rb +0 -58
  43. data/spec/pickup_spec.rb +0 -83
  44. data/spec/report_spec.rb +0 -59
  45. data/spec/scan_form_spec.rb +0 -46
  46. data/spec/shipment_spec.rb +0 -144
  47. data/spec/spec_helper.rb +0 -10
  48. data/spec/support/constant.rb +0 -106
  49. data/spec/tracker_spec.rb +0 -94
  50. data/spec/user_spec.rb +0 -88
  51. data/spec/webhook_spec.rb +0 -75
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 677127854c0b4c489ee924bff20fac02917e38bf
4
- data.tar.gz: 443d834ebc6347f523ad956c91706d7cd0e819b2
2
+ SHA256:
3
+ metadata.gz: b9e4ea3a1f185f475aac49ab7985092a8ba095e928a812ad77c68eb7b450afdc
4
+ data.tar.gz: b1291c1f7325559896f109257231fba6f0e781e7f9778c619ec115a86abf9731
5
5
  SHA512:
6
- metadata.gz: bd9b8a2b041853716139a7d8913d51539b166408d3dea0eba5772b6ab2ce643b0d89e19c2f4c55c9c3c124567c9fb4edeb11535f788af273d697c011b1787364
7
- data.tar.gz: fc58e08a4a748c936d60b048d2c1ce38191acde4a7a4f76653017ffb89e846f9551dbdbca6c4adf3a556ee5019cc8e7b4890631253f01db5bf9589b01ebb63d4
6
+ metadata.gz: f3c88ce92a498fa4a0bb45e4d0ca06aeee55158af398632ddce04c0513b0e3dae99f27d1d752f3fb6e69daf3cc536d3872c4c18ba141e20eab9e60fdc58872ae
7
+ data.tar.gz: ec5ec3ad97341782372ba9c7b3e836b451a8c23dd5b9bf27e51dfcfeb561eb1140751c9529b13bbe8b384151ac5023628dff6803fe70a57a4b34070b1d83d64a
data/.travis.yml ADDED
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2
4
+ - 2.3
5
+ - 2.4
6
+ - 2.5
7
+ - 2.6
8
+ - 2.7
9
+ script: "bundle exec rspec"
data/CHANGELOG CHANGED
@@ -1,3 +1,38 @@
1
+ === 3.1.5 2020-12-16
2
+
3
+ * Fix attribute lookup when manually constructing objects (#105; thanks @drewtempelmeyer)
4
+ * Flatten class names and clean up some other style issues
5
+ * Fix `EasyPost::Address.create_and_verify`, broken since 3.1.0 (#108; thanks @rajbirverma)
6
+
7
+ === 3.1.4 2020-09-29
8
+
9
+ * Don't modify params passed into Address#create (#78; thanks @TheRusskiy)
10
+ * Don't modify `carriers` and `services` parameters to `Shipment.lowest_rate` (#71 / #103, thanks @vladvinnikov and @jurisgalang)
11
+ * When constructing an easypost object, convert the key to a string (#102; thanks @Geesu)
12
+ * Expose the raw HTTP response as `#http_body` on `EasyPost::Error` objects (#101; thanks @Geesu)
13
+
14
+ === 3.1.3 2020-06-26
15
+
16
+ * Fix bug causing Authorization header to be included in User-Agent header. All users must upgrade.
17
+
18
+ === 3.1.2 2020-06-24
19
+
20
+ * Bad gem push. New version required.
21
+
22
+ === 3.1.1 2020-06-23
23
+
24
+ * Fix bug where EasyPost.http_config was invalid when not explicitly initialized.
25
+
26
+ === 3.1.0 2020-06-23
27
+
28
+ * Add Shipment Invoice and Refund Report
29
+ * Remove dependencies on `RestClient` and `MultiJson`
30
+ * Remove some deprecated endpoints
31
+
32
+ === 3.0.1 2018-05-17
33
+
34
+ * Enforce TLS certificate validity by default
35
+
1
36
  === 3.0.0 2018-02-09
2
37
 
3
38
  * Require use of ruby ~> 2.0 and TLSv1.2
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # EasyPost Ruby Client Library
2
2
 
3
- [<img src="https://circleci.com/gh/EasyPost/easypost-ruby.png?circle-token=80adb5236ed1fdce20810b055af79c63c3d5796b">](https://circleci.com/gh/EasyPost/easypost-ruby)
3
+ [![Build Status](https://travis-ci.com/EasyPost/easypost-ruby.svg?branch=master)](https://travis-ci.com/EasyPost/easypost-ruby)
4
+ [![Gem Version](https://badge.fury.io/rb/easypost.svg)](https://badge.fury.io/rb/easypost)
4
5
 
5
6
 
6
7
  EasyPost is a simple shipping API. You can sign up for an account at https://easypost.com
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0
1
+ 3.1.5
data/easypost.gemspec CHANGED
@@ -1,27 +1,31 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+
3
+ lib = File.expand_path("../lib", __FILE__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'easypost/version'
5
+ require "easypost/version"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = 'easypost'
8
- spec.version = EasyPost::VERSION
9
- spec.date = Time.now.strftime("%Y-%m-%d")
10
- spec.summary = 'EasyPost Ruby Client Library'
11
- spec.description = 'Client library for accessing the EasyPost shipping API via Ruby.'
12
- spec.authors = ['Sawyer Bateman']
13
- spec.email = 'contact@easypost.com'
14
- spec.homepage = 'https://www.easypost.com/docs'
8
+ spec.name = "easypost"
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"
15
17
 
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ['lib']
20
- spec.required_ruby_version = '~> 2.0'
18
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ f.match(%r{^(test|spec|features)/})
20
+ end
21
+ 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
25
 
22
- spec.add_dependency 'rest-client', '>= 1.7'
23
- spec.add_dependency 'multi_json', '>= 1.3.0'
24
- spec.add_development_dependency 'bundler', '~> 1.7'
25
- spec.add_development_dependency 'rake', '~> 10.0'
26
- spec.add_development_dependency 'rspec', '~> 2.13'
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"
27
31
  end
@@ -1,58 +1,58 @@
1
- module EasyPost
2
- class Address < Resource
3
- attr_accessor :message # Backwards compatibility
4
-
5
- def self.create(params={}, api_key=nil)
6
- url = self.url
7
-
8
- if params[:verify] || params[:verify_strict]
9
- verify = params.delete(:verify) || []
10
- verify_strict = params.delete(:verify_strict) || []
11
-
12
- url += "?"
13
- verify.each do |verification|
14
- url += "verify[]=#{verification}&"
15
- end
16
- verify_strict.each do |verification|
17
- url += "verify_strict[]=#{verification}&"
18
- end
19
- end
1
+ class EasyPost::Address < EasyPost::Resource
2
+ attr_accessor :message # Backwards compatibility
20
3
 
21
- response, api_key = EasyPost.request(:post, url, api_key, {address: params})
22
- return Util.convert_to_easypost_object(response, api_key)
23
- end
4
+ def self.create(params={}, api_key=nil)
5
+ url = self.url
6
+
7
+ address = params.reject { |k,_| k == :verify || k == :verify_strict }
8
+
9
+ if params[:verify] || params[:verify_strict]
10
+ verify = params[:verify] || []
11
+ verify_strict = params[:verify_strict] || []
24
12
 
25
- def self.create_and_verify(params={}, carrier=nil, api_key=nil)
26
- wrapped_params = {}
27
- wrapped_params[self.class_name().to_sym] = params
28
- wrapped_params[:carrier] = carrier
29
- response, api_key = EasyPost.request(:post, url + '/create_and_verify', api_key, wrapped_params)
30
-
31
- if response.has_key?(:address)
32
- if response.has_key?(:message)
33
- response[:address][:message] = response[:message]
34
- end
35
- verified_address = EasyPost::Util::convert_to_easypost_object(response[:address], api_key)
36
- return verified_address
37
- else
38
- raise Error.new("Unable to verify address.")
13
+ url += "?"
14
+ verify.each do |verification|
15
+ url += "verify[]=#{verification}&"
16
+ end
17
+ verify_strict.each do |verification|
18
+ url += "verify_strict[]=#{verification}&"
39
19
  end
40
20
  end
41
21
 
42
- def verify(params={}, carrier=nil)
43
- begin
44
- response, api_key = EasyPost.request(:get, url + '/verify?carrier=' + String(carrier), @api_key, params)
45
- rescue
46
- raise Error.new("Unable to verify address.")
47
- end
22
+ response = EasyPost.make_request(:post, url, api_key, {address: address})
23
+ return EasyPost::Util.convert_to_easypost_object(response, api_key)
24
+ end
48
25
 
49
- if response.has_key?(:address)
50
- return EasyPost::Util::convert_to_easypost_object(response[:address], api_key)
51
- else
52
- raise Error.new("Unable to verify address.")
26
+ def self.create_and_verify(params={}, carrier=nil, api_key=nil)
27
+ wrapped_params = {}
28
+ wrapped_params[self.class_name().to_sym] = params
29
+ wrapped_params[:carrier] = carrier
30
+ response = EasyPost.make_request(:post, url + '/create_and_verify', api_key, wrapped_params)
31
+
32
+ if response.has_key?("address")
33
+ if response.has_key?("message")
34
+ response["address"]["message"] = response["message"]
53
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.")
40
+ end
41
+ end
54
42
 
55
- return self
43
+ def verify(params={}, carrier=nil)
44
+ 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.")
56
48
  end
49
+
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
55
+
56
+ return self
57
57
  end
58
58
  end
@@ -1,53 +1,49 @@
1
- module EasyPost
2
- class Batch < Resource
1
+ class EasyPost::Batch < EasyPost::Resource
2
+ def self.create_and_buy(params={}, api_key=nil)
3
+ 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)
3
6
 
4
- def self.create_and_buy(params={}, api_key=nil)
5
- wrapped_params = {}
6
- wrapped_params[self.class_name().to_sym] = params
7
- response, api_key = EasyPost.request(:post, url + '/create_and_buy', api_key, wrapped_params)
8
-
9
- return Util.convert_to_easypost_object(response, api_key)
10
- end
11
-
12
- def buy(params={})
13
- response, api_key = EasyPost.request(:post, url + '/buy', @api_key, params)
14
- self.refresh_from(response, @api_key, true)
7
+ return EasyPost::Util.convert_to_easypost_object(response, api_key)
8
+ end
15
9
 
16
- return self
17
- end
10
+ def buy(params={})
11
+ response = EasyPost.make_request(:post, url + '/buy', @api_key, params)
12
+ self.refresh_from(response, @api_key, true)
18
13
 
19
- def label(params={})
20
- response, api_key = EasyPost.request(:post, url + '/label', @api_key, params)
21
- self.refresh_from(response, @api_key, true)
14
+ return self
15
+ end
22
16
 
23
- return self
24
- end
17
+ def label(params={})
18
+ response = EasyPost.make_request(:post, url + '/label', @api_key, params)
19
+ self.refresh_from(response, @api_key, true)
25
20
 
26
- def remove_shipments(params={})
27
- response, api_key = EasyPost.request(:post, url + '/remove_shipments', @api_key, params)
28
- self.refresh_from(response, @api_key, true)
21
+ return self
22
+ end
29
23
 
30
- return self
31
- end
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)
32
27
 
33
- def add_shipments(params={})
34
- response, api_key = EasyPost.request(:post, url + '/add_shipments', @api_key, params)
35
- self.refresh_from(response, @api_key, true)
28
+ return self
29
+ end
36
30
 
37
- return self
38
- end
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)
39
34
 
40
- def stamp_and_barcode_by_reference(params={})
41
- response, api_key = EasyPost.request(:get, url + '/stamp_and_barcode_by_reference', @api_key, params)
35
+ return self
36
+ end
42
37
 
43
- return response
44
- end
38
+ def stamp_and_barcode_by_reference(params={})
39
+ response = EasyPost.make_request(:get, url + '/stamp_and_barcode_by_reference', @api_key, params)
45
40
 
46
- def create_scan_form(params={})
47
- response, api_key = EasyPost.request(:post, url + '/scan_form', @api_key, params)
41
+ return response
42
+ end
48
43
 
49
- return response
50
- end
44
+ def create_scan_form(params={})
45
+ response = EasyPost.make_request(:post, url + '/scan_form', @api_key, params)
51
46
 
47
+ return response
52
48
  end
53
49
  end
@@ -1,8 +1,6 @@
1
- module EasyPost
2
- class CarrierAccount < Resource
3
- def self.types
4
- response, api_key = EasyPost.request(:get, "/carrier_types", @api_key)
5
- return Util.convert_to_easypost_object(response, api_key)
6
- end
1
+ class EasyPost::CarrierAccount < EasyPost::Resource
2
+ def self.types
3
+ response = EasyPost.make_request(:get, "/carrier_types", @api_key)
4
+ return EasyPost::Util.convert_to_easypost_object(response, api_key)
7
5
  end
8
6
  end
@@ -1,4 +1,5 @@
1
- module EasyPost
2
- class CustomsInfo < Resource
1
+ class EasyPost::CustomsInfo < EasyPost::Resource
2
+ def self.all(filters={}, api_key=nil)
3
+ raise NotImplementedError.new('CustomsInfo.all not implemented.')
3
4
  end
4
5
  end
@@ -1,4 +1,5 @@
1
- module EasyPost
2
- class CustomsItem < Resource
1
+ class EasyPost::CustomsItem < EasyPost::Resource
2
+ def self.all(filters={}, api_key=nil)
3
+ raise NotImplementedError.new('CustomsItem.all not implemented.')
3
4
  end
4
5
  end
@@ -1,39 +1,31 @@
1
- module EasyPost
2
- class Error < StandardError
3
- attr_reader :message
4
- attr_reader :http_status
5
- attr_reader :http_body
6
- attr_reader :json_body
7
- attr_reader :param
8
- attr_reader :code
9
- attr_reader :errors
1
+ 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
10
8
 
11
- def initialize(message=nil, http_status=nil, http_body=nil, json_body={})
12
- @message = message
13
- @http_status = http_status
14
- @http_body = http_body
15
- @json_body = json_body
9
+ def initialize(message = nil, status = nil, code = nil, errors = nil, http_body = nil)
10
+ @message = message
11
+ @status = status
12
+ @http_status = status # deprecated
13
+ @code = code
14
+ @errors = errors
15
+ @http_body = http_body
16
16
 
17
- @param = @json_body.fetch(:error, {}).fetch(:param, nil)
18
- @code = @json_body.fetch(:error, {}).fetch(:code, nil)
19
- @errors = @json_body.fetch(:error, {}).fetch(:errors, nil)
17
+ super(message)
18
+ end
20
19
 
21
- super(message)
22
- end
20
+ def to_s
21
+ "#{code} (#{status}): #{message} #{errors}".strip
22
+ end
23
23
 
24
- def to_s
25
- s = "#{@code} (#{@http_status}): #{@message}";
26
- if @errors
27
- s += "\nField errors:\n"
28
- @errors.each do |field_error|
29
- field_error.each do |k, v|
30
- s += " #{k}: #{v}\n"
31
- end
32
- s += "\n"
33
- end
34
- end
35
- s
36
- end
24
+ def ==(other)
25
+ other.is_a?(EasyPost::Error) &&
26
+ message == other.message &&
27
+ status == other.status &&
28
+ code == other.code &&
29
+ errors == other.errors
37
30
  end
38
31
  end
39
-
@@ -1,10 +1,7 @@
1
1
  require 'json'
2
2
 
3
- module EasyPost
4
- class Event < Resource
5
-
6
- def self.receive(values)
7
- return EasyPost::Util::convert_to_easypost_object(JSON.parse(values), nil)
8
- end
3
+ class EasyPost::Event < EasyPost::Resource
4
+ def self.receive(values)
5
+ return EasyPost::Util::convert_to_easypost_object(JSON.parse(values), nil)
9
6
  end
10
7
  end
@@ -1,4 +1,2 @@
1
- module EasyPost
2
- class Insurance < Resource
3
- end
1
+ class EasyPost::Insurance < EasyPost::Resource
4
2
  end
data/lib/easypost/item.rb CHANGED
@@ -1,10 +1,6 @@
1
- module EasyPost
2
- class Item < Resource
3
-
4
- def self.retrieve_reference(params={}, api_key=nil)
5
- response, api_key = EasyPost.request(:get, url + '/retrieve_reference', api_key, params)
6
- return EasyPost::Util::convert_to_easypost_object(response, api_key) if response
7
- end
8
-
1
+ class EasyPost::Item < EasyPost::Resource
2
+ def self.retrieve_reference(params={}, api_key=nil)
3
+ response = EasyPost.make_request(:get, url + '/retrieve_reference', api_key, params)
4
+ return EasyPost::Util::convert_to_easypost_object(response, api_key) if response
9
5
  end
10
6
  end