Class: NewgisticsApi::Tracking::Decorator

Inherits:
Object
  • Object
show all
Defined in:
lib/newgistics_api/tracking.rb

Class Method Summary collapse

Class Method Details

.decorate(response) ⇒ Object

Raises:

  • (NewgisticsApi::NotFoundTrackingNumberError)


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/newgistics_api/tracking.rb', line 42

def self.decorate(response)
  return {} if (package = (response["Packages"] || [])[0]).nil?
  return {} if (events = package["PackageTrackingEvents"] || []).empty?

  raise NewgisticsApi::NotFoundTrackingNumberError.new if response["Status"] == STATUS_NOT_FOUND

  # Outbound - packages shipped from the DC
  # Inbound - packages handed by the customer to the carrier
  shipped_event = events.find { |event| event && SHIPPED_CODES.include?(event["EventCode"]) }
  delivered_event = events.find { |event| event && DELIVERED_CODES.include?(event["EventCode"]) }

  {
    ngst_status: package["Status"],
    simple_status: determine_simple_status(
      package,
      shipped_event,
      delivered_event
    ),
    all_events: events,
    relevant_events: {
      shipped: shipped_event ? { timestamp: parse_event_date(shipped_event), details: shipped_event } : nil,
      delivered: delivered_event ? { timestamp: parse_event_date(delivered_event), details: delivered_event } : nil
    }
  }
end