shipengine_sdk 1.0.3

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.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +96 -0
  4. data/lib/faraday/raise_http_exception.rb +77 -0
  5. data/lib/shipengine/configuration.rb +43 -0
  6. data/lib/shipengine/constants/base.rb +22 -0
  7. data/lib/shipengine/constants/countries.rb +16 -0
  8. data/lib/shipengine/constants.rb +4 -0
  9. data/lib/shipengine/domain/addresses/address_validation.rb +118 -0
  10. data/lib/shipengine/domain/addresses.rb +76 -0
  11. data/lib/shipengine/domain/carriers/list_carriers.rb +140 -0
  12. data/lib/shipengine/domain/carriers.rb +93 -0
  13. data/lib/shipengine/domain/labels/create_from_rate.rb +163 -0
  14. data/lib/shipengine/domain/labels/create_from_shipment_details.rb +163 -0
  15. data/lib/shipengine/domain/labels/void_label.rb +18 -0
  16. data/lib/shipengine/domain/labels.rb +297 -0
  17. data/lib/shipengine/domain/rates/get_with_shipment_details.rb +347 -0
  18. data/lib/shipengine/domain/rates.rb +379 -0
  19. data/lib/shipengine/domain/tracking/track_using_carrier_code_and_tracking_number.rb +45 -0
  20. data/lib/shipengine/domain/tracking/track_using_label_id.rb +45 -0
  21. data/lib/shipengine/domain/tracking.rb +103 -0
  22. data/lib/shipengine/domain.rb +7 -0
  23. data/lib/shipengine/exceptions/error_code.rb +254 -0
  24. data/lib/shipengine/exceptions/error_type.rb +49 -0
  25. data/lib/shipengine/exceptions.rb +132 -0
  26. data/lib/shipengine/internal_client.rb +91 -0
  27. data/lib/shipengine/utils/base58.rb +109 -0
  28. data/lib/shipengine/utils/pretty_print.rb +29 -0
  29. data/lib/shipengine/utils/request_id.rb +16 -0
  30. data/lib/shipengine/utils/user_agent.rb +24 -0
  31. data/lib/shipengine/utils/validate.rb +106 -0
  32. data/lib/shipengine/version.rb +5 -0
  33. data/lib/shipengine.rb +164 -0
  34. metadata +117 -0
