From 3b21d2aea5852a2603213e84ff4b0359f2e0301a Mon Sep 17 00:00:00 2001 From: Justintime50 <39606064+Justintime50@users.noreply.github.com> Date: Fri, 7 Nov 2025 11:07:02 -0700 Subject: [PATCH] feat: add verify_carrier address param --- CHANGELOG.md | 3 +- VERSION | 2 +- lib/easypost/services/address.rb | 15 +++- spec/address_spec.rb | 25 +++++++ ...s_an_address_with_verify_carrier_param.yml | 72 +++++++++++++++++++ ...s_an_address_with_verify_carrier_param.yml | 72 +++++++++++++++++++ 6 files changed, 184 insertions(+), 5 deletions(-) create mode 100644 spec/cassettes/address/EasyPost_Services_Address_address_service_creates_an_address_with_verify_carrier_param.yml create mode 100644 spec/cassettes/address/EasyPost_Services_Address_create_and_verify_creates_and_verifies_an_address_with_verify_carrier_param.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 380ef0a5..7c1ec3ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,10 @@ # CHANGELOG -## v7.1.0 (2025-06-18) +## v7.2.0 (2025-11-10) - Adds support for `UspsShipAccount` - Adds `tracker.retrieve_batch` function +- Adds `verify_carrier` address param ## v7.1.0 (2025-06-18) diff --git a/VERSION b/VERSION index a3fcc712..0ee843cc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -7.1.0 +7.2.0 diff --git a/lib/easypost/services/address.rb b/lib/easypost/services/address.rb index 4587e708..fa394b98 100644 --- a/lib/easypost/services/address.rb +++ b/lib/easypost/services/address.rb @@ -5,7 +5,7 @@ class EasyPost::Services::Address < EasyPost::Services::Service # Create an address. def create(params = {}) - address = params.reject { |k, _| [:verify, :verify_strict].include?(k) } + address = params.reject { |k, _| [:verify, :verify_strict, :verify_carrier].include?(k) } wrapped_params = { address: address } @@ -17,6 +17,10 @@ def create(params = {}) wrapped_params[:verify_strict] = params[:verify_strict] end + if params[:verify_carrier] + wrapped_params[:verify_carrier] = params[:verify_carrier] + end + response = @client.make_request(:post, 'addresses', params) EasyPost::InternalUtilities::Json.convert_json_to_object(response, MODEL_CLASS) @@ -24,8 +28,13 @@ def create(params = {}) # Create and verify an Address in one call. def create_and_verify(params = {}) - wrapped_params = {} - wrapped_params[:address] = params + address = params.reject { |k, _| [:verify_carrier].include?(k) } + + wrapped_params = { address: address } + + if params[:verify_carrier] + wrapped_params[:verify_carrier] = params[:verify_carrier] + end response = @client.make_request(:post, 'addresses/create_and_verify', wrapped_params) diff --git a/spec/address_spec.rb b/spec/address_spec.rb index c27912d4..463d7aef 100644 --- a/spec/address_spec.rb +++ b/spec/address_spec.rb @@ -73,6 +73,19 @@ expect(address).to be_an_instance_of(EasyPost::Models::Address) expect(address.verifications.delivery.success).to be false end + + it 'creates an address with verify_carrier param' do + address_data = Fixture.incorrect_address + + address_data[:verify] = true + address_data[:verify_carrier] = 'UPS' + address = client.address.create(address_data) + + expect(address).to be_an_instance_of(EasyPost::Models::Address) + + expect(address.verifications.delivery.errors[0].message).to eq('Address not found') + expect(address.verifications.zip4.errors[0].message).to eq('Address not found') + end end describe '.retrieve' do @@ -143,6 +156,18 @@ rescue EasyPost::Errors::InvalidRequestError => e expect(e.message).to eq('Unable to verify address.') end + + it 'creates and verifies an address with verify_carrier param' do + address_data = Fixture.incorrect_address + + address_data[:verify_carrier] = 'UPS' + address = client.address.create_and_verify(address_data) + + expect(address).to be_an_instance_of(EasyPost::Models::Address) + + expect(address.verifications.delivery.errors[0].message).to eq('Address not found') + expect(address.verifications.zip4.errors[0].message).to eq('Address not found') + end end describe '.verify' do diff --git a/spec/cassettes/address/EasyPost_Services_Address_address_service_creates_an_address_with_verify_carrier_param.yml b/spec/cassettes/address/EasyPost_Services_Address_address_service_creates_an_address_with_verify_carrier_param.yml new file mode 100644 index 00000000..14e84735 --- /dev/null +++ b/spec/cassettes/address/EasyPost_Services_Address_address_service_creates_an_address_with_verify_carrier_param.yml @@ -0,0 +1,72 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.easypost.com/v2/addresses + body: + encoding: UTF-8 + string: '{"company":"EasyPost","street1":"000 unknown street","city":"Not A + City","state":"ZZ","zip":"00001","country":"US","email":"test@example.com","phone":"5555555555","verify":true,"verify_carrier":"UPS"}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: "" + Host: + - api.easypost.com + Content-Type: + - application/json + Authorization: "" + response: + status: + code: 201 + message: Created + headers: + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + X-Ep-Request-Uuid: + - bcd43724690e3509e786ab9902a3e08b + Cache-Control: + - private, no-cache, no-store + Pragma: + - no-cache + Expires: + - '0' + Location: + - "/api/v2/addresses/adr_6b9db349bc0411f0a4e8ac1f6bc539aa" + Content-Type: + - application/json; charset=utf-8 + X-Runtime: + - '0.397989' + Transfer-Encoding: + - chunked + X-Node: + - bigweb54nuq + X-Version-Label: + - easypost-202511071655-85836cab32-master + X-Backend: + - easypost + X-Proxied: + - extlb2nuq cbbd141214 + - intlb3nuq c0061e0a2e + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"id":"adr_6b9db349bc0411f0a4e8ac1f6bc539aa","object":"Address","created_at":"2025-11-07T18:06:01Z","updated_at":"2025-11-07T18:06:01Z","name":null,"company":"EASYPOST","street1":"000 + UNKNOWN STREET","street2":"","city":"NOT A CITY","state":"ZZ","zip":"00001","country":"US","phone":"","email":"","mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{"zip4":{"success":true,"errors":[{"code":"E.ADDRESS.NOT_FOUND","field":"address","message":"Address + not found","suggestion":null}],"details":null},"delivery":{"success":true,"errors":[{"code":"E.ADDRESS.NOT_FOUND","field":"address","message":"Address + not found","suggestion":null}],"details":{"latitude":null,"longitude":null,"time_zone":null}},"verify_carrier":"ups"}}' + recorded_at: Fri, 07 Nov 2025 18:06:01 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/cassettes/address/EasyPost_Services_Address_create_and_verify_creates_and_verifies_an_address_with_verify_carrier_param.yml b/spec/cassettes/address/EasyPost_Services_Address_create_and_verify_creates_and_verifies_an_address_with_verify_carrier_param.yml new file mode 100644 index 00000000..56506638 --- /dev/null +++ b/spec/cassettes/address/EasyPost_Services_Address_create_and_verify_creates_and_verifies_an_address_with_verify_carrier_param.yml @@ -0,0 +1,72 @@ +--- +http_interactions: +- request: + method: post + uri: https://api.easypost.com/v2/addresses/create_and_verify + body: + encoding: UTF-8 + string: '{"address":{"company":"EasyPost","street1":"000 unknown street","city":"Not + A City","state":"ZZ","zip":"00001","country":"US","email":"test@example.com","phone":"5555555555"},"verify_carrier":"UPS"}' + headers: + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: "" + Host: + - api.easypost.com + Content-Type: + - application/json + Authorization: "" + response: + status: + code: 200 + message: OK + headers: + X-Frame-Options: + - SAMEORIGIN + X-Xss-Protection: + - 1; mode=block + X-Content-Type-Options: + - nosniff + X-Download-Options: + - noopen + X-Permitted-Cross-Domain-Policies: + - none + Referrer-Policy: + - strict-origin-when-cross-origin + X-Ep-Request-Uuid: + - bcd43720690e350ae786ab9b02a3e16c + Cache-Control: + - private, no-cache, no-store + Pragma: + - no-cache + Expires: + - '0' + Location: + - "/api/v2/addresses/adr_6c353670bc0411f0a5d5ac1f6bc539ae" + Content-Type: + - application/json; charset=utf-8 + X-Runtime: + - '0.774426' + Transfer-Encoding: + - chunked + X-Node: + - bigweb36nuq + X-Version-Label: + - easypost-202511071655-85836cab32-master + X-Backend: + - easypost + X-Proxied: + - extlb2nuq cbbd141214 + - intlb3nuq c0061e0a2e + Strict-Transport-Security: + - max-age=31536000; includeSubDomains; preload + body: + encoding: UTF-8 + string: '{"address":{"id":"adr_6c353670bc0411f0a5d5ac1f6bc539ae","object":"Address","created_at":"2025-11-07T18:06:02Z","updated_at":"2025-11-07T18:06:02Z","name":null,"company":"EASYPOST","street1":"000 + UNKNOWN STREET","street2":"","city":"NOT A CITY","state":"ZZ","zip":"00001","country":"US","phone":"","email":"","mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{"zip4":{"success":true,"errors":[{"code":"E.ADDRESS.NOT_FOUND","field":"address","message":"Address + not found","suggestion":null}],"details":null},"delivery":{"success":true,"errors":[{"code":"E.ADDRESS.NOT_FOUND","field":"address","message":"Address + not found","suggestion":null}],"details":{"latitude":null,"longitude":null,"time_zone":null}},"verify_carrier":"ups"}}}' + recorded_at: Fri, 07 Nov 2025 18:06:02 GMT +recorded_with: VCR 6.3.1