easypost 6.4.1 → 7.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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/.github/CODEOWNERS +2 -2
  3. data/.github/workflows/ci.yml +3 -3
  4. data/.github/workflows/release.yml +1 -1
  5. data/CHANGELOG.md +24 -0
  6. data/Makefile +2 -3
  7. data/UPGRADE_GUIDE.md +41 -6
  8. data/VERSION +1 -1
  9. data/easypost.gemspec +15 -13
  10. data/lib/easypost/client.rb +1 -1
  11. data/lib/easypost/connection.rb +1 -1
  12. data/lib/easypost/errors/api/api_error.rb +5 -5
  13. data/lib/easypost/models.rb +0 -1
  14. data/lib/easypost/services/address.rb +1 -1
  15. data/lib/easypost/services/batch.rb +1 -1
  16. data/lib/easypost/services/beta_referral_customer.rb +15 -0
  17. data/lib/easypost/services/carrier_account.rb +6 -1
  18. data/lib/easypost/services/carrier_type.rb +1 -1
  19. data/lib/easypost/services/claim.rb +1 -1
  20. data/lib/easypost/services/customs_info.rb +1 -1
  21. data/lib/easypost/services/customs_item.rb +1 -1
  22. data/lib/easypost/services/end_shipper.rb +1 -1
  23. data/lib/easypost/services/event.rb +1 -1
  24. data/lib/easypost/services/insurance.rb +1 -1
  25. data/lib/easypost/services/order.rb +1 -1
  26. data/lib/easypost/services/parcel.rb +1 -1
  27. data/lib/easypost/services/pickup.rb +1 -1
  28. data/lib/easypost/services/referral_customer.rb +37 -2
  29. data/lib/easypost/services/refund.rb +1 -1
  30. data/lib/easypost/services/report.rb +3 -3
  31. data/lib/easypost/services/scan_form.rb +1 -1
  32. data/lib/easypost/services/shipment.rb +1 -1
  33. data/lib/easypost/services/tracker.rb +1 -10
  34. data/lib/easypost/services/user.rb +2 -34
  35. data/lib/easypost/services/webhook.rb +1 -1
  36. metadata +71 -36
  37. data/Rakefile +0 -3
  38. data/bin/easypost-irb +0 -9
  39. data/lib/easypost/models/error.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc0f7030b523713e8c1e2a0b870c63f69cd9024ccea7fd5c6959f923e6f72547
4
- data.tar.gz: dfdcf85da989c0f824e8fb84322098549c170c100beebc4abbc954709f634cf5
3
+ metadata.gz: a490b659ed5817624823ce658ac7557662d362a79d3fdcd299fda513e4d70a6d
4
+ data.tar.gz: bd49a9afc7da9416fcbe7f3bc6d6088a83863256a32457fb2fa0701721adca3e
5
5
  SHA512:
6
- metadata.gz: e92cef64a1a092f00e1064e57057504b43d7f3d07207bb7daedaa9e1d5579b72fea7e97e20f1d6fbe585d13ace12e1569b33b5193eb7c74479620deab4872ae0
7
- data.tar.gz: 979eb782073f63d9dc0acba422aa694f0c14e9eaf8c5a67ad384d266a0e5972e807a90f3632714b7dbe6bfd8b84487bc25d4f52b37a304ba2ff3c60ff512cdbd
6
+ metadata.gz: baaaeaed6a61e88644c96a7cf4f25627cd4eb5be33f77717814836afaefd3e56915dec5adae1033772ac2fd388dc9ba84a3c27e8392a75942d9c63a3c9ff3573
7
+ data.tar.gz: 8ae9c41a8b377ea0de2ad14272e54247437a6c8716baba87709be6b87ebfe1fabd5729666549f1ddd1968a86ee3ad5521c8b2a9c9f8dd2cf54ecbff4d85dc06f
data/.github/CODEOWNERS CHANGED
@@ -1,2 +1,2 @@
1
- # Ping the DevEx team for reviews on every PR
2
- * @EasyPost/devex
1
+ # Ping the Shippers team for reviews on every PR
2
+ * @EasyPost/team-shippers
@@ -11,7 +11,7 @@ jobs:
11
11
  runs-on: ubuntu-latest
12
12
  strategy:
13
13
  matrix:
14
- rubyversion: ['2.6', '2.7', '3.0', '3.1', '3.2', '3.3']
14
+ rubyversion: ['2.7', '3.0', '3.1', '3.2', '3.3', '3.4']
15
15
  steps:
16
16
  - uses: actions/checkout@v4
17
17
  - uses: ruby/setup-ruby@v1
@@ -35,7 +35,7 @@ jobs:
35
35
  - uses: actions/checkout@v4
36
36
  - uses: ruby/setup-ruby@v1
37
37
  with:
38
- ruby-version: '3.3'
38
+ ruby-version: '3.4'
39
39
  rubygems: '3.3.0'
40
40
  bundler-cache: true
41
41
  - name: Install Dependencies
@@ -51,7 +51,7 @@ jobs:
51
51
  - uses: actions/checkout@v4
52
52
  - uses: ruby/setup-ruby@v1
53
53
  with:
54
- ruby-version: '3.3'
54
+ ruby-version: '3.4'
55
55
  rubygems: '3.3.0'
