Class: FreightKit::ABFS
- Inherits:
-
Carrier
- Object
- Carrier
- FreightKit::ABFS
- Defined in:
- lib/freight_kit/carriers/abfs.rb
Constant Summary collapse
- REACTIVE_FREIGHT_CARRIER =
true- XML_HEADERS =
{ 'Accept' => 'application/xml', 'charset' => 'utf-8', 'Content-Type' => 'application/xml' }.freeze
Class Attribute Summary collapse
-
.name ⇒ Object
readonly
Returns the value of attribute name.
-
.scac ⇒ Object
readonly
Returns the value of attribute scac.
Class Method Summary collapse
- .find_rates_with_declared_value? ⇒ Boolean
- .maximum_height ⇒ Object
- .maximum_weight ⇒ Object
- .minimum_length_for_overlength_fees ⇒ Object
- .overlength_fees_require_tariff? ⇒ Boolean
- .pickup_number_is_tracking_number? ⇒ Boolean
- .required_credential_types ⇒ Object
- .requirements ⇒ Object
Instance Method Summary collapse
-
#find_rates(shipment:) ⇒ Object
Rates.
- #serviceable_accessorials?(accessorials) ⇒ Boolean
- #validate_packages(packages) ⇒ Object
Class Attribute Details
.name ⇒ Object (readonly)
Returns the value of attribute name.
42 43 44 |
# File 'lib/freight_kit/carriers/abfs.rb', line 42 def name @name end |
.scac ⇒ Object (readonly)
Returns the value of attribute scac.
42 43 44 |
# File 'lib/freight_kit/carriers/abfs.rb', line 42 def scac @scac end |
Class Method Details
.find_rates_with_declared_value? ⇒ Boolean
6 7 8 |
# File 'lib/freight_kit/carriers/abfs.rb', line 6 def find_rates_with_declared_value? true end |
.maximum_height ⇒ Object
10 11 12 |
# File 'lib/freight_kit/carriers/abfs.rb', line 10 def maximum_height Measured::Length.new(105, :inches) end |
.maximum_weight ⇒ Object
14 15 16 |
# File 'lib/freight_kit/carriers/abfs.rb', line 14 def maximum_weight Measured::Weight.new(150, :pounds) end |
.minimum_length_for_overlength_fees ⇒ Object
18 19 20 |
# File 'lib/freight_kit/carriers/abfs.rb', line 18 def minimum_length_for_overlength_fees Measured::Length.new(6, :feet) end |
.overlength_fees_require_tariff? ⇒ Boolean
22 23 24 |
# File 'lib/freight_kit/carriers/abfs.rb', line 22 def overlength_fees_require_tariff? false end |
.pickup_number_is_tracking_number? ⇒ Boolean
26 27 28 |
# File 'lib/freight_kit/carriers/abfs.rb', line 26 def pickup_number_is_tracking_number? true end |
.required_credential_types ⇒ Object
30 31 32 |
# File 'lib/freight_kit/carriers/abfs.rb', line 30 def required_credential_types %i[api api_key] end |
.requirements ⇒ Object
34 35 36 |
# File 'lib/freight_kit/carriers/abfs.rb', line 34 def requirements %i[credentials] end |
Instance Method Details
#find_rates(shipment:) ⇒ Object
Rates
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/freight_kit/carriers/abfs.rb', line 85 def find_rates(shipment:) begin serviceable_accessorials?(shipment.accessorials) validate_packages(shipment.packages) rescue UnserviceableError => e return RateResponse.new(error: e) end request = build_rate_request(shipment:) # commit(request) parse_rate_response(shipment:, response: commit(request)) end |
#serviceable_accessorials?(accessorials) ⇒ Boolean
53 54 55 56 57 58 59 60 61 62 |
# File 'lib/freight_kit/carriers/abfs.rb', line 53 def serviceable_accessorials?(accessorials) unsupported_accessorials = conf.dig(:accessorials, :unserviceable).select do |key| accessorials.include?(key) end.sort! = "#{unsupported_accessorials.join(", ")} unserviceable" raise FreightKit::UnserviceableError, if unsupported_accessorials.any? true end |
#validate_packages(packages) ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/freight_kit/carriers/abfs.rb', line 64 def validate_packages(packages) # @note This doesn't refer to package quantities, instead it referes to maximum number of package-related URL # query params raise FreightKit::UnserviceableError, 'Too many packages' if packages.count > 15 unsupported_packaging_types = packages.map(&:packaging).map(&:type).select do |type| conf.dig(:package_types).keys.exclude?(type) end.sort! raise FreightKit::UnserviceableError, "#{unsupported_packaging_types.join(", ").upcase_first} unserviceable" if unsupported_packaging_types.any? true end |