@@ -0,0 +1,297 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'hashie'
4
+ require_relative 'labels/create_from_rate'
5
+ require_relative 'labels/create_from_shipment_details'
6
+ require_relative 'labels/void_label'
7
+
8
+ module ShipEngine
9
+ module Domain
10
+ class Labels # rubocop:todo Metrics/ClassLength
11
+ require 'shipengine/constants'
12
+
13
+ # @param [ShipEngine::InternalClient] internal_client
14
+ def initialize(internal_client)
15
+ @internal_client = internal_client
16
+ end
17
+
18
+ # @param label_id [String]
19
+ # @param params [Hash]
20
+ # @param config [Hash?]
21
+ #
22
+ # @return [ShipEngine::Domain::Labels::CreateFromRate::Response]
23
+ #
24
+ # @see https://shipengine.github.io/shipengine-openapi/#operation/create_label_from_rate
25
+ def create_from_rate(rate_id, params, config)
26
+ response = @internal_client.post("/v1/labels/rates/#{rate_id}", params, config)
27
+ label_api_result = response.body
28
+ mash_result = Hashie::Mash.new(label_api_result)
29
+
30
+ shipment_cost = nil
31
+ if mash_result.shipment_cost
32
+ shipment_cost = CreateFromRate::Response::MonetaryValue.new(
33
+ currency: mash_result.shipment_cost.currency,
34
+ amount: mash_result.shipment_cost.amount
35
+ )
36
+ end
37
+
38
+ insurance_cost = nil
39
+ if mash_result.insurance_cost
40
+ insurance_cost = CreateFromRate::Response::MonetaryValue.new(
41
+ currency: mash_result.insurance_cost.currency,
42
+ amount: mash_result.insurance_cost.amount
43
+ )
44
+ end
45
+
46
+ label_download = nil
47
+ if mash_result.label_download
48
+ label_download = CreateFromRate::Response::LabelDownload.new(
49
+ href: mash_result.label_download.href,
50
+ pdf: mash_result.label_download.pdf,
51
+ png: mash_result.label_download.png,
52
+ zpl: mash_result.label_download.zpl
53
+ )
54
+ end
55
+
56
+ form_download = nil
57
+ if mash_result.form_download
58
+ form_download = CreateFromRate::Response::FormDownload.new(
59
+ href: mash_result.form_download.href,
60
+ type: mash_result.form_download.type
61
+ )
62
+ end
63
+
64
+ insurance_claim = nil
65
+ if mash_result.insurance_claim
66
+ insurance_claim = CreateFromRate::Response::InsuranceClaim.new(
67
+ href: mash_result.insurance_claim.href,
68
+ type: mash_result.insurance_claim.type
69
+ )
70
+ end
71
+
72
+ packages = mash_result.packages.map do |package|
73
+ weight = CreateFromRate::Response::Weight.new(
74
+ value: package.weight.value,
75
+ unit: package.weight.unit
76
+ )
77
+
78
+ dimensions = nil
79
+ if package.dimensions
80
+ dimensions = CreateFromRate::Response::Dimensions.new(
81
+ unit: package.dimensions.unit,
82
+ length: package.dimensions['length'],
83
+ width: package.dimensions.width,
84
+ height: package.dimensions.height
85
+ )
86
+ end
87
+
88
+ insured_value = nil
89
+ if package.insured_value
90
+ insured_value = CreateFromRate::Response::MonetaryValue.new(
91
+ currency: package.insured_value.currency,
92
+ amount: package.insured_value.amount
93
+ )
94
+ end
95
+
96
+ label_messages = nil
97
+ if package.label_messages
98
+ label_messages = CreateFromRate::Response::Package::LabelMessages.new(
99
+ reference1: package.label_messages.reference1,
100
+ reference2: package.label_messages.reference2,
101
+ reference3: package.label_messages.reference3
102
+ )
103
+ end
104
+
105
+ CreateFromRate::Response::Package.new(
106
+ package_code: package.package_code,
107
+ weight:,
108
+ dimensions:,
109
+ insured_value:,
110
+ tracking_number: package.tracking_number,
111
+ label_messages:,
112
+ external_package_id: package.external_package_id
113
+ )
114
+ end
115
+
116
+ CreateFromRate::Response.new(
117
+ label_id: mash_result.label_id,
118
+ status: mash_result.status,
119
+ shipment_id: mash_result.shipment_id,
120
+ ship_date: mash_result.ship_date,
121
+ created_at: mash_result.created_at,
122
+ shipment_cost:,
123
+ insurance_cost:,
124
+ tracking_number: mash_result.tracking_number,
125
+ is_return_label: mash_result.is_return_label,
126
+ rma_number: mash_result.rma_number,
127
+ is_international: mash_result.is_international,
128
+ batch_id: mash_result.batch_id,
129
+ carrier_id: mash_result.carrier_id,
130
+ charge_event: mash_result.charge_event,
131
+ service_code: mash_result.service_code,
132
+ package_code: mash_result.package_code,
133
+ voided: mash_result.voided,
134
+ voided_at: mash_result.voided_at,
135
+ label_format: mash_result.label_format,
136
+ display_scheme: mash_result.display_scheme,
137
+ label_layout: mash_result.label_layout,
138
+ trackable: mash_result.trackable,
139
+ label_image_id: mash_result.label_image_id,
140
+ carrier_code: mash_result.carrier_code,
141
+ tracking_status: mash_result.tracking_status,
142
+ label_download:,
143
+ form_download:,
144
+ insurance_claim:,
145
+ packages:
146
+ )
147
+ end
148
+
149
+ # @param params [Hash]
150
+ # @param config [Hash?]
151
+ #
152
+ # @return [ShipEngine::Domain::Labels::CreateFromShipmentDetails::Response]
153
+ #
154
+ # @see https://shipengine.github.io/shipengine-openapi/#operation/create_label
155
+ def create_from_shipment_details(params, config)
156
+ response = @internal_client.post('/v1/labels', params, config)
157
+ label_api_result = response.body
158
+ mash_result = Hashie::Mash.new(label_api_result)
159
+
160
+ shipment_cost = nil
161
+ if mash_result.shipment_cost
162
+ shipment_cost = CreateFromShipmentDetails::Response::MonetaryValue.new(
163
+ currency: mash_result.shipment_cost.currency,
164
+ amount: mash_result.shipment_cost.amount
165
+ )
166
+ end
167
+
168
+ insurance_cost = nil
169
+ if mash_result.insurance_cost
170
+ insurance_cost = CreateFromShipmentDetails::Response::MonetaryValue.new(
171
+ currency: mash_result.insurance_cost.currency,
172
+ amount: mash_result.insurance_cost.amount
173
+ )
174
+ end
175
+
176
+ label_download = nil
177
+ if mash_result.label_download
178
+ label_download = CreateFromShipmentDetails::Response::LabelDownload.new(
179
+ href: mash_result.label_download.href,
180
+ pdf: mash_result.label_download.pdf,
181
+ png: mash_result.label_download.png,
182
+ zpl: mash_result.label_download.zpl
183
+ )
184
+ end
185
+
186
+ form_download = nil
187
+ if mash_result.form_download
188
+ form_download = CreateFromShipmentDetails::Response::FormDownload.new(
189
+ href: mash_result.form_download.href,
190
+ type: mash_result.form_download.type
191
+ )
192
+ end
193
+
194
+ insurance_claim = nil
195
+ if mash_result.insurance_claim
196
+ insurance_claim = CreateFromShipmentDetails::Response::InsuranceClaim.new(
197
+ href: mash_result.insurance_claim.href,
198
+ type: mash_result.insurance_claim.type
199
+ )
200
+ end
201
+
202
+ packages = mash_result.packages.map do |package|
203
+ weight = CreateFromShipmentDetails::Response::Weight.new(
204
+ value: package.weight.value,
205
+ unit: package.weight.unit
206
+ )
207
+
208
+ dimensions = nil
209
+ if package.dimensions
210
+ dimensions = CreateFromShipmentDetails::Response::Dimensions.new(
211
+ unit: package.dimensions.unit,
212
+ length: package.dimensions['length'],
213
+ width: package.dimensions.width,
214
+ height: package.dimensions.height
215
+ )
216
+ end
217
+
218
+ insured_value = nil
219
+ if package.insured_value
220
+ insured_value = CreateFromShipmentDetails::Response::MonetaryValue.new(
221
+ currency: package.insured_value.currency,
222
+ amount: package.insured_value.amount
223
+ )
224
+ end
225
+
226
+ label_messages = nil
227
+ if package.label_messages
228
+ label_messages = CreateFromShipmentDetails::Response::Package::LabelMessages.new(
229
+ reference1: package.label_messages.reference1,
230
+ reference2: package.label_messages.reference2,
231
+ reference3: package.label_messages.reference3
232
+ )
233
+ end
234
+
235
+ CreateFromShipmentDetails::Response::Package.new(
236
+ package_code: package.package_code,
237
+ weight:,
238
+ dimensions:,
239
+ insured_value:,
240
+ tracking_number: package.tracking_number,
241
+ label_messages:,
242
+ external_package_id: package.external_package_id
243
+ )
244
+ end
245
+
246
+ CreateFromShipmentDetails::Response.new(
247
+ label_id: mash_result.label_id,
248
+ status: mash_result.status,
249
+ shipment_id: mash_result.shipment_id,
250
+ ship_date: mash_result.ship_date,
251
+ created_at: mash_result.created_at,
252
+ shipment_cost:,
253
+ insurance_cost:,
254
+ tracking_number: mash_result.tracking_number,
255
+ is_return_label: mash_result.is_return_label,
256
+ rma_number: mash_result.rma_number,
257
+ is_international: mash_result.is_international,
258
+ batch_id: mash_result.batch_id,
259
+ carrier_id: mash_result.carrier_id,
260
+ charge_event: mash_result.charge_event,
261
+ service_code: mash_result.service_code,
262
+ package_code: mash_result.package_code,
263
+ voided: mash_result.voided,
264
+ voided_at: mash_result.voided_at,
265
+ label_format: mash_result.label_format,
266
+ display_scheme: mash_result.display_scheme,
267
+ label_layout: mash_result.label_layout,
268
+ trackable: mash_result.trackable,
269
+ label_image_id: mash_result.label_image_id,
270
+ carrier_code: mash_result.carrier_code,
271
+ tracking_status: mash_result.tracking_status,
272
+ label_download:,
273
+ form_download:,
274
+ insurance_claim:,
275
+ packages:
276
+ )
277
+ end
278
+
279
+ # @param label_id [String]
280
+ # @param config [Hash?]
281
+ #
282
+ # @return [ShipEngine::Domain::Labels::CreateFromShipmentDetails::Response]
283
+ #
284
+ # @see https://shipengine.github.io/shipengine-openapi/#operation/create_label
285
+ def void(label_id, config)
286
+ response = @internal_client.put("/v1/labels/#{label_id}/void", {}, config)
287
+ label_api_result = response.body
288
+ mash_result = Hashie::Mash.new(label_api_result)
289
+
290
+ VoidLabel::Response.new(
291
+ approved: mash_result.approved,
292
+ message: mash_result['message']
293
+ )
294
+ end
295
+ end
296
+ end
297
+ end
@@ -0,0 +1,347 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShipEngine
4
+ module Domain
5
+ class Rates
6
+ module GetWithShipmentDetails
7
+ class Response
8
+ attr_reader :shipment_id,
9
+ :carrier_id,
10
+ :service_code,
11
+ :external_order_id,
12
+ :items,
13
+ :tax_identifiers,
14
+ :external_shipment_id,
15
+ :ship_date,
16
+ :created_at,
17
+ :modified_at,
18
+ :shipment_status,
19
+ :ship_to,
20
+ :ship_from,
21
+ :warehouse_id,
22
+ :return_to,
23
+ :confirmation,
24
+ :customs,
25
+ :advanced_options,
26
+ :origin_type,
27
+ :insurance_provider,
28
+ :tags,
29
+ :order_source_code,
30
+ :packages,
31
+ :total_weight,
32
+ :rate_response
33
+
34
+ # rubocop:todo Metrics/ParameterLists
35
+ def initialize(shipment_id:, carrier_id:, service_code:, external_order_id:, items:, tax_identifiers:, external_shipment_id:, ship_date:, created_at:, modified_at:, shipment_status:, ship_to:, ship_from:, warehouse_id:, return_to:, confirmation:, customs:, advanced_options:, origin_type:,
36
+ insurance_provider:, tags:, order_source_code:, packages:, total_weight:, rate_response:)
37
+ # rubocop:enable Metrics/ParameterLists
38
+ @shipment_id = shipment_id
39
+ @carrier_id = carrier_id
40
+ @service_code = service_code
41
+ @external_order_id = external_order_id
42
+ @items = items
43
+ @tax_identifiers = tax_identifiers
44
+ @external_shipment_id = external_shipment_id
45
+ @ship_date = ship_date
46
+ @created_at = created_at
47
+ @modified_at = modified_at
48
+ @shipment_status = shipment_status
49
+ @ship_to = ship_to
50
+ @ship_from = ship_from
51
+ @warehouse_id = warehouse_id
52
+ @return_to = return_to
53
+ @confirmation = confirmation
54
+ @customs = customs
55
+ @advanced_options = advanced_options
56
+ @origin_type = origin_type
57
+ @insurance_provider = insurance_provider
58
+ @tags = tags
59
+ @order_source_code = order_source_code
60
+ @packages = packages
61
+ @total_weight = total_weight
62
+ @rate_response = rate_response
63
+ end
64
+
65
+ class Item
66
+ attr_reader :name, :sales_order_id, :sales_order_item_id, :quantity, :sku, :external_order_id, :external_order_item_id, :asin, :order_source_code
67
+
68
+ def initialize(name:, sales_order_id:, sales_order_item_id:, quantity:, sku:, external_order_id:, external_order_item_id:, asin:, order_source_code:) # rubocop:todo Metrics/ParameterLists
69
+ @name = name
70
+ @sales_order_id = sales_order_id
71
+ @sales_order_item_id = sales_order_item_id
72
+ @quantity = quantity
73
+ @sku = sku
74
+ @external_order_id = external_order_id
75
+ @external_order_item_id = external_order_item_id
76
+ @asin = asin
77
+ @order_source_code = order_source_code
78
+ end
79
+ end
80
+
81
+ class TaxIdentifier
82
+ attr_reader :taxable_entity_type, :identifier_type, :issuing_authority, :value
83
+
84
+ def initialize(taxable_entity_type:, identifier_type:, issuing_authority:, value:)
85
+ @taxable_entity_type = taxable_entity_type
86
+ @identifier_type = identifier_type
87
+ @issuing_authority = issuing_authority
88
+ @value = value
89
+ end
90
+ end
91
+
92
+ class Address
93
+ attr_reader :name, :phone, :company_name, :address_line1, :address_line2, :address_line3, :city_locality, :state_province, :postal_code, :country_code, :address_residential_indicator
94
+
95
+ def initialize(name:, phone:, company_name:, address_line1:, address_line2:, address_line3:, city_locality:, state_province:, postal_code:, country_code:, address_residential_indicator:) # rubocop:todo Metrics/ParameterLists
96
+ @name = name
97
+ @phone = phone
98
+ @company_name = company_name
99
+ @address_line1 = address_line1
100
+ @address_line2 = address_line2
101
+ @address_line3 = address_line3
102
+ @city_locality = city_locality
103
+ @state_province = state_province
104
+ @postal_code = postal_code
105
+ @country_code = country_code
106
+ @address_residential_indicator = address_residential_indicator
107
+ end
108
+ end
109
+
110
+ class Customs
111
+ attr_reader :contents, :non_delivery, :customs_items
112
+
113
+ def initialize(contents:, non_delivery:, customs_items:)
114
+ @contents = contents
115
+ @non_delivery = non_delivery
116
+ @customs_items = customs_items
117
+ end
118
+
119
+ class CustomsItem
120
+ attr_reader :customs_item_id, :description, :quantity, :value, :harmonized_tariff_code, :country_of_origin, :unit_of_measure, :sku, :sku_description
121
+
122
+ def initialize(customs_item_id:, description:, quantity:, value:, harmonized_tariff_code:, country_of_origin:, unit_of_measure:, sku:, sku_description:) # rubocop:todo Metrics/ParameterLists
123
+ @customs_item_id = customs_item_id
124
+ @description = description
125
+ @quantity = quantity
126
+ @value = value
127
+ @harmonized_tariff_code = harmonized_tariff_code
128
+ @country_of_origin = country_of_origin
129
+ @unit_of_measure = unit_of_measure
130
+ @sku = sku
131
+ @sku_description = sku_description
132
+ end
133
+ end
134
+ end
135
+
136
+ class MonetaryValue
137
+ attr_reader :currency, :amount
138
+
139
+ def initialize(currency:, amount:)
140
+ @currency = currency
141
+ @amount = amount
142
+ end
143
+ end
144
+
145
+ class Weight
146
+ attr_reader :value, :unit
147
+
148
+ def initialize(value:, unit:)
149
+ @value = value
150
+ @unit = unit
151
+ end
152
+ end
153
+
154
+ class Dimensions
155
+ attr_reader :unit, :length, :width, :height
156
+
157
+ # type ["inch" | "centimeter"] unit
158
+ # @param [Double] length - e.g. 1.0
159
+ # @param [Double] width - e.g. 1.0
160
+ # @param [Double] height - e.g. 1.0
161
+
162
+ def initialize(unit:, length:, width:, height:)
163
+ @unit = unit
164
+ @length = length
165
+ @width = width
166
+ @height = height
167
+ end
168
+ end
169
+
170
+ class AdvancedOptions
171
+ attr_reader :bill_to_account,
172
+ :bill_to_country_code,
173
+ :bill_to_party,
174
+ :bill_to_postal_code,
175
+ :contains_alcohol,
176
+ :delivered_duty_paid,
177
+ :dry_ice,
178
+ :dry_ice_weight,
179
+ :non_machinable,
180
+ :saturday_delivery,
181
+ :use_ups_ground_freight_pricing,
182
+ :freight_class,
183
+ :custom_field1,
184
+ :custom_field2,
185
+ :custom_field3,
186
+ :origin_type,
187
+ :shipper_release,
188
+ :collect_on_delivery
189
+
190
+ # rubocop:todo Metrics/ParameterLists
191
+ def initialize(bill_to_account:, bill_to_country_code:, bill_to_party:, bill_to_postal_code:, contains_alcohol:, delivered_duty_paid:, dry_ice:, dry_ice_weight:, non_machinable:, saturday_delivery:, use_ups_ground_freight_pricing:, freight_class:, custom_field1:, custom_field2:,
192
+ custom_field3:, origin_type:, shipper_release:, collect_on_delivery:)
193
+ # rubocop:enable Metrics/ParameterLists
194
+ @bill_to_account = bill_to_account
195
+ @bill_to_country_code = bill_to_country_code
196
+ @bill_to_party = bill_to_party
197
+ @bill_to_postal_code = bill_to_postal_code
198
+ @contains_alcohol = contains_alcohol
199
+ @delivered_duty_paid = delivered_duty_paid
200
+ @dry_ice = dry_ice
201
+ @dry_ice_weight = dry_ice_weight
202
+ @non_machinable = non_machinable
203
+ @saturday_delivery = saturday_delivery
204
+ @use_ups_ground_freight_pricing = use_ups_ground_freight_pricing
205
+ @freight_class = freight_class
206
+ @custom_field1 = custom_field1
207
+ @custom_field2 = custom_field2
208
+ @custom_field3 = custom_field3
209
+ @origin_type = origin_type
210
+ @shipper_release = shipper_release
211
+ @collect_on_delivery = collect_on_delivery
212
+ end
213
+
214
+ class CollectOnDelivery
215
+ attr_reader :payment_type, :payment_amount
216
+
217
+ def initialize(payment_type:, payment_amount:)
218
+ @payment_type = payment_type
219
+ @payment_amount = payment_amount
220
+ end
221
+ end
222
+ end
223
+
224
+ class Tag
225
+ attr_reader :name
226
+
227
+ def initialize(name:)
228
+ @name = name
229
+ end
230
+ end
231
+
232
+ class Package
233
+ attr_reader :package_code, :weight, :dimensions, :insured_value, :tracking_number, :label_messages, :external_package_id
234
+
235
+ def initialize(package_code:, weight:, dimensions:, insured_value:, tracking_number:, label_messages:, external_package_id:) # rubocop:todo Metrics/ParameterLists
236
+ @package_code = package_code
237
+ @weight = weight
238
+ @dimensions = dimensions
239
+ @insured_value = insured_value
240
+ @tracking_number = tracking_number
241
+ @label_messages = label_messages
242
+ @external_package_id = external_package_id
243
+ end
244
+
245
+ class LabelMessages
246
+ attr_reader :reference1, :reference2, :reference3
247
+
248
+ def initialize(reference1:, reference2:, reference3:)
249
+ @reference1 = reference1
250
+ @reference2 = reference2
251
+ @reference3 = reference3
252
+ end
253
+ end
254
+ end
255
+
256
+ class RateResponse
257
+ attr_reader :rates, :invalid_rates, :rate_request_id, :shipment_id, :created_at, :status, :errors
258
+
259
+ def initialize(rates:, invalid_rates:, rate_request_id:, shipment_id:, created_at:, status:, errors:) # rubocop:todo Metrics/ParameterLists
260
+ @rates = rates
261
+ @invalid_rates = invalid_rates
262
+ @rate_request_id = rate_request_id
263
+ @shipment_id = shipment_id
264
+ @created_at = created_at
265
+ @status = status
266
+ @errors = errors
267
+ end
268
+
269
+ class Rate
270
+ attr_reader :rate_id,
271
+ :rate_type,
272
+ :carrier_id,
273
+ :shipping_amount,
274
+ :insurance_amount,
275
+ :confirmation_amount,
276
+ :other_amount,
277
+ :tax_amount,
278
+ :zone,
279
+ :package_type,
280
+ :delivery_days,
281
+ :guaranteed_service,
282
+ :estimated_delivery_date,
283
+ :carrier_delivery_days,
284
+ :ship_date,
285
+ :negotiated_rate,
286
+ :service_type,
287
+ :service_code,
288
+ :trackable,
289
+ :carrier_code,
290
+ :carrier_nickname,
291
+ :carrier_friendly_name,
292
+ :validation_status,
293
+ :warning_messages,
294
+ :error_messages
295
+
296
+ # rubocop:todo Metrics/ParameterLists
297
+ def initialize(rate_id:, rate_type:, carrier_id:, shipping_amount:, insurance_amount:, confirmation_amount:, other_amount:, tax_amount:, zone:, package_type:, delivery_days:, guaranteed_service:, estimated_delivery_date:, carrier_delivery_days:, ship_date:, negotiated_rate:,
298
+ service_type:, service_code:, trackable:, carrier_code:, carrier_nickname:, carrier_friendly_name:, validation_status:, warning_messages:, error_messages:)
299
+ # rubocop:enable Metrics/ParameterLists
300
+ @rate_id = rate_id
301
+ @rate_type = rate_type
302
+ @carrier_id = carrier_id
303
+ @shipping_amount = shipping_amount
304
+ @insurance_amount = insurance_amount
305
+ @confirmation_amount = confirmation_amount
306
+ @other_amount = other_amount
307
+ @tax_amount = tax_amount
308
+ @zone = zone
309
+ @package_type = package_type
310
+ @delivery_days = delivery_days
311
+ @guaranteed_service = guaranteed_service
312
+ @estimated_delivery_date = estimated_delivery_date
313
+ @carrier_delivery_days = carrier_delivery_days
314
+ @ship_date = ship_date
315
+ @negotiated_rate = negotiated_rate
316
+ @service_type = service_type
317
+ @service_code = service_code
318
+ @trackable = trackable
319
+ @carrier_code = carrier_code
320
+ @carrier_nickname = carrier_nickname
321
+ @carrier_friendly_name = carrier_friendly_name
322
+ @validation_status = validation_status
323
+ @warning_messages = warning_messages
324
+ @error_messages = error_messages
325
+ end
326
+ end
327
+
328
+ class Error
329
+ attr_reader :error_source, :error_type, :error_code, :message
330
+
331
+ # type ["carrier" | "order_source" | "shipengine"] error_source
332
+ # type ["account_status" | "business_rules" | "validation" | "security" | "system" | "integrations"] error_type
333
+ # @param [String] error_code
334
+ # @param [String] message
335
+ def initialize(error_source:, error_type:, error_code:, message:)
336
+ @error_source = error_source
337
+ @error_type = error_type
338
+ @error_code = error_code
339
+ @message = message
340
+ end
341
+ end
342
+ end
343
+ end
344
+ end
345
+ end
346
+ end
347
+ end