easypost 4.13.0 → 5.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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +22 -1
- data/.gitignore +9 -11
- data/.rubocop.yml +6 -1
- data/CHANGELOG.md +21 -0
- data/Makefile +1 -1
- data/README.md +45 -38
- data/UPGRADE_GUIDE.md +119 -0
- data/VERSION +1 -1
- data/easycop.yml +3 -3
- data/easypost.gemspec +12 -10
- data/lib/easypost/client.rb +129 -0
- data/lib/easypost/connection.rb +2 -4
- data/lib/easypost/constants.rb +15 -0
- data/lib/easypost/errors/api/api_error.rb +106 -0
- data/lib/easypost/errors/api/connection_error.rb +6 -0
- data/lib/easypost/errors/api/external_api_error.rb +18 -0
- data/lib/easypost/errors/api/forbidden_error.rb +6 -0
- data/lib/easypost/errors/api/gateway_timeout_error.rb +6 -0
- data/lib/easypost/errors/api/internal_server_error.rb +6 -0
- data/lib/easypost/errors/api/invalid_request_error.rb +6 -0
- data/lib/easypost/errors/api/method_not_allowed_error.rb +6 -0
- data/lib/easypost/errors/api/not_found_error.rb +6 -0
- data/lib/easypost/errors/api/payment_error.rb +6 -0
- data/lib/easypost/errors/api/proxy_error.rb +6 -0
- data/lib/easypost/errors/api/rate_limit_error.rb +6 -0
- data/lib/easypost/errors/api/redirect_error.rb +6 -0
- data/lib/easypost/errors/api/retry_error.rb +6 -0
- data/lib/easypost/errors/api/service_unavailable_error.rb +6 -0
- data/lib/easypost/errors/api/ssl_error.rb +6 -0
- data/lib/easypost/errors/api/timeout_error.rb +6 -0
- data/lib/easypost/errors/api/unauthorized_error.rb +6 -0
- data/lib/easypost/errors/api/unknown_api_error.rb +6 -0
- data/lib/easypost/errors/easy_post_error.rb +7 -0
- data/lib/easypost/errors/end_of_pagination_error.rb +7 -0
- data/lib/easypost/errors/filtering_error.rb +4 -0
- data/lib/easypost/errors/invalid_object_error.rb +4 -0
- data/lib/easypost/errors/invalid_parameter_error.rb +11 -0
- data/lib/easypost/errors/missing_parameter_error.rb +9 -0
- data/lib/easypost/errors/signature_verification_error.rb +4 -0
- data/lib/easypost/errors.rb +31 -0
- data/lib/easypost/http_client.rb +62 -0
- data/lib/easypost/internal_utilities.rb +66 -0
- data/lib/easypost/models/address.rb +5 -0
- data/lib/easypost/models/api_key.rb +5 -0
- data/lib/easypost/models/base.rb +58 -0
- data/lib/easypost/models/batch.rb +5 -0
- data/lib/easypost/models/brand.rb +5 -0
- data/lib/easypost/{carbon_offset.rb → models/carbon_offset.rb} +1 -1
- data/lib/easypost/models/carrier_account.rb +5 -0
- data/lib/easypost/models/customs_info.rb +5 -0
- data/lib/easypost/models/customs_item.rb +5 -0
- data/lib/easypost/models/end_shipper.rb +5 -0
- data/lib/easypost/models/error.rb +21 -0
- data/lib/easypost/models/event.rb +5 -0
- data/lib/easypost/models/insurance.rb +6 -0
- data/lib/easypost/models/order.rb +9 -0
- data/lib/easypost/models/parcel.rb +5 -0
- data/lib/easypost/{payload.rb → models/payload.rb} +1 -1
- data/lib/easypost/models/payment_method.rb +5 -0
- data/lib/easypost/models/pickup.rb +9 -0
- data/lib/easypost/{pickup_rate.rb → models/pickup_rate.rb} +1 -1
- data/lib/easypost/{postage_label.rb → models/postage_label.rb} +1 -1
- data/lib/easypost/models/rate.rb +5 -0
- data/lib/easypost/models/referral.rb +5 -0
- data/lib/easypost/models/refund.rb +5 -0
- data/lib/easypost/models/report.rb +5 -0
- data/lib/easypost/models/scan_form.rb +6 -0
- data/lib/easypost/models/shipment.rb +10 -0
- data/lib/easypost/{tax_identifier.rb → models/tax_identifier.rb} +1 -1
- data/lib/easypost/models/tracker.rb +5 -0
- data/lib/easypost/models/user.rb +5 -0
- data/lib/easypost/models/webhook.rb +6 -0
- data/lib/easypost/models.rb +35 -0
- data/lib/easypost/services/address.rb +50 -0
- data/lib/easypost/services/api_key.rb +8 -0
- data/lib/easypost/services/base.rb +27 -0
- data/lib/easypost/services/batch.rb +53 -0
- data/lib/easypost/services/beta_rate.rb +12 -0
- data/lib/easypost/services/beta_referral_customer.rb +40 -0
- data/lib/easypost/services/billing.rb +75 -0
- data/lib/easypost/services/carrier_account.rb +44 -0
- data/lib/easypost/services/carrier_metadata.rb +22 -0
- data/lib/easypost/services/customs_info.rb +15 -0
- data/lib/easypost/services/customs_item.rb +15 -0
- data/lib/easypost/services/end_shipper.rb +31 -0
- data/lib/easypost/services/event.rb +32 -0
- data/lib/easypost/services/insurance.rb +26 -0
- data/lib/easypost/services/order.rb +30 -0
- data/lib/easypost/services/parcel.rb +16 -0
- data/lib/easypost/services/pickup.rb +40 -0
- data/lib/easypost/services/rate.rb +8 -0
- data/lib/easypost/services/referral_customer.rb +103 -0
- data/lib/easypost/services/refund.rb +26 -0
- data/lib/easypost/services/report.rb +42 -0
- data/lib/easypost/services/scan_form.rb +25 -0
- data/lib/easypost/services/shipment.rb +106 -0
- data/lib/easypost/services/tracker.rb +38 -0
- data/lib/easypost/services/user.rb +66 -0
- data/lib/easypost/services/webhook.rb +34 -0
- data/lib/easypost/services.rb +32 -0
- data/lib/easypost/util.rb +80 -187
- data/lib/easypost/utilities/constants.rb +5 -0
- data/lib/easypost/utilities/json.rb +23 -0
- data/lib/easypost/utilities/static_mapper.rb +73 -0
- data/lib/easypost/utilities/system.rb +36 -0
- data/lib/easypost.rb +12 -138
- metadata +147 -64
- data/lib/easypost/address.rb +0 -55
- data/lib/easypost/api_key.rb +0 -5
- data/lib/easypost/batch.rb +0 -52
- data/lib/easypost/beta/end_shipper.rb +0 -44
- data/lib/easypost/beta/payment_refund.rb +0 -5
- data/lib/easypost/beta/rate.rb +0 -14
- data/lib/easypost/beta/referral.rb +0 -158
- data/lib/easypost/beta.rb +0 -8
- data/lib/easypost/billing.rb +0 -72
- data/lib/easypost/brand.rb +0 -13
- data/lib/easypost/carrier_account.rb +0 -26
- data/lib/easypost/carrier_type.rb +0 -5
- data/lib/easypost/customs_info.rb +0 -9
- data/lib/easypost/customs_item.rb +0 -9
- data/lib/easypost/end_shipper.rb +0 -26
- data/lib/easypost/error.rb +0 -32
- data/lib/easypost/event.rb +0 -38
- data/lib/easypost/insurance.rb +0 -20
- data/lib/easypost/object.rb +0 -171
- data/lib/easypost/order.rb +0 -37
- data/lib/easypost/parcel.rb +0 -9
- data/lib/easypost/payment_method.rb +0 -12
- data/lib/easypost/pickup.rb +0 -47
- data/lib/easypost/rate.rb +0 -9
- data/lib/easypost/referral.rb +0 -117
- data/lib/easypost/refund.rb +0 -19
- data/lib/easypost/report.rb +0 -44
- data/lib/easypost/resource.rb +0 -124
- data/lib/easypost/scan_form.rb +0 -26
- data/lib/easypost/shipment.rb +0 -186
- data/lib/easypost/tracker.rb +0 -43
- data/lib/easypost/user.rb +0 -74
- data/lib/easypost/webhook.rb +0 -57
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Pickup < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Pickup
|
|
5
|
+
|
|
6
|
+
# Create a Pickup object
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { pickup: params }
|
|
9
|
+
@client.make_request(:post, 'pickups', MODEL_CLASS, wrapped_params)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Retrieve a Pickup object
|
|
13
|
+
def retrieve(id)
|
|
14
|
+
@client.make_request(:get, "pickups/#{id}", MODEL_CLASS)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Retrieve all Pickup objects
|
|
18
|
+
def all(params = {})
|
|
19
|
+
@client.make_request(:get, 'pickups', MODEL_CLASS, params)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Buy a Pickup
|
|
23
|
+
def buy(id, params = {})
|
|
24
|
+
if params.instance_of?(EasyPost::Models::PickupRate)
|
|
25
|
+
params = { carrier: params[:carrier], service: params[:service] }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
@client.make_request(:post, "pickups/#{id}/buy", MODEL_CLASS, params)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Cancel a Pickup
|
|
32
|
+
def cancel(id, params = {})
|
|
33
|
+
@client.make_request(:post, "pickups/#{id}/cancel", MODEL_CLASS, params)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Get next page of Pickups
|
|
37
|
+
def get_next_page(collection, page_size = nil)
|
|
38
|
+
get_next_page_helper(collection, collection.pickups, 'pickups', MODEL_CLASS, page_size)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::ReferralCustomer < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::User
|
|
5
|
+
|
|
6
|
+
# Create a referral customer. This function requires the Partner User's API key.
|
|
7
|
+
def create(params = {})
|
|
8
|
+
@client.make_request(:post, 'referral_customers', MODEL_CLASS, { user: params })
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Update a referral customer. This function requires the Partner User's API key.
|
|
12
|
+
def update_email(user_id, email)
|
|
13
|
+
wrapped_params = {
|
|
14
|
+
user: {
|
|
15
|
+
email: email,
|
|
16
|
+
},
|
|
17
|
+
}
|
|
18
|
+
@client.make_request(:put, "referral_customers/#{user_id}", MODEL_CLASS, wrapped_params)
|
|
19
|
+
|
|
20
|
+
# return true if API succeeds, else an error is throw if it fails.
|
|
21
|
+
true
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Retrieve a list of referral customers. This function requires the Partner User's API key.
|
|
25
|
+
def all(params = {})
|
|
26
|
+
@client.make_request(:get, 'referral_customers', MODEL_CLASS, params)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Get the next page of referral customers.
|
|
30
|
+
def get_next_page(collection, page_size = nil)
|
|
31
|
+
get_next_page_helper(collection, collection.referral_customers, 'referral_customers', MODEL_CLASS, page_size)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Add credit card to a referral customer. This function requires the ReferralCustomer Customer's API key.
|
|
35
|
+
def add_credit_card(referral_api_key, number, expiration_month, expiration_year, cvc, priority = 'primary')
|
|
36
|
+
easypost_stripe_api_key = retrieve_easypost_stripe_api_key
|
|
37
|
+
|
|
38
|
+
begin
|
|
39
|
+
stripe_credit_card_token = create_stripe_token(
|
|
40
|
+
number,
|
|
41
|
+
expiration_month,
|
|
42
|
+
expiration_year,
|
|
43
|
+
cvc,
|
|
44
|
+
easypost_stripe_api_key,
|
|
45
|
+
)
|
|
46
|
+
rescue StandardError
|
|
47
|
+
raise EasyPost::Errors::ExternalApiError.new(EasyPost::Constants::STRIPE_CARD_CREATE_FAILED)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
create_easypost_credit_card(referral_api_key, stripe_credit_card_token, priority)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
# Retrieve EasyPost's Stripe public API key.
|
|
56
|
+
def retrieve_easypost_stripe_api_key
|
|
57
|
+
response = @client.make_request(:get, 'partners/stripe_public_key', EasyPost::Models::EasyPostObject, nil, 'beta')
|
|
58
|
+
response['public_key']
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Get credit card token from Stripe.
|
|
62
|
+
def create_stripe_token(number, expiration_month, expiration_year,
|
|
63
|
+
cvc, easypost_stripe_token)
|
|
64
|
+
headers = {
|
|
65
|
+
# This Stripe endpoint only accepts URL form encoded bodies.
|
|
66
|
+
Authorization: "Bearer #{easypost_stripe_token}",
|
|
67
|
+
'Content-type': 'application/x-www-form-urlencoded',
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
credit_card_hash = {
|
|
71
|
+
card: {
|
|
72
|
+
number: number,
|
|
73
|
+
exp_month: expiration_month,
|
|
74
|
+
exp_year: expiration_year,
|
|
75
|
+
cvc: cvc,
|
|
76
|
+
},
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
form_encoded_params = EasyPost::InternalUtilities.form_encode_params(credit_card_hash)
|
|
80
|
+
|
|
81
|
+
uri = URI.parse('https://api.stripe.com/v1/tokens')
|
|
82
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
83
|
+
http.use_ssl = true
|
|
84
|
+
request = Net::HTTP::Post.new(uri.request_uri, headers)
|
|
85
|
+
query = URI.encode_www_form(form_encoded_params)
|
|
86
|
+
|
|
87
|
+
response = http.request(request, query)
|
|
88
|
+
response_json = JSON.parse(response.body)
|
|
89
|
+
response_json['id']
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Submit Stripe credit card token to EasyPost.
|
|
93
|
+
def create_easypost_credit_card(referral_api_key, stripe_object_id, priority = 'primary')
|
|
94
|
+
wrapped_params = {
|
|
95
|
+
credit_card: {
|
|
96
|
+
stripe_object_id: stripe_object_id,
|
|
97
|
+
priority: priority,
|
|
98
|
+
},
|
|
99
|
+
}
|
|
100
|
+
referral_client = EasyPost::Client.new(api_key: referral_api_key)
|
|
101
|
+
referral_client.make_request(:post, 'credit_cards', EasyPost::Models::EasyPostObject, wrapped_params, 'beta')
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Refund < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Refund
|
|
5
|
+
|
|
6
|
+
# Create a Refund object
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { refund: params }
|
|
9
|
+
@client.make_request(:post, 'refunds', MODEL_CLASS, wrapped_params)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Retrieve a Refund object
|
|
13
|
+
def retrieve(id)
|
|
14
|
+
@client.make_request(:get, "refunds/#{id}", MODEL_CLASS)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Retrieve all Refund objects
|
|
18
|
+
def all(params = {})
|
|
19
|
+
@client.make_request(:get, 'refunds', MODEL_CLASS, params)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Get the next page of refunds
|
|
23
|
+
def get_next_page(collection, page_size = nil)
|
|
24
|
+
get_next_page_helper(collection, collection.refunds, 'refunds', MODEL_CLASS, page_size)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Report < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Report
|
|
5
|
+
|
|
6
|
+
# Create a Report
|
|
7
|
+
def create(params = {})
|
|
8
|
+
unless params[:type]
|
|
9
|
+
raise ArgumentError, "Missing 'type' parameter in params" # TODO: replace the error in the error-handling overhaul PR
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
type = params.delete(:type)
|
|
13
|
+
url = "reports/#{type}"
|
|
14
|
+
|
|
15
|
+
@client.make_request(:post, url, MODEL_CLASS, params)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieve a Report
|
|
19
|
+
def retrieve(id)
|
|
20
|
+
@client.make_request(:get, "reports/#{id}", MODEL_CLASS)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Retrieve all Report objects
|
|
24
|
+
def all(params = {})
|
|
25
|
+
unless params[:type]
|
|
26
|
+
raise ArgumentError, "Missing 'type' parameter in params" # TODO: replace the error in the error-handling overhaul PR
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
type = params.delete(:type)
|
|
30
|
+
url = "reports/#{type}"
|
|
31
|
+
|
|
32
|
+
response = @client.make_request(:get, url, MODEL_CLASS, params)
|
|
33
|
+
response.define_singleton_method(:type) { type }
|
|
34
|
+
response
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Get next page of Report objects
|
|
38
|
+
def get_next_page(collection, page_size = nil)
|
|
39
|
+
url = "reports/#{collection.type}"
|
|
40
|
+
get_next_page_helper(collection, collection.reports, url, MODEL_CLASS, page_size)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::ScanForm < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::ScanForm
|
|
5
|
+
|
|
6
|
+
# Create a ScanForm.
|
|
7
|
+
def create(params = {})
|
|
8
|
+
@client.make_request(:post, 'scan_forms', MODEL_CLASS, params)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Retrieve a ScanForm.
|
|
12
|
+
def retrieve(id)
|
|
13
|
+
@client.make_request(:get, "scan_forms/#{id}", MODEL_CLASS)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Retrieve a list of ScanForms
|
|
17
|
+
def all(params = {})
|
|
18
|
+
@client.make_request(:get, 'scan_forms', MODEL_CLASS, params)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Get the next page of ScanForms.
|
|
22
|
+
def get_next_page(collection, page_size = nil)
|
|
23
|
+
get_next_page_helper(collection, collection.scan_forms, 'scan_forms', MODEL_CLASS, page_size)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'set'
|
|
4
|
+
|
|
5
|
+
class EasyPost::Services::Shipment < EasyPost::Services::Service
|
|
6
|
+
MODEL_CLASS = EasyPost::Models::Shipment
|
|
7
|
+
|
|
8
|
+
# Create a Shipment.
|
|
9
|
+
def create(params = {}, with_carbon_offset = false)
|
|
10
|
+
wrapped_params = {
|
|
11
|
+
shipment: params,
|
|
12
|
+
carbon_offset: with_carbon_offset,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
@client.make_request(:post, 'shipments', MODEL_CLASS, wrapped_params)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieve a Shipment.
|
|
19
|
+
def retrieve(id)
|
|
20
|
+
@client.make_request(:get, "shipments/#{id}", MODEL_CLASS)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Retrieve a list of Shipments
|
|
24
|
+
def all(params = {})
|
|
25
|
+
response = @client.make_request(:get, 'shipments', MODEL_CLASS, params)
|
|
26
|
+
response.define_singleton_method(:purchased) { params[:purchased] }
|
|
27
|
+
response.define_singleton_method(:include_children) { params[:include_children] }
|
|
28
|
+
response
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Get the next page of shipments.
|
|
32
|
+
def get_next_page(collection, page_size = nil)
|
|
33
|
+
get_next_page_helper(collection, collection.shipments, 'shipments', MODEL_CLASS, page_size)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Regenerate the rates of a Shipment.
|
|
37
|
+
def regenerate_rates(id, with_carbon_offset = false)
|
|
38
|
+
params = { carbon_offset: with_carbon_offset }
|
|
39
|
+
|
|
40
|
+
@client.make_request(:post, "shipments/#{id}/rerate", MODEL_CLASS, params)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Get the SmartRates of a Shipment.
|
|
44
|
+
def get_smart_rates(id)
|
|
45
|
+
@client.make_request(:get, "shipments/#{id}/smartrate", MODEL_CLASS).result || []
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Buy a Shipment.
|
|
49
|
+
def buy(id, params = {}, with_carbon_offset = false, end_shipper_id = nil)
|
|
50
|
+
if params.instance_of?(EasyPost::Models::Rate)
|
|
51
|
+
params = { rate: params.clone }
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
params[:carbon_offset] = params[:with_carbon_offset] || with_carbon_offset
|
|
55
|
+
params.delete(:with_carbon_offset)
|
|
56
|
+
|
|
57
|
+
params[:end_shipper_id] = end_shipper_id if end_shipper_id
|
|
58
|
+
|
|
59
|
+
@client.make_request(:post, "shipments/#{id}/buy", MODEL_CLASS, params)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Insure a Shipment.
|
|
63
|
+
def insure(id, params = {})
|
|
64
|
+
params = { amount: params } if params.is_a?(Integer) || params.is_a?(Float)
|
|
65
|
+
|
|
66
|
+
@client.make_request(:post, "shipments/#{id}/insure", MODEL_CLASS, params)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# Refund a Shipment.
|
|
70
|
+
def refund(id, params = {})
|
|
71
|
+
@client.make_request(:post, "shipments/#{id}/refund", MODEL_CLASS, params)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# Convert the label format of a Shipment.
|
|
75
|
+
def label(id, params = {})
|
|
76
|
+
params = { file_format: params } if params.is_a?(String)
|
|
77
|
+
|
|
78
|
+
@client.make_request(:get, "shipments/#{id}/label", MODEL_CLASS, params)
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
# Get the lowest SmartRate of a Shipment.
|
|
82
|
+
def lowest_smart_rate(id, delivery_days, delivery_accuracy)
|
|
83
|
+
smart_rates = get_smart_rates(id)
|
|
84
|
+
EasyPost::Util.get_lowest_smart_rate(smart_rates, delivery_days, delivery_accuracy)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Generate a form for a Shipment.
|
|
88
|
+
def generate_form(id, form_type, form_options = {})
|
|
89
|
+
params = {}
|
|
90
|
+
params[:type] = form_type
|
|
91
|
+
merged_params = params.merge(form_options)
|
|
92
|
+
wrapped_params = {
|
|
93
|
+
form: merged_params,
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@client.make_request(:post, "shipments/#{id}/forms", MODEL_CLASS, wrapped_params)
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Retrieves the estimated delivery date of each Rate via SmartRate.
|
|
100
|
+
def retrieve_estimated_delivery_date(id, planned_ship_date)
|
|
101
|
+
url = "shipments/#{id}/smartrate/delivery_date"
|
|
102
|
+
params = { planned_ship_date: planned_ship_date }
|
|
103
|
+
|
|
104
|
+
@client.make_request(:get, url, MODEL_CLASS, params).rates
|
|
105
|
+
end
|
|
106
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Tracker < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Tracker
|
|
5
|
+
|
|
6
|
+
# Create a Tracker
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { tracker: params }
|
|
9
|
+
|
|
10
|
+
@client.make_request(:post, 'trackers', MODEL_CLASS, wrapped_params)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Retrieve a Tracker
|
|
14
|
+
def retrieve(id)
|
|
15
|
+
@client.make_request(:get, "trackers/#{id}", MODEL_CLASS)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Retrieve a list of Trackers
|
|
19
|
+
def all(params)
|
|
20
|
+
response = @client.make_request(:get, 'trackers', MODEL_CLASS, params)
|
|
21
|
+
response.define_singleton_method(:tracking_code) { params[:tracking_code] }
|
|
22
|
+
response.define_singleton_method(:carrier) { params[:carrier] }
|
|
23
|
+
response
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Create multiple Tracker objects in bulk.
|
|
27
|
+
def create_list(params = {})
|
|
28
|
+
wrapped_params = { 'trackers' => params }
|
|
29
|
+
|
|
30
|
+
@client.make_request(:post, 'trackers/create_list', MODEL_CLASS, wrapped_params)
|
|
31
|
+
true # This endpoint does not return a response so we return true here instead
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Get the next page of trackers.
|
|
35
|
+
def get_next_page(collection, page_size = nil)
|
|
36
|
+
get_next_page_helper(collection, collection.trackers, 'trackers', MODEL_CLASS, page_size)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::User < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::User
|
|
5
|
+
|
|
6
|
+
# Create a child User.
|
|
7
|
+
def create(params = {})
|
|
8
|
+
@client.make_request(:post, 'users', MODEL_CLASS, params)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Retrieve a user
|
|
12
|
+
def retrieve(id)
|
|
13
|
+
@client.make_request(:get, "users/#{id}", MODEL_CLASS)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Retrieve the authenticated User.
|
|
17
|
+
def retrieve_me
|
|
18
|
+
@client.make_request(:get, 'users', MODEL_CLASS)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Update a User
|
|
22
|
+
def update(id, params = {})
|
|
23
|
+
@client.make_request(:put, "users/#{id}", MODEL_CLASS, params)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Delete a User
|
|
27
|
+
def delete(id)
|
|
28
|
+
@client.make_request(:delete, "users/#{id}")
|
|
29
|
+
|
|
30
|
+
# Return true if succeeds, an error will be thrown if it fails
|
|
31
|
+
true
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# Retrieve a list of all ApiKey objects.
|
|
35
|
+
def all_api_keys
|
|
36
|
+
@client.make_request(:get, 'api_keys', EasyPost::Models::ApiKey)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Retrieve a list of ApiKey objects (works for the authenticated user or a child user).
|
|
40
|
+
def api_keys(id)
|
|
41
|
+
api_keys = all_api_keys
|
|
42
|
+
|
|
43
|
+
if api_keys.id == id
|
|
44
|
+
# This function was called on the authenticated user
|
|
45
|
+
my_api_keys = api_keys.keys
|
|
46
|
+
else
|
|
47
|
+
# This function was called on a child user (authenticated as parent, only return this child user's details).
|
|
48
|
+
my_api_keys = []
|
|
49
|
+
api_keys.children.each do |child|
|
|
50
|
+
if child.id == id
|
|
51
|
+
my_api_keys = child.keys
|
|
52
|
+
break
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
my_api_keys
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Update the Brand of a User.
|
|
61
|
+
def update_brand(id, params = {})
|
|
62
|
+
wrapped_params = { brand: params }
|
|
63
|
+
|
|
64
|
+
@client.make_request(:get, "users/#{id}/brand", EasyPost::Models::Brand, wrapped_params)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class EasyPost::Services::Webhook < EasyPost::Services::Service
|
|
4
|
+
MODEL_CLASS = EasyPost::Models::Webhook
|
|
5
|
+
|
|
6
|
+
# Create a Webhook.
|
|
7
|
+
def create(params = {})
|
|
8
|
+
wrapped_params = { webhook: params }
|
|
9
|
+
@client.make_request(:post, 'webhooks', MODEL_CLASS, wrapped_params)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Retrieve a Webhook
|
|
13
|
+
def retrieve(id)
|
|
14
|
+
@client.make_request(:get, "webhooks/#{id}", MODEL_CLASS)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Retrieve a list of Webhooks
|
|
18
|
+
def all(params = {})
|
|
19
|
+
@client.make_request(:get, 'webhooks', MODEL_CLASS, params)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Update a Webhook.
|
|
23
|
+
def update(id, params = {})
|
|
24
|
+
@client.make_request(:patch, "webhooks/#{id}", MODEL_CLASS, params)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Delete a Webhook.
|
|
28
|
+
def delete(id)
|
|
29
|
+
@client.make_request(:delete, "webhooks/#{id}")
|
|
30
|
+
|
|
31
|
+
# Return true if succeeds, an error will be thrown if it fails
|
|
32
|
+
true
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module EasyPost::Services
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
require_relative 'models'
|
|
7
|
+
require_relative 'services/base' # Must be imported first before the rest of child services
|
|
8
|
+
require_relative 'services/address'
|
|
9
|
+
require_relative 'services/api_key'
|
|
10
|
+
require_relative 'services/batch'
|
|
11
|
+
require_relative 'services/beta_rate'
|
|
12
|
+
require_relative 'services/beta_referral_customer'
|
|
13
|
+
require_relative 'services/billing'
|
|
14
|
+
require_relative 'services/carrier_account'
|
|
15
|
+
require_relative 'services/carrier_metadata'
|
|
16
|
+
require_relative 'services/customs_info'
|
|
17
|
+
require_relative 'services/customs_item'
|
|
18
|
+
require_relative 'services/end_shipper'
|
|
19
|
+
require_relative 'services/event'
|
|
20
|
+
require_relative 'services/insurance'
|
|
21
|
+
require_relative 'services/order'
|
|
22
|
+
require_relative 'services/parcel'
|
|
23
|
+
require_relative 'services/pickup'
|
|
24
|
+
require_relative 'services/rate'
|
|
25
|
+
require_relative 'services/referral_customer'
|
|
26
|
+
require_relative 'services/refund'
|
|
27
|
+
require_relative 'services/report'
|
|
28
|
+
require_relative 'services/scan_form'
|
|
29
|
+
require_relative 'services/shipment'
|
|
30
|
+
require_relative 'services/tracker'
|
|
31
|
+
require_relative 'services/user'
|
|
32
|
+
require_relative 'services/webhook'
|