Class: ExpediaApi::Entities::PackageFlightLeg

Inherits:
Object
  • Object
show all
Defined in:
lib/expedia_api/entities/package_flight_leg.rb

Overview

wrapper class for each of the flight legs

Instance Method Summary collapse

Constructor Details

#initialize(raw_data) ⇒ PackageFlightLeg

The raw data by the API looks like this:

{

"FlightDuration": "PT21H50M",
"FlightLegIndex": "1",
"FlightSegment": [
  {
    "ArrivalAirportCode": "DUS",
    "ArrivalDateTime": "2016-09-07T08:30:00",
    "CarrierCode": "AB",
    "DepartureAirportCode": "HAM",
    "DepartureDateTime": "2016-09-07T07:30:00",
    "FlightDuration": "PT1H0M",
    "FlightNumber": "6743",
    "FlightSegmentIndex": "1"
  },
  {
    "ArrivalAirportCode": "AUH",
    "ArrivalDateTime": "2016-09-07T20:20:00",
    "CarrierCode": "AB",
    "DepartureAirportCode": "DUS",
    "DepartureDateTime": "2016-09-07T11:30:00",
    "FlightDuration": "PT6H50M",
    "FlightNumber": "4008",
    "FlightSegmentIndex": "2"
  },
  {
    "ArrivalAirportCode": "SYD",
    "ArrivalDateTime": "2016-09-08T17:55:00",
    "CarrierCode": "AB",
    "DepartureAirportCode": "AUH",
    "DepartureDateTime": "2016-09-07T21:55:00",
    "FlightDuration": "PT14H0M",
    "FlightNumber": "4070",
    "FlightSegmentIndex": "3"
  }
]

}



44
45
46
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 44

def initialize(raw_data)
  @raw_data = raw_data || {}
end

Instance Method Details

#extract_segmentsObject

extracts the segments of the flight from the json



62
63
64
65
66
67
68
69
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 62

def extract_segments
  data = @raw_data[:FlightSegment] || []
  if data.is_a?(Array)
    data
  else
    [data]
  end
end

#hours_all_segmentsObject

returns the hours of the flight, if nor parsable, returns nil



85
86
87
88
89
90
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 85

def hours_all_segments
  stamp = @raw_data[:FlightDuration].split("PT")[1]
  stamp.split("H")[0].to_i
rescue
  nil
end

#indexObject

returns the index of the flight leg



101
102
103
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 101

def index
  @raw_data[:FlightLegIndex].to_i
end

#is_return_flight?Boolean

returns true if we have a return flight leg.

Returns:

  • (Boolean)


111
112
113
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 111

def is_return_flight?
  index == 2
end

#is_to_flight?Boolean

returns true if we have a to flight

Returns:

  • (Boolean)


106
107
108
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 106

def is_to_flight?
  index == 1
end

#minutes_all_segmentsObject

returns the minutes of the flight, if nor parsable, returns nil



93
94
95
96
97
98
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 93

def minutes_all_segments
  stamp = @raw_data[:FlightDuration].split("PT")[1]
  stamp.split("H")[1].split("M")[0].to_i
rescue
  nil
end

#segmentsObject

returns the flight segments of the flight



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 49

def segments
  @segments ||= begin
    segments = extract_segments.map do |segment|
      PackageFlightLegSegment.new(segment)
    end
    segments.each do |segment|
      segment.sibling_segments = segments
    end
    segments
  end
end

#total_duration_secondsObject

returns the total time it will in seconds.

format by expedia: “PT21H50M”



74
75
76
77
78
79
80
81
82
# File 'lib/expedia_api/entities/package_flight_leg.rb', line 74

def total_duration_seconds
  hours   = hours_all_segments
  minutes = minutes_all_segments
  if hours && minutes
    hours * 3600 + minutes * 60
  else
    0
  end
end