easypost 4.13.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# The Pickup object allows you to schedule a pickup from your carrier from your customer's residence or place of business.
|
4
|
+
class EasyPost::Models::Pickup < EasyPost::Models::EasyPostObject
|
5
|
+
# Get the lowest rate of a Pickup (can exclude by having `'!'` as the first element of your optional filter lists).
|
6
|
+
def lowest_rate(carriers = [], services = [])
|
7
|
+
EasyPost::Util.get_lowest_object_rate(self, carriers, services, 'pickup_rates')
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# A ScanForm can be created to speed up and simplify the carrier pickup process. The ScanForm is one document that can
|
4
|
+
# be scanned to mark all included tracking codes as "Accepted for Shipment" by the carrier.
|
5
|
+
class EasyPost::Models::ScanForm < EasyPost::Models::EasyPostObject
|
6
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# The workhorse of the EasyPost API, a Shipment is made up of a "to" and "from" Address, the Parcel
|
4
|
+
# being shipped, and any customs forms required for international deliveries.
|
5
|
+
class EasyPost::Models::Shipment < EasyPost::Models::EasyPostObject
|
6
|
+
# Get the lowest rate of a Shipment (can exclude by having `'!'` as the first element of your optional filter lists).
|
7
|
+
def lowest_rate(carriers = [], services = [])
|
8
|
+
EasyPost::Util.get_lowest_object_rate(self, carriers, services)
|
9
|
+
end
|
10
|
+
end
|
@@ -2,5 +2,5 @@
|
|
2
2
|
|
3
3
|
# TaxIdentifiers are identifying numbers or IDs that are used to charge a specific party when
|
4
4
|
# dealing with the importing or exporting of good across international borders.
|
5
|
-
class EasyPost::TaxIdentifier < EasyPost::
|
5
|
+
class EasyPost::Models::TaxIdentifier < EasyPost::Models::EasyPostObject
|
6
6
|
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Each Webhook contains the url which EasyPost will notify whenever an object in our system updates. Several types of objects are processed
|
4
|
+
# asynchronously in the EasyPost system, so whenever an object updates, an Event is sent via HTTP POST to each configured webhook URL.
|
5
|
+
class EasyPost::Models::Webhook < EasyPost::Models::EasyPostObject
|
6
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module EasyPost::Models
|
4
|
+
end
|
5
|
+
|
6
|
+
require_relative 'models/base' # Must be imported first before the rest of child models
|
7
|
+
require_relative 'models/address'
|
8
|
+
require_relative 'models/api_key'
|
9
|
+
require_relative 'models/batch'
|
10
|
+
require_relative 'models/brand'
|
11
|
+
require_relative 'models/carbon_offset'
|
12
|
+
require_relative 'models/carrier_account'
|
13
|
+
require_relative 'models/customs_info'
|
14
|
+
require_relative 'models/customs_item'
|
15
|
+
require_relative 'models/end_shipper'
|
16
|
+
require_relative 'models/error'
|
17
|
+
require_relative 'models/event'
|
18
|
+
require_relative 'models/insurance'
|
19
|
+
require_relative 'models/order'
|
20
|
+
require_relative 'models/parcel'
|
21
|
+
require_relative 'models/payload'
|
22
|
+
require_relative 'models/payment_method'
|
23
|
+
require_relative 'models/pickup_rate'
|
24
|
+
require_relative 'models/pickup'
|
25
|
+
require_relative 'models/postage_label'
|
26
|
+
require_relative 'models/rate'
|
27
|
+
require_relative 'models/referral'
|
28
|
+
require_relative 'models/refund'
|
29
|
+
require_relative 'models/report'
|
30
|
+
require_relative 'models/scan_form'
|
31
|
+
require_relative 'models/shipment'
|
32
|
+
require_relative 'models/tax_identifier'
|
33
|
+
require_relative 'models/tracker'
|
34
|
+
require_relative 'models/user'
|
35
|
+
require_relative 'models/webhook'
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::Address < EasyPost::Services::Service
|
4
|
+
MODEL_CLASS = EasyPost::Models::Address
|
5
|
+
|
6
|
+
# Create an address.
|
7
|
+
def create(params = {})
|
8
|
+
address = params.reject { |k, _| [:verify, :verify_strict].include?(k) }
|
9
|
+
|
10
|
+
wrapped_params = { address: address }
|
11
|
+
|
12
|
+
if params[:verify]
|
13
|
+
wrapped_params[:verify] = params[:verify]
|
14
|
+
end
|
15
|
+
|
16
|
+
if params[:verify_strict]
|
17
|
+
wrapped_params[:verify_strict] = params[:verify_strict]
|
18
|
+
end
|
19
|
+
|
20
|
+
@client.make_request(:post, 'addresses', MODEL_CLASS, params)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Create and verify an Address in one call.
|
24
|
+
def create_and_verify(params = {})
|
25
|
+
wrapped_params = {}
|
26
|
+
wrapped_params[:address] = params
|
27
|
+
|
28
|
+
@client.make_request(:post, 'addresses/create_and_verify', MODEL_CLASS, wrapped_params).address
|
29
|
+
end
|
30
|
+
|
31
|
+
# Verify an Address.
|
32
|
+
def verify(id)
|
33
|
+
@client.make_request(:get, "addresses/#{id}/verify", MODEL_CLASS).address
|
34
|
+
end
|
35
|
+
|
36
|
+
# Retrieve an Address.
|
37
|
+
def retrieve(id)
|
38
|
+
@client.make_request(:get, "addresses/#{id}", MODEL_CLASS)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Retrieve all Addresses.
|
42
|
+
def all(filters = {})
|
43
|
+
@client.make_request(:get, 'addresses', MODEL_CLASS, filters)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Get the next page of addresses.
|
47
|
+
def get_next_page(collection, page_size = nil)
|
48
|
+
get_next_page_helper(collection, collection.addresses, 'addresses', MODEL_CLASS, page_size)
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# The base class for all services in the library.
|
4
|
+
class EasyPost::Services::Service
|
5
|
+
def initialize(client)
|
6
|
+
@client = client
|
7
|
+
end
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
# Get next page of an object collection
|
12
|
+
def get_next_page_helper(collection, current_page_items, endpoint, cls, page_size = nil)
|
13
|
+
has_more = collection.has_more || false
|
14
|
+
unless !has_more || current_page_items.nil? || current_page_items.empty?
|
15
|
+
params = {}
|
16
|
+
params[:before_id] = current_page_items.last.id
|
17
|
+
unless page_size.nil?
|
18
|
+
params[:page_size] = page_size
|
19
|
+
end
|
20
|
+
|
21
|
+
@client.make_request(:get, endpoint, cls, params)
|
22
|
+
end
|
23
|
+
|
24
|
+
# issue with getting the next page
|
25
|
+
raise EasyPost::Errors::EndOfPaginationError.new
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::Batch < EasyPost::Services::Service
|
4
|
+
MODEL_CLASS = EasyPost::Models::Batch
|
5
|
+
|
6
|
+
# Create a Batch.
|
7
|
+
def create(params = {})
|
8
|
+
wrapped_params = { batch: params }
|
9
|
+
|
10
|
+
@client.make_request(:post, 'batches', MODEL_CLASS, wrapped_params)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Create and buy a batch in one call.
|
14
|
+
def create_and_buy(params = {})
|
15
|
+
wrapped_params = { batch: params }
|
16
|
+
|
17
|
+
@client.make_request(:post, 'batches/create_and_buy', MODEL_CLASS, wrapped_params)
|
18
|
+
end
|
19
|
+
|
20
|
+
def all(params = {})
|
21
|
+
@client.make_request(:get, 'batches', EasyPost::Models::ApiKey, params)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Retrieve a Batch
|
25
|
+
def retrieve(id)
|
26
|
+
@client.make_request(:get, "batches/#{id}", MODEL_CLASS)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Buy a Batch.
|
30
|
+
def buy(id, params = {})
|
31
|
+
@client.make_request(:post, "batches/#{id}/buy", MODEL_CLASS, params)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Convert the label format of a Batch.
|
35
|
+
def label(id, params = {})
|
36
|
+
@client.make_request(:post, "batches/#{id}/label", MODEL_CLASS, params)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Remove Shipments from a Batch.
|
40
|
+
def remove_shipments(id, params = {})
|
41
|
+
@client.make_request(:post, "batches/#{id}/remove_shipments", MODEL_CLASS, params)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Add Shipments to a Batch.
|
45
|
+
def add_shipments(id, params = {})
|
46
|
+
@client.make_request(:post, "batches/#{id}/add_shipments", MODEL_CLASS, params)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Create a ScanForm for a Batch.
|
50
|
+
def create_scan_form(id, params = {})
|
51
|
+
@client.make_request(:post, "batches/#{id}/scan_form", MODEL_CLASS, params)
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::BetaRate < EasyPost::Services::Service
|
4
|
+
# Retrieve a list of stateless rates.
|
5
|
+
def retrieve_stateless_rates(params = {})
|
6
|
+
wrapped_params = {
|
7
|
+
shipment: params,
|
8
|
+
}
|
9
|
+
|
10
|
+
@client.make_request(:post, 'rates', EasyPost::Models::Rate, wrapped_params, 'beta').rates
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::BetaReferralCustomer < EasyPost::Services::Service
|
4
|
+
# Add a Stripe payment method to a ReferralCustomer Customer. This function requires the ReferralCustomer Customer's API key.
|
5
|
+
def add_payment_method(stripe_customer_id, payment_method_reference, priority = 'primary')
|
6
|
+
wrapped_params = {
|
7
|
+
payment_method: {
|
8
|
+
stripe_customer_id: stripe_customer_id,
|
9
|
+
payment_method_reference: payment_method_reference,
|
10
|
+
priority: priority.downcase,
|
11
|
+
},
|
12
|
+
}
|
13
|
+
@client.make_request(
|
14
|
+
:post,
|
15
|
+
'referral_customers/payment_method',
|
16
|
+
EasyPost::Models::EasyPostObject,
|
17
|
+
wrapped_params,
|
18
|
+
'beta',
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Refund a ReferralCustomer Customer's wallet by a specified amount. Refund will be issued to the user's original payment method.
|
23
|
+
# This function requires the ReferralCustomer Customer's API key.
|
24
|
+
def refund_by_amount(amount)
|
25
|
+
params = {
|
26
|
+
refund_amount: amount,
|
27
|
+
}
|
28
|
+
@client.make_request(:post, 'referral_customers/refunds', EasyPost::Models::EasyPostObject, params, 'beta')
|
29
|
+
# noinspection RubyMismatchedReturnType
|
30
|
+
end
|
31
|
+
|
32
|
+
# Refund a ReferralCustomer Customer's wallet for a specified payment log entry. Refund will be issued to the user's original payment method.
|
33
|
+
# This function requires the ReferralCustomer Customer's API key.
|
34
|
+
def refund_by_payment_log(payment_log_id)
|
35
|
+
params = {
|
36
|
+
payment_log_id: payment_log_id,
|
37
|
+
}
|
38
|
+
@client.make_request(:post, 'referral_customers/refunds', EasyPost::Models::EasyPostObject, params, 'beta')
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'easypost/constants'
|
4
|
+
|
5
|
+
class EasyPost::Services::Billing < EasyPost::Services::Service
|
6
|
+
# Get payment method info (type of the payment method and ID of the payment method)
|
7
|
+
def self.get_payment_method_info(priority)
|
8
|
+
payment_methods = EasyPost::Services::Billing.retrieve_payment_methods
|
9
|
+
payment_method_map = {
|
10
|
+
'primary' => 'primary_payment_method',
|
11
|
+
'secondary' => 'secondary_payment_method',
|
12
|
+
}
|
13
|
+
|
14
|
+
payment_method_to_use = payment_method_map[priority]
|
15
|
+
|
16
|
+
error_string = EasyPost::Constants::INVALID_PAYMENT_METHOD
|
17
|
+
suggestion = "Please use a valid payment method: #{payment_method_map.keys.join(', ')}"
|
18
|
+
if payment_methods[payment_method_to_use].nil?
|
19
|
+
raise EasyPost::Errors::InvalidParameterError.new(
|
20
|
+
error_string,
|
21
|
+
suggestion,
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
payment_method_id = payment_methods[payment_method_to_use]['id']
|
26
|
+
|
27
|
+
unless payment_method_id.nil?
|
28
|
+
if payment_method_id.start_with?('card_')
|
29
|
+
endpoint = '/v2/credit_cards'
|
30
|
+
elsif payment_method_id.start_with?('bank_')
|
31
|
+
endpoint = '/v2/bank_accounts'
|
32
|
+
else
|
33
|
+
raise EasyPost::Errors::InvalidObjectError.new(error_string)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
[endpoint, payment_method_id]
|
38
|
+
end
|
39
|
+
|
40
|
+
# Fund your EasyPost wallet by charging your primary or secondary card on file.
|
41
|
+
def fund_wallet(amount, priority = 'primary')
|
42
|
+
payment_info = EasyPost::Services::Billing.get_payment_method_info(priority.downcase)
|
43
|
+
endpoint = payment_info[0]
|
44
|
+
payment_id = payment_info[1]
|
45
|
+
|
46
|
+
wrapped_params = { amount: amount }
|
47
|
+
@client.make_request(:post, "#{endpoint}/#{payment_id}/charges", EasyPost::Models::EasyPostObject, wrapped_params)
|
48
|
+
|
49
|
+
# Return true if succeeds, an error will be thrown if it fails
|
50
|
+
true
|
51
|
+
end
|
52
|
+
|
53
|
+
# Delete a payment method.
|
54
|
+
def delete_payment_method(priority)
|
55
|
+
payment_info = EasyPost::Services::Billing.get_payment_method_info(priority.downcase)
|
56
|
+
endpoint = payment_info[0]
|
57
|
+
payment_id = payment_info[1]
|
58
|
+
|
59
|
+
@client.make_request(:delete, "#{endpoint}/#{payment_id}")
|
60
|
+
|
61
|
+
# Return true if succeeds, an error will be thrown if it fails
|
62
|
+
true
|
63
|
+
end
|
64
|
+
|
65
|
+
# Retrieve all payment methods.
|
66
|
+
def retrieve_payment_methods
|
67
|
+
response = @client.make_request(:get, '/v2/payment_methods')
|
68
|
+
|
69
|
+
if response['id'].nil?
|
70
|
+
raise EasyPost::Errors::InvalidObjectError.new(EasyPost::Constants::NO_PAYMENT_METHODS)
|
71
|
+
end
|
72
|
+
|
73
|
+
response
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::CarrierAccount < EasyPost::Services::Service
|
4
|
+
CUSTOM_WORKFLOW_CARRIER_TYPES = %w[UpsAccount FedexAccount].freeze
|
5
|
+
MODEL_CLASS = EasyPost::Models::CarrierAccount
|
6
|
+
|
7
|
+
# Create a carrier account
|
8
|
+
def create(params = {})
|
9
|
+
wrapped_params = { carrier_account: params }
|
10
|
+
|
11
|
+
# For UPS and FedEx the endpoint is different
|
12
|
+
create_url = if CUSTOM_WORKFLOW_CARRIER_TYPES.include?(params[:type])
|
13
|
+
'carrier_accounts/register'
|
14
|
+
else
|
15
|
+
'carrier_accounts'
|
16
|
+
end
|
17
|
+
|
18
|
+
@client.make_request(:post, create_url, MODEL_CLASS, wrapped_params)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Retrieve a carrier account
|
22
|
+
def retrieve(id)
|
23
|
+
@client.make_request(:get, "carrier_accounts/#{id}", MODEL_CLASS)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Retrieve all carrier accounts
|
27
|
+
def all(params = {})
|
28
|
+
@client.make_request(:get, 'carrier_accounts', MODEL_CLASS, params)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Update a carrier account
|
32
|
+
def update(id, params = {})
|
33
|
+
wrapped_params = { carrier_account: params }
|
34
|
+
@client.make_request(:put, "carrier_accounts/#{id}", MODEL_CLASS, wrapped_params)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Delete a carrier account
|
38
|
+
def delete(id)
|
39
|
+
@client.make_request(:delete, "carrier_accounts/#{id}")
|
40
|
+
|
41
|
+
# Return true if succeeds, an error will be thrown if it fails
|
42
|
+
true
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::CarrierMetadata < EasyPost::Services::Service
|
4
|
+
# Retrieve metadata for carrier(s).
|
5
|
+
def retrieve(carriers = [], types = [])
|
6
|
+
path = '/metadata/carriers?'
|
7
|
+
|
8
|
+
params = {}
|
9
|
+
|
10
|
+
if carriers.length.positive?
|
11
|
+
params[:carriers] = carriers.join(',')
|
12
|
+
end
|
13
|
+
|
14
|
+
if types.length.positive?
|
15
|
+
params[:types] = types.join(',')
|
16
|
+
end
|
17
|
+
|
18
|
+
path += URI.encode_www_form(params)
|
19
|
+
|
20
|
+
@client.make_request(:get, path, EasyPost::Models::EasyPostObject, params).carriers
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::CustomsInfo < EasyPost::Services::Service
|
4
|
+
MODEL_CLASS = EasyPost::Models::CustomsInfo
|
5
|
+
|
6
|
+
# Create a CustomsInfo object
|
7
|
+
def create(params)
|
8
|
+
@client.make_request(:post, 'customs_infos', MODEL_CLASS, params)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Retrieve a CustomsInfo object
|
12
|
+
def retrieve(id)
|
13
|
+
@client.make_request(:get, "customs_infos/#{id}", MODEL_CLASS)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::CustomsItem < EasyPost::Services::Service
|
4
|
+
MODEL_CLASS = EasyPost::Models::CustomsItem
|
5
|
+
|
6
|
+
# Create a CustomsItem object
|
7
|
+
def create(params)
|
8
|
+
@client.make_request(:post, 'customs_items', MODEL_CLASS, params)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Retrieve a CustomsItem object
|
12
|
+
def retrieve(id)
|
13
|
+
@client.make_request(:get, "customs_items/#{id}", MODEL_CLASS)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::EndShipper < EasyPost::Services::Service
|
4
|
+
MODEL_CLASS = EasyPost::Models::EndShipper
|
5
|
+
|
6
|
+
# Create an EndShipper object.
|
7
|
+
def create(params = {})
|
8
|
+
wrapped_params = { address: params }
|
9
|
+
|
10
|
+
@client.make_request(:post, 'end_shippers', MODEL_CLASS, wrapped_params)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Retrieve an EndShipper object.
|
14
|
+
def retrieve(id)
|
15
|
+
@client.make_request(:get, "end_shippers/#{id}", MODEL_CLASS)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Retrieve all EndShipper objects.
|
19
|
+
def all(params = {})
|
20
|
+
@client.make_request(:get, 'end_shippers', MODEL_CLASS, params)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Updates an EndShipper object. This requires all parameters to be set.
|
24
|
+
def update(id, params)
|
25
|
+
wrapped_params = { address: params }
|
26
|
+
|
27
|
+
@client.make_request(:put, "end_shippers/#{id}", MODEL_CLASS, wrapped_params)
|
28
|
+
end
|
29
|
+
|
30
|
+
# TODO: Add support for getting the next page of end shippers when the API supports it.
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
class EasyPost::Services::Event < EasyPost::Services::Service
|
6
|
+
MODEL_CLASS = EasyPost::Models::Event
|
7
|
+
|
8
|
+
# Retrieve an Event object
|
9
|
+
def retrieve(id)
|
10
|
+
@client.make_request(:get, "events/#{id}", MODEL_CLASS)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Retrieve all Event objects
|
14
|
+
def all(params = {})
|
15
|
+
@client.make_request(:get, 'events', MODEL_CLASS, params)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Retrieve all payloads for an event.
|
19
|
+
def retrieve_all_payloads(event_id)
|
20
|
+
@client.make_request(:get, "events/#{event_id}/payloads", EasyPost::Models::Payload)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Retrieve a specific payload for an event.
|
24
|
+
def retrieve_payload(event_id, payload_id)
|
25
|
+
@client.make_request(:get, "events/#{event_id}/payloads/#{payload_id}", EasyPost::Models::Payload)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get the next page of events.
|
29
|
+
def get_next_page(collection, page_size = nil)
|
30
|
+
get_next_page_helper(collection, collection.events, 'events', MODEL_CLASS, page_size)
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::Insurance < EasyPost::Services::Service
|
4
|
+
MODEL_CLASS = EasyPost::Models::Insurance
|
5
|
+
|
6
|
+
# Create an Insurance object
|
7
|
+
def create(params = {})
|
8
|
+
wrapped_params = { insurance: params }
|
9
|
+
@client.make_request(:post, 'insurances', MODEL_CLASS, wrapped_params)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Retrieve an Insurance object
|
13
|
+
def retrieve(id)
|
14
|
+
@client.make_request(:get, "insurances/#{id}", MODEL_CLASS)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Retrieve all Insurance objects
|
18
|
+
def all(params = {})
|
19
|
+
@client.make_request(:get, 'insurances', MODEL_CLASS, params)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Get the next page of insurances.
|
23
|
+
def get_next_page(collection, page_size = nil)
|
24
|
+
get_next_page_helper(collection, collection.insurances, 'insurances', MODEL_CLASS, page_size)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::Order < EasyPost::Services::Service
|
4
|
+
MODEL_CLASS = EasyPost::Models::Order
|
5
|
+
|
6
|
+
# Create an Order object
|
7
|
+
def create(params = {})
|
8
|
+
wrapped_params = { order: params }
|
9
|
+
@client.make_request(:post, 'orders', MODEL_CLASS, wrapped_params)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Retrieve an Order object
|
13
|
+
def retrieve(id)
|
14
|
+
@client.make_request(:get, "orders/#{id}", MODEL_CLASS)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Retrieve new rates for an Order object
|
18
|
+
def get_rates(id, params = {})
|
19
|
+
@client.make_request(:get, "orders/#{id}/rates", MODEL_CLASS, params)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Buy an Order object
|
23
|
+
def buy(id, params = {})
|
24
|
+
if params.instance_of?(EasyPost::Models::Rate)
|
25
|
+
params = { carrier: params[:carrier], service: params[:service] }
|
26
|
+
end
|
27
|
+
|
28
|
+
@client.make_request(:post, "orders/#{id}/buy", MODEL_CLASS, params)
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class EasyPost::Services::Parcel < EasyPost::Services::Service
|
4
|
+
MODEL_CLASS = EasyPost::Models::Parcel
|
5
|
+
|
6
|
+
# Create a Parcel object
|
7
|
+
def create(params = {})
|
8
|
+
wrapped_params = { parcel: params }
|
9
|
+
@client.make_request(:post, 'parcels', MODEL_CLASS, wrapped_params)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Retrieve a Parcel object
|
13
|
+
def retrieve(id)
|
14
|
+
@client.make_request(:get, "parcels/#{id}", MODEL_CLASS)
|
15
|
+
end
|
16
|
+
end
|