module Deliveries::Couriers::Ups

Constants

COURIER_ID
Config

Public Instance Methods

create_pickup(sender:, receiver:, parcels:, reference_code:, pickup_date: nil, language: nil, **) click to toggle source
# File lib/deliveries/couriers/ups.rb, line 71
def create_pickup(sender:, receiver:, parcels:, reference_code:, pickup_date: nil, language: nil, **)
  tracking_code, label = Shipments::Create.new(
    shipper: receiver,
    consignee: sender,
    parcels: parcels,
    reference_code: reference_code,
    type: :return,
    language: language
  ).execute.values_at(:tracking_code, :label)

  Deliveries::Pickup.new(
    courier_id: COURIER_ID,
    sender: sender,
    receiver: receiver,
    parcels: parcels,
    reference_code: reference_code,
    tracking_code: tracking_code,
    pickup_date: pickup_date,
    label: Label.new(raw: label)
  )
end
create_shipment(sender:, receiver:, parcels:, reference_code:, collection_point:, shipment_date: nil, language: nil, **) click to toggle source
# File lib/deliveries/couriers/ups.rb, line 48
def create_shipment(sender:, receiver:, parcels:, reference_code:, collection_point:, shipment_date: nil, language: nil, **)
  tracking_code, label = Shipments::Create.new(
    shipper: sender,
    consignee: receiver,
    parcels: parcels,
    reference_code: reference_code,
    type: :forward,
    collection_point: collection_point,
    language: language
  ).execute.values_at(:tracking_code, :label)

  Deliveries::Shipment.new(
    courier_id: COURIER_ID,
    sender: sender,
    receiver: receiver,
    parcels: parcels,
    reference_code: reference_code,
    tracking_code: tracking_code,
    shipment_date: shipment_date,
    label: Label.new(raw: label)
  )
end
get_collection_point(global_point_id:) click to toggle source
# File lib/deliveries/couriers/ups.rb, line 25
def get_collection_point(global_point_id:)
  global_point = CollectionPoint.parse_global_point_id(global_point_id: global_point_id)
  points = CollectionPoints::Search.new(
    country: global_point.country,
    point_id: global_point.point_id
  ).execute

  raise Error, 'No collection point found by that point ID' if points.empty?

  CollectionPoint.new(**points.first)
end
get_collection_points(country:, postcode:) click to toggle source
# File lib/deliveries/couriers/ups.rb, line 37
def get_collection_points(country:, postcode:)
  points = CollectionPoints::Search.new(
    country: country,
    postcode: postcode
  ).execute

  points.map do |arguments|
    CollectionPoint.new(**arguments)
  end
end
get_label(tracking_code:, **) click to toggle source
# File lib/deliveries/couriers/ups.rb, line 93
def get_label(tracking_code:, **)
  arguments = Labels::Generate.new(tracking_code: tracking_code).execute
  Label.new(**arguments)
end
get_labels(tracking_codes:, **) click to toggle source
# File lib/deliveries/couriers/ups.rb, line 98
def get_labels(tracking_codes:, **)
  labels = Deliveries::Labels.new

  tracking_codes.each do |tracking_code|
    labels << get_label(tracking_code: tracking_code)
  end

  labels
end
pickup_info(tracking_code:, language: nil) click to toggle source
# File lib/deliveries/couriers/ups.rb, line 117
def pickup_info(tracking_code:, language: nil)
  shipment_info(tracking_code: tracking_code, language: language)
end
shipment_info(tracking_code:, language: nil) click to toggle source
# File lib/deliveries/couriers/ups.rb, line 108
def shipment_info(tracking_code:, language: nil)
  checkpoints = Shipments::Trace.new(tracking_code: tracking_code, language: language).execute.map do |arguments|
    Checkpoint.new(**arguments)
  end

  TrackingInfo.new(courier_id: COURIER_ID, tracking_code: tracking_code, checkpoints: checkpoints,
                   status: checkpoints.last&.status)
end