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,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'hashie'
4
+ require_relative 'carriers/list_carriers'
5
+ require 'shipengine/constants'
6
+
7
+ module ShipEngine
8
+ module Domain
9
+ class Carriers
10
+ # @param [ShipEngine::InternalClient] internal_client
11
+ def initialize(internal_client)
12
+ @internal_client = internal_client
13
+ end
14
+
15
+ def list_carriers(config:)
16
+ response = @internal_client.get('/v1/carriers', {}, config)
17
+ carriers_api_result = response.body
18
+ mash_result = Hashie::Mash.new(carriers_api_result)
19
+ carriers = mash_result.carriers.map do |carrier|
20
+ services = carrier.services.map do |service|
21
+ ListCarriers::Carrier::Service.new(
22
+ carrier_id: service.carrier_id,
23
+ carrier_code: service.carrier_code,
24
+ service_code: service.service_code,
25
+ name: service.name,
26
+ domestic: service.domestic,
27
+ international: service.international,
28
+ is_multi_package_supported: service.is_multi_package_supported
29
+ )
30
+ end
31
+
32
+ packages = carrier.packages.map do |package|
33
+ dimensions = nil
34
+ if package.dimensions
35
+ dimensions = ListCarriers::Carrier::Package::Dimensions.new(
36
+ unit: package.dimensions.unit,
37
+ length: package.dimensions['length'],
38
+ width: package.dimensions.width,
39
+ height: package.dimensions.height
40
+ )
41
+ end
42
+ ListCarriers::Carrier::Package.new(
43
+ package_id: package.package_id,
44
+ package_code: package.package_code,
45
+ name: package.name,
46
+ dimensions:,
47
+ description: package.description
48
+ )
49
+ end
50
+
51
+ options = carrier.options.map do |option|
52
+ ListCarriers::Carrier::Option.new(
53
+ name: option.name,
54
+ default_value: option.default_value,
55
+ description: option.description
56
+ )
57
+ end
58
+
59
+ ListCarriers::Carrier.new(
60
+ carrier_id: carrier.carrier_id,
61
+ carrier_code: carrier.carrier_code,
62
+ account_number: carrier.account_number,
63
+ requires_funded_amount: carrier.requires_funded_amount,
64
+ balance: carrier.balance,
65
+ nickname: carrier.nickname,
66
+ friendly_name: carrier.friendly_name,
67
+ primary: carrier.primary,
68
+ has_multi_package_supporting_services: carrier.has_multi_package_supporting_services,
69
+ supports_label_messages: carrier.supports_label_messages,
70
+ services:,
71
+ packages:,
72
+ options:
73
+ )
74
+ end
75
+
76
+ errors = mash_result.errors.map do |error|
77
+ ListCarriers::Error.new(
78
+ error_source: error.error_source,
79
+ error_type: error.error_type,
80
+ error_code: error.error_code,
81
+ message: error['message']
82
+ )
83
+ end
84
+
85
+ ListCarriers::Response.new(
86
+ carriers:,
87
+ request_id: mash_result.request_id,
88
+ errors:
89
+ )
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShipEngine
4
+ module Domain
5
+ class Labels
6
+ module CreateFromRate
7
+ class Response
8
+ attr_reader :label_id,
9
+ :status,
10
+ :shipment_id,
11
+ :ship_date,
12
+ :created_at,
13
+ :shipment_cost,
14
+ :insurance_cost,
15
+ :tracking_number,
16
+ :is_return_label,
17
+ :rma_number,
18
+ :is_international,
19
+ :batch_id,
20
+ :carrier_id,
21
+ :charge_event,
22
+ :service_code,
23
+ :package_code,
24
+ :voided,
25
+ :voided_at,
26
+ :label_format,
27
+ :display_scheme,
28
+ :label_layout,
29
+ :trackable,
30
+ :label_image_id,
31
+ :carrier_code,
32
+ :tracking_status,
33
+ :label_download,
34
+ :form_download,
35
+ :insurance_claim,
36
+ :packages
37
+
38
+ # rubocop:todo Metrics/ParameterLists
39
+ def initialize(label_id:, status:, shipment_id:, ship_date:, created_at:, shipment_cost:, insurance_cost:, tracking_number:, is_return_label:, rma_number:, is_international:, batch_id:, carrier_id:, charge_event:, service_code:, package_code:, voided:, voided_at:, label_format:,
40
+ display_scheme:, label_layout:, trackable:, label_image_id:, carrier_code:, tracking_status:, label_download:, form_download:, insurance_claim:, packages:)
41
+ # rubocop:enable Metrics/ParameterLists
42
+ @label_id = label_id
43
+ @status = status
44
+ @shipment_id = shipment_id
45
+ @ship_date = ship_date
46
+ @created_at = created_at
47
+ @shipment_cost = shipment_cost
48
+ @insurance_cost = insurance_cost
49
+ @tracking_number = tracking_number
50
+ @is_return_label = is_return_label
51
+ @rma_number = rma_number
52
+ @is_international = is_international
53
+ @batch_id = batch_id
54
+ @carrier_id = carrier_id
55
+ @charge_event = charge_event
56
+ @service_code = service_code
57
+ @package_code = package_code
58
+ @voided = voided
59
+ @voided_at = voided_at
60
+ @label_format = label_format
61
+ @display_scheme = display_scheme
62
+ @label_layout = label_layout
63
+ @trackable = trackable
64
+ @label_image_id = label_image_id
65
+ @carrier_code = carrier_code
66
+ @tracking_status = tracking_status
67
+ @label_download = label_download
68
+ @form_download = form_download
69
+ @insurance_claim = insurance_claim
70
+ @packages = packages
71
+ end
72
+
73
+ class MonetaryValue
74
+ attr_reader :currency, :amount
75
+
76
+ def initialize(currency:, amount:)
77
+ @currency = currency
78
+ @amount = amount
79
+ end
80
+ end
81
+
82
+ class Package
83
+ attr_reader :package_code, :weight, :dimensions, :insured_value, :tracking_number, :label_messages, :external_package_id
84
+
85
+ def initialize(package_code:, weight:, dimensions:, insured_value:, tracking_number:, label_messages:, external_package_id:) # rubocop:todo Metrics/ParameterLists
86
+ @package_code = package_code
87
+ @weight = weight
88
+ @dimensions = dimensions
89
+ @insured_value = insured_value
90
+ @tracking_number = tracking_number
91
+ @label_messages = label_messages
92
+ @external_package_id = external_package_id
93
+ end
94
+
95
+ class LabelMessages
96
+ attr_reader :reference1, :reference2, :reference3
97
+
98
+ def initialize(reference1:, reference2:, reference3:)
99
+ @reference1 = reference1
100
+ @reference2 = reference2
101
+ @reference3 = reference3
102
+ end
103
+ end
104
+ end
105
+
106
+ class LabelDownload
107
+ attr_reader :href, :pdf, :png, :zpl
108
+
109
+ def initialize(href:, pdf:, png:, zpl:)
110
+ @href = href
111
+ @pdf = pdf
112
+ @png = png
113
+ @zpl = zpl
114
+ end
115
+ end
116
+
117
+ class FormDownload
118
+ attr_reader :href, :type
119
+
120
+ def initialize(href:, type:)
121
+ @href = href
122
+ @type = type
123
+ end
124
+ end
125
+
126
+ class InsuranceClaim
127
+ attr_reader :href, :type
128
+
129
+ def initialize(href:, type:)
130
+ @href = href
131
+ @type = type
132
+ end
133
+ end
134
+
135
+ class Weight
136
+ attr_reader :value, :unit
137
+
138
+ def initialize(value:, unit:)
139
+ @value = value
140
+ @unit = unit
141
+ end
142
+ end
143
+
144
+ class Dimensions
145
+ attr_reader :unit, :length, :width, :height
146
+
147
+ # type ["inch" | "centimeter"] unit
148
+ # @param [Double] length - e.g. 1.0
149
+ # @param [Double] width - e.g. 1.0
150
+ # @param [Double] height - e.g. 1.0
151
+
152
+ def initialize(unit:, length:, width:, height:)
153
+ @unit = unit
154
+ @length = length
155
+ @width = width
156
+ @height = height
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,163 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShipEngine
4
+ module Domain
5
+ class Labels
6
+ module CreateFromShipmentDetails
7
+ class Response
8
+ attr_reader :label_id,
9
+ :status,
10
+ :shipment_id,
11
+ :ship_date,
12
+ :created_at,
13
+ :shipment_cost,
14
+ :insurance_cost,
15
+ :tracking_number,
16
+ :is_return_label,
17
+ :rma_number,
18
+ :is_international,
19
+ :batch_id,
20
+ :carrier_id,
21
+ :charge_event,
22
+ :service_code,
23
+ :package_code,
24
+ :voided,
25
+ :voided_at,
26
+ :label_format,
27
+ :display_scheme,
28
+ :label_layout,
29
+ :trackable,
30
+ :label_image_id,
31
+ :carrier_code,
32
+ :tracking_status,
33
+ :label_download,
34
+ :form_download,
35
+ :insurance_claim,
36
+ :packages
37
+
38
+ # rubocop:todo Metrics/ParameterLists
39
+ def initialize(label_id:, status:, shipment_id:, ship_date:, created_at:, shipment_cost:, insurance_cost:, tracking_number:, is_return_label:, rma_number:, is_international:, batch_id:, carrier_id:, charge_event:, service_code:, package_code:, voided:, voided_at:, label_format:,
40
+ display_scheme:, label_layout:, trackable:, label_image_id:, carrier_code:, tracking_status:, label_download:, form_download:, insurance_claim:, packages:)
41
+ # rubocop:enable Metrics/ParameterLists
42
+ @label_id = label_id
43
+ @status = status
44
+ @shipment_id = shipment_id
45
+ @ship_date = ship_date
46
+ @created_at = created_at
47
+ @shipment_cost = shipment_cost
48
+ @insurance_cost = insurance_cost
49
+ @tracking_number = tracking_number
50
+ @is_return_label = is_return_label
51
+ @rma_number = rma_number
52
+ @is_international = is_international
53
+ @batch_id = batch_id
54
+ @carrier_id = carrier_id
55
+ @charge_event = charge_event
56
+ @service_code = service_code
57
+ @package_code = package_code
58
+ @voided = voided
59
+ @voided_at = voided_at
60
+ @label_format = label_format
61
+ @display_scheme = display_scheme
62
+ @label_layout = label_layout
63
+ @trackable = trackable
64
+ @label_image_id = label_image_id
65
+ @carrier_code = carrier_code
66
+ @tracking_status = tracking_status
67
+ @label_download = label_download
68
+ @form_download = form_download
69
+ @insurance_claim = insurance_claim
70
+ @packages = packages
71
+ end
72
+
73
+ class MonetaryValue
74
+ attr_reader :currency, :amount
75
+
76
+ def initialize(currency:, amount:)
77
+ @currency = currency
78
+ @amount = amount
79
+ end
80
+ end
81
+
82
+ class Package
83
+ attr_reader :package_code, :weight, :dimensions, :insured_value, :tracking_number, :label_messages, :external_package_id
84
+
85
+ def initialize(package_code:, weight:, dimensions:, insured_value:, tracking_number:, label_messages:, external_package_id:) # rubocop:todo Metrics/ParameterLists
86
+ @package_code = package_code
87
+ @weight = weight
88
+ @dimensions = dimensions
89
+ @insured_value = insured_value
90
+ @tracking_number = tracking_number
91
+ @label_messages = label_messages
92
+ @external_package_id = external_package_id
93
+ end
94
+
95
+ class LabelMessages
96
+ attr_reader :reference1, :reference2, :reference3
97
+
98
+ def initialize(reference1:, reference2:, reference3:)
99
+ @reference1 = reference1
100
+ @reference2 = reference2
101
+ @reference3 = reference3
102
+ end
103
+ end
104
+ end
105
+
106
+ class LabelDownload
107
+ attr_reader :href, :pdf, :png, :zpl
108
+
109
+ def initialize(href:, pdf:, png:, zpl:)
110
+ @href = href
111
+ @pdf = pdf
112
+ @png = png
113
+ @zpl = zpl
114
+ end
115
+ end
116
+
117
+ class FormDownload
118
+ attr_reader :href, :type
119
+
120
+ def initialize(href:, type:)
121
+ @href = href
122
+ @type = type
123
+ end
124
+ end
125
+
126
+ class InsuranceClaim
127
+ attr_reader :href, :type
128
+
129
+ def initialize(href:, type:)
130
+ @href = href
131
+ @type = type
132
+ end
133
+ end
134
+
135
+ class Weight
136
+ attr_reader :value, :unit
137
+
138
+ def initialize(value:, unit:)
139
+ @value = value
140
+ @unit = unit
141
+ end
142
+ end
143
+
144
+ class Dimensions
145
+ attr_reader :unit, :length, :width, :height
146
+
147
+ # type ["inch" | "centimeter"] unit
148
+ # @param [Double] length - e.g. 1.0
149
+ # @param [Double] width - e.g. 1.0
150
+ # @param [Double] height - e.g. 1.0
151
+
152
+ def initialize(unit:, length:, width:, height:)
153
+ @unit = unit
154
+ @length = length
155
+ @width = width
156
+ @height = height
157
+ end
158
+ end
159
+ end
160
+ end
161
+ end
162
+ end
163
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShipEngine
4
+ module Domain
5
+ class Labels
6
+ module VoidLabel
7
+ class Response
8
+ attr_reader :approved, :message
9
+
10
+ def initialize(approved:, message:)
11
+ @approved = approved
12
+ @message = message
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end