Skip to content

Commit 6aa713a

Browse files
authored
Merge pull request #256 from EasyPost/metadata
feat: add carrier metadata beta endpoint
2 parents ef787b4 + 063a83c commit 6aa713a

File tree

5 files changed

+635
-0
lines changed

5 files changed

+635
-0
lines changed

lib/easypost/beta.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
module EasyPost::Beta
44
end
55

6+
require_relative 'beta/carrier_metadata'
67
require_relative 'beta/end_shipper'
78
require_relative 'beta/referral'
89
require_relative 'beta/rate'
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# frozen_string_literal: true
2+
3+
# A CarrierMetadata object contains all the selected metadata for all selected carriers.
4+
class EasyPost::Beta::CarrierMetadata < EasyPost::Resource
5+
# Retrieve metadata for carrier(s).
6+
def self.retrieve_carrier_metadata(carriers = [], types = [], api_key = nil)
7+
path = '/beta/metadata?'
8+
9+
params = {}
10+
11+
if carriers.length.positive?
12+
params[:carriers] = carriers.join(',')
13+
end
14+
15+
if types.length.positive?
16+
params[:types] = types.join(',')
17+
end
18+
19+
# urlencoded params
20+
path += URI.encode_www_form(params)
21+
22+
response = EasyPost.make_request(:get, path, api_key, params)
23+
EasyPost::Util.convert_to_easypost_object(response['carriers'] || [], api_key)
24+
end
25+
end

spec/beta/carrier_metadata_spec.rb

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# frozen_string_literal: true
2+
3+
require 'spec_helper'
4+
5+
describe EasyPost::Beta::CarrierMetadata do
6+
describe '.retrieve_carrier_metadata' do
7+
it 'retrieve metadata for all carriers' do
8+
metadata = described_class.retrieve_carrier_metadata
9+
10+
expect(metadata).to be_an_instance_of(Array)
11+
12+
expect(metadata.find { |carrier| carrier.name == 'usps' }).not_to be_nil
13+
expect(metadata.find { |carrier| carrier.name == 'fedex' }).not_to be_nil
14+
end
15+
16+
it 'retrieve metadata for a single carrier' do
17+
carrier = 'usps'
18+
types = %w[service_levels predefined_packages]
19+
20+
metadata = described_class.retrieve_carrier_metadata(['usps'], types)
21+
22+
expect(metadata).to be_an_instance_of(Array)
23+
24+
first_entry = metadata.first
25+
26+
# Assert we only have one carrier, and it's the one we requested
27+
expect(metadata.length).to eq(1)
28+
expect(first_entry[:name]).to eq(carrier)
29+
30+
# Assert we have the requested types
31+
expect(first_entry).to have_attributes(service_levels: Array, predefined_packages: Array)
32+
end
33+
end
34+
end

spec/cassettes/beta/carrier_metadata/EasyPost_Beta_CarrierMetadata_retrieve_carrier_metadata_retrieve_metadata_for_a_single_carrier.yml

Lines changed: 77 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)