easypost 4.5.0 → 4.6.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 10f43ed8bb80d557e81cb7904f2972d5869db45393e18d6d29374d8be9cb84da
4
- data.tar.gz: 1956b7baf66e1906c3e0de4252c0563d914ec115d0eafb60a7b17e11493e9d89
3
+ metadata.gz: 16942dad76e2a3abbfa17dacaaa75f391f65a04a4daaea979bbba2c0e308ac30
4
+ data.tar.gz: 90d5b71e9c45c952296ed1dcb3769d1d69902c2917dc4a8fa1ca6842e5918129
5
5
  SHA512:
6
- metadata.gz: 735164cd9f181b41aeca6e9f411ad190b6dfcd11772d8be7fa89f8764330dbb7e7578558c3a03b21253a5e98bc0bb4ce0f99ed87991a838719ff7fcb80464404
7
- data.tar.gz: 5112f6462def1f310ec78ab55fb38c555888ec39adf9d0605e930a01ddbbc282b7635d08a4348b63d562b67dd6fa48111022e8404a330812cd4922f853bf840e
6
+ metadata.gz: 9a91982b9ed19df4cf8ddea05d6da1a43d6caf86e6b49d67cf54d32ba71632e06d89822f695016d30e14a4f3577e600ebba29adedf38ed0c18797413c7589c80
7
+ data.tar.gz: 83201c6700dfdff58ca200780efdc83272fe3943a071879529ddb3a9ee8d526e505219c0584a8b91571400e3330be53f4aeefc568efdb5717f35df522a6b62fb
@@ -0,0 +1,2 @@
1
+ # Ping the DevEx team for reviews on every PR
2
+ * @EasyPost/devex
data/.rubocop.yml CHANGED
@@ -3,3 +3,7 @@ inherit_from: easycop.yml
3
3
  # We are ignoring RSpec/FilePath because Simplecov doesn't play nice with nested spec files
4
4
  RSpec/FilePath:
5
5
  Enabled: false
6
+ # TODO: Remove this once we start using keyword arguments
7
+ Style/OptionalBooleanParameter:
8
+ Exclude:
9
+ - 'lib/easypost/shipment.rb'
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## v4.6.0 (2022-08-02)
4
+
5
+ - Adds Carbon Offset support
6
+ - Adds ability to create a shipment with carbon_offset
7
+ - Adds ability to buy a shipment with carbon_offset
8
+ - Adds ability to one-call-buy a shipment with carbon_offset
9
+ - Adds ability to rerate a shipment with carbon_offset
10
+ - Adds `validate_webhook` function that returns your webhook or raises an error if there is a `webhook_secret` mismatch
11
+ - Deprecated `PaymentMethod` class, please use `Billing` class for retrieve all payment method function
12
+
3
13
  ## v4.5.0 (2022-07-18)
4
14
 
5
15
  - Adds ability to generate shipment forms via `generate_form` function
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.5.0
1
+ 4.6.0
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The CarbonOffset object is a summary of carbon offset data for a given rate, including grams, price and currency
4
+ class EasyPost::CarbonOffset < EasyPost::Resource
5
+ end
@@ -2,14 +2,10 @@
2
2
 
3
3
  # PaymentMethod objects represent a payment method of a user.
4
4
  class EasyPost::PaymentMethod < EasyPost::Resource
5
- # Retrieve all payment methods.
5
+ # <b>DEPRECATED:</b> Please use <tt>Billing class</tt> instead.
6
+ # Deprecated: v4.5.0 - v6.0.0
6
7
  def self.all(api_key = nil)
7
- response = EasyPost.make_request(:get, url, api_key)
8
-
9
- if response['id'].nil?
10
- raise EasyPost::Error.new('Billing has not been setup for this user. Please add a payment method.')
11
- end
12
-
13
- EasyPost::Util.convert_to_easypost_object(response, api_key)
8
+ warn '[DEPRECATION] `all` is deprecated. Please use `Billing.retrieve_payment_methods` instead.'
9
+ EasyPost::Billing.retrieve_payment_methods(api_key)
14
10
  end
15
11
  end
@@ -5,8 +5,22 @@ require 'set'
5
5
  # The workhorse of the EasyPost API, a Shipment is made up of a "to" and "from" Address, the Parcel
6
6
  # being shipped, and any customs forms required for international deliveries.
7
7
  class EasyPost::Shipment < EasyPost::Resource