56
56
  bundler-cache: true
57
57
  - name: Install Dependencies
@@ -12,7 +12,7 @@ jobs:
12
12
  - uses: actions/checkout@v4
13
13
  - uses: ruby/setup-ruby@v1
14
14
  with:
15
- ruby-version: '3.3'
15
+ ruby-version: '3.4'
16
16
  rubygems: '3.3.0'
17
17
  bundler-cache: true
18
18
  - name: Build Package
data/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v7.0.0 (2025-04-28)
4
+
5
+ See our [Upgrade Guide](UPGRADE_GUIDE.md#upgrading-from-6x-to-70) for more details.
6
+
7
+ - Adds Ruby 3.4 support
8
+ - Adds the following functions to assist ReferralCustomers add credit cards and bank accounts:
9
+ - `beta_referral_customer.create_credit_card_client_secret`
10
+ - `beta_referral_customer.create_bank_account_client_secret`
11
+ - `referral_customer.add_credit_card_from_stripe`
12
+ - `referral_customer.add_bank_account_from_stripe`
13
+ - Routes `AmazonShippingAccount` to the proper create endpoint
14
+ - Fixes error parsing
15
+ - Allows for alternative format of `errors` field
16
+ - Corrects available properties of an `EasyPostError` and `ApiError` (`code` and `field` removed from `EasyPostError`, `message` unfurled and explicitly added to `ApiError`)
17
+ - Removes unused `Error` model
18
+ - Corrects the HTTP verb for updating a brand from `GET` to `PATCH`
19
+ - Removes deprecated `create_list` tracker endpoint function as it is no longer available via API
20
+ - Removes deprecated `user.all_api_keys` and `user.api_keys`, use `api_key.all` and `api_key.retrieve_api_keys_for_user` respectively
21
+ - Removes unmaintained and undocumented `irb`
22
+ - Removes unused `Rakefile`
23
+ - Bumps all dev dependencies
24
+
3
25
  ## v6.4.1 (2024-08-09)
4
26
 
5
27
  - Send GET requests as query parameters instead of JSON body parameters
@@ -30,6 +52,8 @@
30
52
 
31
53
  ## v6.0.0 (2023-12-06)
32
54
 
55
+ See our [Upgrade Guide](UPGRADE_GUIDE.md#upgrading-from-5x-to-60) for more details.
56
+
33
57
  - Removes `with_carbon_offset` parameter from `create`, `buy` and `regenerate_rates` methods in the shipment service since now EasyPost offers carbon neutral shipments by default for free
34
58
  - Fixes a bug where the original filtering criteria of `all` calls wasn't passed along to `get_next_page` calls. Now, these are persisted via `_params` key on response objects
35
59
  - Removes the undocumented `create_and_buy` function from the Batch service. The proper usage is to create a batch first and buy it separately
data/Makefile CHANGED
@@ -13,15 +13,14 @@ clean:
13
13
  rm -rf coverage doc *.gem dist
14
14
 
15
15
  ## coverage - Generate a test coverage report
16
- coverage:
17
- make test
16
+ coverage: test
18
17
 
19
18
  ## docs - Generate documentation for the library
20
19
  docs:
21
20
  bundle exec rdoc lib -o docs --title "EasyPost Ruby Docs"
22
21
 
23
22
  ## install-styleguide - Import the style guides (Unix only)
24
- install-styleguide: | update-examples-submodule
23
+ install-styleguide: | init-examples-submodule
25
24
  sh examples/symlink_directory_files.sh examples/style_guides/ruby .
26
25
 
27
26
  ## init-examples-submodule - Initialize the examples submodule
data/UPGRADE_GUIDE.md CHANGED
@@ -2,12 +2,47 @@
2
2
 
3
3
  Use the following guide to assist in the upgrade process of the `easypost-ruby` library between major versions.
4
4
 
5
+ - [Upgrading from 6.x to 7.0](#upgrading-from-6x-to-70)
5
6
  - [Upgrading from 5.x to 6.0](#upgrading-from-5x-to-60)
6
7
  - [Upgrading from 4.x to 5.0](#upgrading-from-4x-to-50)
7
8
  - [Upgrading from 3.x to 4.0](#upgrading-from-3x-to-40)
8
9
 
10
+ ## Upgrading from 6.x to 7.0
11
+
12
+ ### 7.0 High Impact Changes
13
+
14
+ - [Error Parsing](#70-error-parsing)
15
+
16
+ ### 7.0 Medium Impact Changes
17
+
18
+ - [Deprecations](#70-deprecations)
19
+
20
+ ## 7.0 Error Parsing
21
+
22
+ *Likelihood of Impact: **High***
23
+
24
+ The `errors` key of an error response can return either a list of `FieldError` objects or a list of strings. The error parsing has been expanded to include both formats. As such, you will now need to check for the format of the `errors` field and handle the errors appropriately for the type that is returned.
25
+
26
+ The `Error` model has been removed since it is unused and we directly assign properties of an error response to the `ApiError` type.
27
+
28
+ The `code` and `field` properties of an `EasyPostError` have been removed as they only belong to the `ApiError` type.
29
+
30
+ ## 7.0 Deprecations
31
+
32
+ *Likelihood of Impact: **Medium***
33
+
34
+ The following deprecated functions have been removed:
35
+
36
+ - `tracker.create_list` (trackers must be created individually moving forward)
37
+ - `user.all_api_keys` (use `api_key.all`)
38
+ - `user.api_keys` (use `api_key.retrieve_api_keys_for_user`)
39
+
40
+ The `irb` has been removed from this library.
41
+
9
42
  ## Upgrading from 5.x to 6.0
10
43
 
44
+ **NOTICE:** v6 is deprecated.
45
+
11
46
  ### 6.0 High Impact Changes
12
47
 
13
48
  - [Carbon Offset Removed](#60-carbon-offset-removed)
@@ -156,18 +191,18 @@ Empty API response functions for `delete` return `true` instead of empty object
156
191
 
157
192
  ### 4.0 High Impact Changes
158
193
 
159
- * [Updating Dependencies](#40-updating-dependencies)
194
+ - [Updating Dependencies](#40-updating-dependencies)
160
195
 
161
196
  ### 4.0 Medium Impact Changes
162
197
 
163
- * [Removal of `get_rates` Shipment Method](#40-removal-of-getrates-shipment-method)
198
+ - [Removal of `get_rates` Shipment Method](#40-removal-of-getrates-shipment-method)
164
199
 
165
200
  ### 4.0 Low Impact Changes
166
201
 
167
- * [Removal of `Print` and `PrintJob` Objects](#40-removal-of-print-and-printjob-objects)
168
- * [Removal of `stamp_and_barcode_by_reference` Batch Method](#40-removal-of-stampandbarcodebyreference-batch-method)
169
- * [Removal of `Address.verify` Parameters](#40-removal-of-addressverify-parameters)
170
- * [Removal of the `http_status` Property on EasyPost::Error](#40-removal-of-httpstatus-property-on-easyposterror)
202
+ - [Removal of `Print` and `PrintJob` Objects](#40-removal-of-print-and-printjob-objects)
203
+ - [Removal of `stamp_and_barcode_by_reference` Batch Method](#40-removal-of-stampandbarcodebyreference-batch-method)
204
+ - [Removal of `Address.verify` Parameters](#40-removal-of-addressverify-parameters)
205
+ - [Removal of the `http_status` Property on EasyPost::Error](#40-removal-of-httpstatus-property-on-easyposterror)
171
206
 
172
207
  ## 4.0 Updating Dependencies
173
208
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 6.4.1
1
+ 7.0.0
data/easypost.gemspec CHANGED
@@ -17,21 +17,23 @@ Gem::Specification.new do |spec|
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
18
  f.match(%r{^(docs|examples|spec)/})
19
19
  end
20
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
20
  spec.require_paths = ['lib']
22
- spec.required_ruby_version = '>= 2.6'
21
+ spec.required_ruby_version = '>= 2.7'
23
22
 
24
- spec.add_development_dependency 'brakeman', '~> 5.4'
25
- spec.add_development_dependency 'faraday', '~> 2.7.5' # used for integration tests
26
- spec.add_development_dependency 'pry', '~> 0.14'
27
- spec.add_development_dependency 'rake', '~> 13.0'
28
- spec.add_development_dependency 'rdoc', '~> 6.5'
29
- spec.add_development_dependency 'rspec', '~> 3.12'
30
- spec.add_development_dependency 'rubocop', '~> 1.49'
31
- spec.add_development_dependency 'rubocop-rspec', '2.19' # pin to 2.19 because latest version doesn't support Ruby 2.6
23
+ spec.add_development_dependency 'abbrev', '~> 0.1'
24
+ spec.add_development_dependency 'benchmark', '~> 0.4'
25
+ spec.add_development_dependency 'bigdecimal', '~> 3'
26
+ spec.add_development_dependency 'brakeman', '~> 5.4' # can't upgrade to 6.x, requires Ruby 3.0
27
+ spec.add_development_dependency 'faraday', '~> 2.8' # can't upgrade to 2.9, requires Ruby 3.0
28
+ spec.add_development_dependency 'logger', '~> 1'
29
+ spec.add_development_dependency 'ostruct', '~> 0.6'
30
+ spec.add_development_dependency 'rdoc', '~> 6.12'
31
+ spec.add_development_dependency 'rspec', '~> 3.13'
32
+ spec.add_development_dependency 'rubocop', '= 1.72' # TODO: v1.73 no longer packages certain plugins and will require changes
33
+ spec.add_development_dependency 'rubocop-rspec', '= 2.31' # can't upgrade to 3.0, requires easycop config changes
32
34
  spec.add_development_dependency 'simplecov', '~> 0.22'
33
35
  spec.add_development_dependency 'simplecov-lcov', '~> 0.8'
34
- spec.add_development_dependency 'typhoeus', '~> 1.4.0' # used for integration tests
35
- spec.add_development_dependency 'vcr', '~> 6.1'
36
- spec.add_development_dependency 'webmock', '~> 3.18'
36
+ spec.add_development_dependency 'typhoeus', '~> 1.4'
37
+ spec.add_development_dependency 'vcr', '~> 6.3'
38
+ spec.add_development_dependency 'webmock', '~> 3.25'
37
39
  end
@@ -76,7 +76,7 @@ class EasyPost::Client
76
76
  # @param endpoint [String] URI path of the resource
77
77
  # @param params [Object] (nil) object to be used as the request parameters
78
78
  # @param api_version [String] the version of API to hit
79
- # @raise [EasyPost::Error] if the response has a non-2xx status code
79
+ # @raise [EasyPost::Errors::EasyPostError] if the response has a non-2xx status code
80
80
  # @return [Hash] JSON object parsed from the response body
81
81
  def make_request(
82
82
  method,
@@ -7,7 +7,7 @@ EasyPost::Connection = Struct.new(:uri, :config, keyword_init: true) do
7
7
  # @param path [String] URI path of the resource
8
8
  # @param requested_api_key [String] ({EasyPost.api_key}) key set Authorization header.
9
9
  # @param body [String] (nil) body of the request
10
- # @raise [EasyPost::Error] if the response has a non-2xx status code
10
+ # @raise [EasyPost::Errors::EasyPostError] if the response has a non-2xx status code
11
11
  # @return [Hash] JSON object parsed from the response body
12
12
  def call(method, path, api_key = nil, body = nil)
13
13
  raise EasyPost::Errors::MissingParameterError.new('api_key') if api_key.nil?
@@ -4,10 +4,13 @@ require_relative '../easy_post_error'
4
4
  require 'easypost/constants'
5
5
 
6
6
  class EasyPost::Errors::ApiError < EasyPost::Errors::EasyPostError
7
- attr_reader :status_code, :code, :errors
7
+ attr_reader :message, :status_code, :code, :errors
8
8
 
9
9
  def initialize(message, status_code = nil, error_code = nil, sub_errors = nil)
10
10
  super message
11
+ message_list = []
12
+ EasyPost::Errors::ApiError.collect_error_messages(message, message_list)
13
+ @message = message_list.join(', ')
11
14
  @status_code = status_code
12
15
  @code = error_code
13
16
  @errors = sub_errors
@@ -46,12 +49,9 @@ class EasyPost::Errors::ApiError < EasyPost::Errors::EasyPostError
46
49
  # Try to parse the response body as JSON
47
50
  begin
48
51
  error_data = JSON.parse(response.body)['error']
49
-
50
52
  error_message = error_data['message']
51
53
  error_type = error_data['code']
52
- errors = error_data['errors']&.map do |error|
53
- EasyPost::Models::Error.from_api_error_response(error)
54
- end
54
+ errors = error_data['errors']
55
55
  rescue StandardError
56
56
  error_message = response.code.to_s
57
57
  error_type = EasyPost::Constants::API_ERROR_DETAILS_PARSING_ERROR
@@ -14,7 +14,6 @@ require_relative 'models/claim'
14
14
  require_relative 'models/customs_info'
15
15
  require_relative 'models/customs_item'
16
16
  require_relative 'models/end_shipper'
17
- require_relative 'models/error'
18
17
  require_relative 'models/event'
19
18
  require_relative 'models/insurance'
20
19
  require_relative 'models/order'
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Address < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Address
4
+ MODEL_CLASS = EasyPost::Models::Address # :nodoc:
5
5
 
6
6
  # Create an address.
7
7
  def create(params = {})
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Batch < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Batch
4
+ MODEL_CLASS = EasyPost::Models::Batch # :nodoc:
5
5
 
6
6
  # Create a Batch.
7
7
  def create(params = {})
@@ -41,4 +41,19 @@ class EasyPost::Services::BetaReferralCustomer < EasyPost::Services::Service
41
41
 
42
42
  EasyPost::InternalUtilities::Json.convert_json_to_object(response)
43
43
  end
44
+
45
+ # Creates a client secret to use with Stripe when adding a credit card.
46
+ def create_credit_card_client_secret
47
+ response = @client.make_request(:post, 'setup_intents', nil, 'beta')
48
+
49
+ EasyPost::InternalUtilities::Json.convert_json_to_object(response)
50
+ end
51
+
52
+ # Creates a client secret to use with Stripe when adding a bank account.
53
+ def create_bank_account_client_secret(return_url = nil)
54
+ params = return_url ? { return_url: return_url } : nil
55
+ response = @client.make_request(:post, 'financial_connections_sessions', params, 'beta')
56
+
57
+ EasyPost::InternalUtilities::Json.convert_json_to_object(response)
58
+ end
44
59
  end
@@ -3,7 +3,8 @@
3
3
  class EasyPost::Services::CarrierAccount < EasyPost::Services::Service
4
4
  CUSTOM_WORKFLOW_CARRIER_TYPES = %w[FedexAccount FedexSmartpostAccount].freeze
5
5
  UPS_OAUTH_CARRIER_ACCOUNT_TYPES = %w[UpsAccount UpsMailInnovationsAccount UpsSurepostAccount].freeze
6
- MODEL_CLASS = EasyPost::Models::CarrierAccount
6
+ CARRIER_ACCOUNT_TYPES_WITH_CUSTOM_OAUTH = %w[AmazonShippingAccount].freeze
7
+ MODEL_CLASS = EasyPost::Models::CarrierAccount # :nodoc:
7
8
 
8
9
  # Create a carrier account
9
10
  def create(params = {})
@@ -15,6 +16,8 @@ class EasyPost::Services::CarrierAccount < EasyPost::Services::Service
15
16
  'carrier_accounts/register'
16
17
  elsif UPS_OAUTH_CARRIER_ACCOUNT_TYPES.include?(carrier_account_type)
17
18
  'ups_oauth_registrations'
19
+ elsif CARRIER_ACCOUNT_TYPES_WITH_CUSTOM_OAUTH.include?(carrier_account_type)
20
+ 'carrier_accounts/register_oauth'
18
21
  else
19
22
  'carrier_accounts'
20
23
  end
@@ -63,6 +66,8 @@ class EasyPost::Services::CarrierAccount < EasyPost::Services::Service
63
66
  def select_top_layer_key(carrier_account_type)
64
67
  if UPS_OAUTH_CARRIER_ACCOUNT_TYPES.include?(carrier_account_type)
65
68
  'ups_oauth_registrations'
69
+ elsif CARRIER_ACCOUNT_TYPES_WITH_CUSTOM_OAUTH.include?(carrier_account_type)
70
+ 'carrier_account_oauth_registrations'
66
71
  else
67
72
  'carrier_account'
68
73
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::CarrierType < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::CarrierType
4
+ MODEL_CLASS = EasyPost::Models::CarrierType # :nodoc:
5
5
 
6
6
  # Retrieve all carrier types
7
7
  def all
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Claim < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Claim
4
+ MODEL_CLASS = EasyPost::Models::Claim # :nodoc:
5
5
 
6
6
  # Create an Claim object
7
7
  def create(params = {})
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::CustomsInfo < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::CustomsInfo
4
+ MODEL_CLASS = EasyPost::Models::CustomsInfo # :nodoc:
5
5
 
6
6
  # Create a CustomsInfo object
7
7
  def create(params)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::CustomsItem < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::CustomsItem
4
+ MODEL_CLASS = EasyPost::Models::CustomsItem # :nodoc:
5
5
 
6
6
  # Create a CustomsItem object
7
7
  def create(params)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::EndShipper < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::EndShipper
4
+ MODEL_CLASS = EasyPost::Models::EndShipper # :nodoc:
5
5
 
6
6
  # Create an EndShipper object.
7
7
  def create(params = {})
@@ -3,7 +3,7 @@
3
3
  require 'json'
4
4
 
5
5
  class EasyPost::Services::Event < EasyPost::Services::Service
6
- MODEL_CLASS = EasyPost::Models::Event
6
+ MODEL_CLASS = EasyPost::Models::Event # :nodoc:
7
7
 
8
8
  # Retrieve an Event object
9
9
  def retrieve(id)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Insurance < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Insurance
4
+ MODEL_CLASS = EasyPost::Models::Insurance # :nodoc:
5
5
 
6
6
  # Create an Insurance object
7
7
  def create(params = {})
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Order < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Order
4
+ MODEL_CLASS = EasyPost::Models::Order # :nodoc:
5
5
 
6
6
  # Create an Order object
7
7
  def create(params = {})
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Parcel < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Parcel
4
+ MODEL_CLASS = EasyPost::Models::Parcel # :nodoc:
5
5
 
6
6
  # Create a Parcel object
7
7
  def create(params = {})
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Pickup < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Pickup
4
+ MODEL_CLASS = EasyPost::Models::Pickup # :nodoc:
5
5
 
6
6
  # Create a Pickup object
7
7
  def create(params = {})
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::ReferralCustomer < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::User
4
+ MODEL_CLASS = EasyPost::Models::User # :nodoc:
5
5
 
6
6
  # Create a referral customer. This function requires the Partner User's API key.
7
7
  def create(params = {})
@@ -40,7 +40,7 @@ class EasyPost::Services::ReferralCustomer < EasyPost::Services::Service
40
40
  all(params)
41
41
  end
42
42
 
43
- # Add credit card to a referral customer. This function requires the ReferralCustomer Customer's API key.
43
+ # Add a credit card to EasyPost for a ReferralCustomer without needing a Stripe account. This function requires the ReferralCustomer User's API key.
44
44
  def add_credit_card(referral_api_key, number, expiration_month, expiration_year, cvc, priority = 'primary')
45
45
  easypost_stripe_api_key = retrieve_easypost_stripe_api_key
46
46
 
@@ -59,6 +59,41 @@ class EasyPost::Services::ReferralCustomer < EasyPost::Services::Service
59
59
  create_easypost_credit_card(referral_api_key, stripe_credit_card_token, priority)
60
60
  end
61
61
 
62
+ # Add a credit card to EasyPost for a ReferralCustomer with a payment method ID from Stripe. This function requires the ReferralCustomer User's API key.
63
+ def add_credit_card_from_stripe(referral_api_key, payment_method_id, priority = 'primary')
64
+ params = {
65
+ credit_card: {
66
+ payment_method_id: payment_method_id,
67
+ priority: priority,
68
+ },
69
+ }
70
+ referral_client = EasyPost::Client.new(api_key: referral_api_key)
71
+ response = referral_client.make_request(
72
+ :post,
73
+ 'credit_cards',
74
+ params,
75
+ )
76
+
77
+ EasyPost::InternalUtilities::Json.convert_json_to_object(response)
78
+ end
79
+
80
+ # Add a bank account to EasyPost for a ReferralCustomer. This function requires the ReferralCustomer User's API key.
81
+ def add_bank_account_from_stripe(referral_api_key, financial_connections_id, mandate_data, priority = 'primary')
82
+ params = {
83
+ financial_connections_id: financial_connections_id,
84
+ mandate_data: mandate_data,
85
+ priority: priority,
86
+ }
87
+ referral_client = EasyPost::Client.new(api_key: referral_api_key)
88
+ response = referral_client.make_request(
89
+ :post,
90
+ 'bank_accounts',
91
+ params,
92
+ )
93
+
94
+ EasyPost::InternalUtilities::Json.convert_json_to_object(response)
95
+ end
96
+
62
97
  private
63
98
 
64
99
  # Retrieve EasyPost's Stripe public API key.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Refund < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Refund
4
+ MODEL_CLASS = EasyPost::Models::Refund # :nodoc:
5
5
 
6
6
  # Create a Refund object
7
7
  def create(params = {})
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Report < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Report
4
+ MODEL_CLASS = EasyPost::Models::Report # :nodoc:
5
5
 
6
6
  # Create a Report
7
7
  def create(params = {})
8
8
  unless params[:type]
9
- raise ArgumentError, "Missing 'type' parameter in params" # TODO: replace the error in the error-handling overhaul PR
9
+ raise EasyPost::Errors::MISSING_REQUIRED_PARAMETER.new('type')
10
10
  end
11
11
 
12
12
  type = params.delete(:type)
@@ -26,7 +26,7 @@ class EasyPost::Services::Report < EasyPost::Services::Service
26
26
  # Retrieve all Report objects
27
27
  def all(params = {})
28
28
  unless params[:type]
29
- raise ArgumentError, "Missing 'type' parameter in params" # TODO: replace the error in the error-handling overhaul PR
29
+ raise EasyPost::Errors::MISSING_REQUIRED_PARAMETER.new('type')
30
30
  end
31
31
 
32
32
  type = params.delete(:type)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::ScanForm < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::ScanForm
4
+ MODEL_CLASS = EasyPost::Models::ScanForm # :nodoc:
5
5
 
6
6
  # Create a ScanForm.
7
7
  def create(params = {})
@@ -3,7 +3,7 @@
3
3
  require 'set'
4
4
 
5
5
  class EasyPost::Services::Shipment < EasyPost::Services::Service
6
- MODEL_CLASS = EasyPost::Models::Shipment
6
+ MODEL_CLASS = EasyPost::Models::Shipment # :nodoc:
7
7
 
8
8
  # Create a Shipment.
9
9
  def create(params = {})
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Tracker < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Tracker
4
+ MODEL_CLASS = EasyPost::Models::Tracker # :nodoc:
5
5
 
6
6
  # Create a Tracker
7
7
  def create(params = {})
@@ -29,15 +29,6 @@ class EasyPost::Services::Tracker < EasyPost::Services::Service
29
29
  get_all_helper('trackers', MODEL_CLASS, params, filters)
30
30
  end
31
31
 
32
- # Create multiple Tracker objects in bulk.
33
- # <b>DEPRECATED:</b> Please use <tt>create</tt> instead. This function will be removed in a future release.
34
- def create_list(params = {})
35
- wrapped_params = { 'trackers' => params }
36
-
37
- @client.make_request(:post, 'trackers/create_list', wrapped_params)
38
- true # This endpoint does not return a response so we return true here instead
39
- end
40
-
41
32
  # Get the next page of trackers.
42
33
  def get_next_page(collection, page_size = nil)
43
34
  raise EasyPost::Errors::EndOfPaginationError.new unless more_pages?(collection)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::User < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::User
4
+ MODEL_CLASS = EasyPost::Models::User # :nodoc:
5
5
 
6
6
  # Create a child User.
7
7
  def create(params = {})
@@ -39,42 +39,10 @@ class EasyPost::Services::User < EasyPost::Services::Service
39
39
  true
40
40
  end
41
41
 
42
- # Retrieve a list of all ApiKey objects.
43
- def all_api_keys
44
- warn '[DEPRECATION] `all_api_keys` is deprecated. Please use `all` in the `api_key` service instead.'
45
- response = @client.make_request(:get, 'api_keys')
46
-
47
- EasyPost::InternalUtilities::Json.convert_json_to_object(response, EasyPost::Models::ApiKey)
48
- end
49
-
50
- # Retrieve a list of ApiKey objects (works for the authenticated user or a child user).
51
- def api_keys(id)
52
- warn '[DEPRECATION] `api_keys` is deprecated.
53
- Please use `retrieve_api_keys_for_user` in the `api_key` service instead.'
54
-
55
- api_keys = all_api_keys
56
-
57
- if api_keys.id == id
58
- # This function was called on the authenticated user
59
- my_api_keys = api_keys.keys
60
- else
61
- # This function was called on a child user (authenticated as parent, only return this child user's details).
62
- my_api_keys = []
63
- api_keys.children.each do |child|
64
- if child.id == id
65
- my_api_keys = child.keys
66
- break
67
- end
68
- end
69
- end
70
-
71
- my_api_keys
72
- end
73
-
74
42
  # Update the Brand of a User.
75
43
  def update_brand(id, params = {})
76
44
  wrapped_params = { brand: params }
77
- response = @client.make_request(:get, "users/#{id}/brand", wrapped_params)
45
+ response = @client.make_request(:patch, "users/#{id}/brand", wrapped_params)
78
46
 
79
47
  EasyPost::InternalUtilities::Json.convert_json_to_object(response, EasyPost::Models::Brand)
80
48
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class EasyPost::Services::Webhook < EasyPost::Services::Service
4
- MODEL_CLASS = EasyPost::Models::Webhook
4
+ MODEL_CLASS = EasyPost::Models::Webhook # :nodoc:
5
5
 
6
6
  # Create a Webhook.
7
7
  def create(params = {})
metadata CHANGED
@@ -1,15 +1,56 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easypost
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.4.1
4
+ version: 7.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - EasyPost Developers
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2024-08-09 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: abbrev
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.1'
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: benchmark
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.4'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.4'
40
+ - !ruby/object:Gem::Dependency
41
+ name: bigdecimal
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '3'
13
54
  - !ruby/object:Gem::Dependency
14
55
  name: brakeman
15
56
  requirement: !ruby/object:Gem::Requirement
@@ -30,98 +71,98 @@ dependencies:
30
71
  requirements:
31
72
  - - "~>"
32
73
  - !ruby/object:Gem::Version
33
- version: 2.7.5
74
+ version: '2.8'
34
75
  type: :development
35
76
  prerelease: false
36
77
  version_requirements: !ruby/object:Gem::Requirement
37
78
  requirements:
38
79
  - - "~>"
39
80
  - !ruby/object:Gem::Version
40
- version: 2.7.5
81
+ version: '2.8'
41
82
  - !ruby/object:Gem::Dependency
42
- name: pry
83
+ name: logger
43
84
  requirement: !ruby/object:Gem::Requirement
44
85
  requirements:
45
86
  - - "~>"
46
87
  - !ruby/object:Gem::Version
47
- version: '0.14'
88
+ version: '1'
48
89
  type: :development
49
90
  prerelease: false
50
91
  version_requirements: !ruby/object:Gem::Requirement
51
92
  requirements:
52
93
  - - "~>"
53
94
  - !ruby/object:Gem::Version
54
- version: '0.14'
95
+ version: '1'
55
96
  - !ruby/object:Gem::Dependency
56
- name: rake
97
+ name: ostruct
57
98
  requirement: !ruby/object:Gem::Requirement
58
99
  requirements:
59
100
  - - "~>"
60
101
  - !ruby/object:Gem::Version
61
- version: '13.0'
102
+ version: '0.6'
62
103
  type: :development
63
104
  prerelease: false
64
105
  version_requirements: !ruby/object:Gem::Requirement
65
106
  requirements:
66
107
  - - "~>"
67
108
  - !ruby/object:Gem::Version
68
- version: '13.0'
109
+ version: '0.6'
69
110
  - !ruby/object:Gem::Dependency
70
111
  name: rdoc
71
112
  requirement: !ruby/object:Gem::Requirement
72
113
  requirements:
73
114
  - - "~>"
74
115
  - !ruby/object:Gem::Version
75
- version: '6.5'
116
+ version: '6.12'
76
117
  type: :development
77
118
  prerelease: false
78
119
  version_requirements: !ruby/object:Gem::Requirement
79
120
  requirements:
80
121
  - - "~>"
81
122
  - !ruby/object:Gem::Version
82
- version: '6.5'
123
+ version: '6.12'
83
124
  - !ruby/object:Gem::Dependency
84
125
  name: rspec
85
126
  requirement: !ruby/object:Gem::Requirement
86
127
  requirements:
87
128
  - - "~>"
88
129
  - !ruby/object:Gem::Version
89
- version: '3.12'
130
+ version: '3.13'
90
131
  type: :development
91
132
  prerelease: false
92
133
  version_requirements: !ruby/object:Gem::Requirement
93
134
  requirements:
94
135
  - - "~>"
95
136
  - !ruby/object:Gem::Version
96
- version: '3.12'
137
+ version: '3.13'
97
138
  - !ruby/object:Gem::Dependency
98
139
  name: rubocop
99
140
  requirement: !ruby/object:Gem::Requirement
100
141
  requirements:
101
- - - "~>"
142
+ - - '='
102
143
  - !ruby/object:Gem::Version
103
- version: '1.49'
144
+ version: '1.72'
104
145
  type: :development
105
146
  prerelease: false
106
147
  version_requirements: !ruby/object:Gem::Requirement
107
148
  requirements:
108
- - - "~>"
149
+ - - '='
109
150
  - !ruby/object:Gem::Version
110
- version: '1.49'
151
+ version: '1.72'
111
152
  - !ruby/object:Gem::Dependency
112
153
  name: rubocop-rspec
113
154
  requirement: !ruby/object:Gem::Requirement
114
155
  requirements:
115
156
  - - '='
116
157
  - !ruby/object:Gem::Version
117
- version: '2.19'
158
+ version: '2.31'
118
159
  type: :development
119
160
  prerelease: false
120
161
  version_requirements: !ruby/object:Gem::Requirement
121
162
  requirements:
122
163
  - - '='
123
164
  - !ruby/object:Gem::Version
124
- version: '2.19'
165
+ version: '2.31'
125
166
  - !ruby/object:Gem::Dependency
126
167
  name: simplecov
127
168
  requirement: !ruby/object:Gem::Requirement
@@ -156,46 +197,45 @@ dependencies:
156
197
  requirements:
157
198
  - - "~>"
158
199
  - !ruby/object:Gem::Version
159
- version: 1.4.0
200
+ version: '1.4'
160
201
  type: :development
161
202
  prerelease: false
162
203
  version_requirements: !ruby/object:Gem::Requirement
163
204
  requirements:
164
205
  - - "~>"
165
206
  - !ruby/object:Gem::Version
166
- version: 1.4.0
207
+ version: '1.4'
167
208
  - !ruby/object:Gem::Dependency
168
209
  name: vcr
169
210
  requirement: !ruby/object:Gem::Requirement
170
211
  requirements:
171
212
  - - "~>"
172
213
  - !ruby/object:Gem::Version
173
- version: '6.1'
214
+ version: '6.3'
174
215
  type: :development
175
216
  prerelease: false
176
217
  version_requirements: !ruby/object:Gem::Requirement
177
218
  requirements:
178
219
  - - "~>"
179
220
  - !ruby/object:Gem::Version
180
- version: '6.1'
221
+ version: '6.3'
181
222
  - !ruby/object:Gem::Dependency
182
223
  name: webmock
183
224
  requirement: !ruby/object:Gem::Requirement
184
225
  requirements:
185
226
  - - "~>"
186
227
  - !ruby/object:Gem::Version
187
- version: '3.18'
228
+ version: '3.25'
188
229
  type: :development
189
230
  prerelease: false
190
231
  version_requirements: !ruby/object:Gem::Requirement
191
232
  requirements:
192
233
  - - "~>"
193
234
  - !ruby/object:Gem::Version
194
- version: '3.18'
235
+ version: '3.25'
195
236
  description: Client library for accessing the EasyPost shipping API via Ruby.
196
237
  email: oss@easypost.com
197
- executables:
198
- - easypost-irb
238
+ executables: []
199
239
  extensions: []
200
240
  extra_rdoc_files: []
201
241
  files:
@@ -213,10 +253,8 @@ files:
213
253
  - LICENSE
214
254
  - Makefile
215
255
  - README.md
216
- - Rakefile
217
256
  - UPGRADE_GUIDE.md
218
257
  - VERSION
219
- - bin/easypost-irb
220
258
  - easypost.gemspec
221
259
  - lib/easypost.rb
222
260
  - lib/easypost/client.rb
@@ -267,7 +305,6 @@ files:
267
305
  - lib/easypost/models/customs_info.rb
268
306
  - lib/easypost/models/customs_item.rb
269
307
  - lib/easypost/models/end_shipper.rb
270
- - lib/easypost/models/error.rb
271
308
  - lib/easypost/models/event.rb
272
309
  - lib/easypost/models/insurance.rb
273
310
  - lib/easypost/models/order.rb
@@ -327,7 +364,6 @@ homepage: https://www.easypost.com/docs
327
364
  licenses:
328
365
  - MIT
329
366
  metadata: {}
330
- post_install_message:
331
367
  rdoc_options: []
332
368
  require_paths:
333
369
  - lib
@@ -335,15 +371,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
335
371
  requirements:
336
372
  - - ">="
337
373
  - !ruby/object:Gem::Version
338
- version: '2.6'
374
+ version: '2.7'
339
375
  required_rubygems_version: !ruby/object:Gem::Requirement
340
376
  requirements:
341
377
  - - ">="
342
378
  - !ruby/object:Gem::Version
343
379
  version: '0'
344
380
  requirements: []
345
- rubygems_version: 3.5.11
346
- signing_key:
381
+ rubygems_version: 3.6.7
347
382
  specification_version: 4
348
383
  summary: EasyPost Ruby Client Library
349
384
  test_files: []
data/Rakefile DELETED
@@ -1,3 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'bundler/gem_tasks'
data/bin/easypost-irb DELETED
@@ -1,9 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
5
-
6
- libs = ' -r irb/completion'
7
- libs << " -r #{"#{File.dirname(__FILE__)}/../lib/easypost"}"
8
- puts 'Initializing EasyPost...'
9
- exec "#{irb} #{libs} --simple-prompt"
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # EasyPost Error object.
4
- class EasyPost::Models::Error
5
- attr_reader :code, :field, :message
6
-
7
- # Initialize a new EasyPost Error
8
- def initialize(code, field = nil, message = nil)
9
- @code = code
10
- @field = field
11
- @message = message
12
- end
13
-
14
- # Create an EasyPost Error from an API error response.
15
- def self.from_api_error_response(data)
16
- code = data['code']
17
- field = data['field'] || nil
18
- message = data['message'] || nil
19
- EasyPost::Models::Error.new(code, field, message)
20
- end
21
- end