8
+ # Create a Shipment.
9
+ def self.create(params = {}, api_key = nil, with_carbon_offset = false)
10
+ wrapped_params = {
11
+ shipment: params,
12
+ carbon_offset: with_carbon_offset,
13
+ }
14
+
15
+ response = EasyPost.make_request(:post, url, api_key, wrapped_params)
16
+ EasyPost::Util.convert_to_easypost_object(response, api_key)
17
+ end
18
+
8
19
  # Regenerate the rates of a Shipment.
9
- def regenerate_rates(params = {})
20
+ def regenerate_rates(with_carbon_offset = false)
21
+ params = {}
22
+ params[:carbon_offset] = with_carbon_offset
23
+
10
24
  response = EasyPost.make_request(:post, "#{url}/rerate", @api_key, params)
11
25
  refresh_from(response, @api_key)
12
26
 
@@ -21,13 +35,15 @@ class EasyPost::Shipment < EasyPost::Resource
21
35
  end
22
36
 
23
37
  # Buy a Shipment.
24
- def buy(params = {})
38
+ def buy(params = {}, with_carbon_offset = false)
25
39
  if params.instance_of?(EasyPost::Rate)
26
40
  temp = params.clone
27
41
  params = {}
28
42
  params[:rate] = temp
29
43
  end
30
44
 
45
+ params[:carbon_offset] = with_carbon_offset
46
+
31
47
  response = EasyPost.make_request(:post, "#{url}/buy", @api_key, params)
32
48
  refresh_from(response, @api_key)
33
49
 
data/lib/easypost/util.rb CHANGED
@@ -37,6 +37,7 @@ module EasyPost::Util
37
37
  'Address' => EasyPost::Address,
38
38
  'Batch' => EasyPost::Batch,
39
39
  'Brand' => EasyPost::Brand,
40
+ 'CarbonOffset' => EasyPost::CarbonOffset,
40
41
  'CarrierAccount' => EasyPost::CarrierAccount,
41
42
  'CustomsInfo' => EasyPost::CustomsInfo,
42
43
  'CustomsItem' => EasyPost::CustomsItem,
@@ -32,4 +32,26 @@ class EasyPost::Webhook < EasyPost::Resource
32
32
 
33
33
  self
34
34
  end
35
+
36
+ # Validate a webhook by comparing the HMAC signature header sent from EasyPost to your shared secret.
37
+ # If the signatures do not match, an error will be raised signifying the webhook either did not originate
38
+ # from EasyPost or the secrets do not match. If the signatures do match, the `event_body` will be returned
39
+ # as JSON.
40
+ def self.validate_webhook(event_body, headers, webhook_secret)
41
+ easypost_hmac_signature = headers['X-Hmac-Signature']
42
+
43
+ if easypost_hmac_signature.nil?
44
+ raise EasyPost::Error.new('Webhook received does not contain an HMAC signature.')
45
+ end
46
+
47
+ encoded_webhook_secret = webhook_secret.unicode_normalize(:nfkd).encode('utf-8')
48
+
49
+ expected_signature = OpenSSL::HMAC.hexdigest('sha256', encoded_webhook_secret, event_body)
50
+ digest = "hmac-sha256-hex=#{expected_signature}"
51
+ unless digest == easypost_hmac_signature
52
+ raise EasyPost::Error.new('Webhook received did not originate from EasyPost or had a webhook secret mismatch.')
53
+ end
54
+
55
+ JSON.parse(event_body)
56
+ end
35
57
  end
data/lib/easypost.rb CHANGED
@@ -16,6 +16,7 @@ require 'easypost/api_key'
16
16
  require 'easypost/batch'
17
17
  require 'easypost/billing'
18
18
  require 'easypost/brand'
19
+ require 'easypost/carbon_offset'
19
20
  require 'easypost/carrier_account'
20
21
  require 'easypost/carrier_type'
21
22
  require 'easypost/customs_info'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easypost
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.0
4
+ version: 4.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - EasyPost Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-18 00:00:00.000000000 Z
11
+ date: 2022-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: brakeman
@@ -158,6 +158,7 @@ extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
160
  - ".gitattributes"
161
+ - ".github/CODEOWNERS"
161
162
  - ".github/ISSUE_TEMPLATE/bug_report.yml"
162
163
  - ".github/ISSUE_TEMPLATE/feature_request.yml"
163
164
  - ".github/PULL_REQUEST_TEMPLATE.md"
@@ -188,6 +189,7 @@ files:
188
189
  - lib/easypost/beta/referral.rb
189
190
  - lib/easypost/billing.rb
190
191
  - lib/easypost/brand.rb
192
+ - lib/easypost/carbon_offset.rb
191
193
  - lib/easypost/carrier_account.rb
192
194
  - lib/easypost/carrier_type.rb
193
195
  - lib/easypost/connection.rb