Class: ExpediaApi::Entities::PackageFlightLegSegment

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

Overview

class handling each of the flight legs segments

receives data in this format:

"FlightSegmentIndex"=>"2",
"DepartureAirportCode"=>"SAW",
"ArrivalAirportCode"=>"DXB",
"DepartureDateTime"=>"2016-05-31T21:45:00",
"ArrivalDateTime"=>"2016-06-01T03:20:00",
"CarrierCode"=>"PC",
"FlightNumber"=>"5660",
"FlightDuration"=>"PT4H35M"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_data) ⇒ PackageFlightLegSegment

Returns a new instance of PackageFlightLegSegment.



20
21
22
23
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 20

def initialize(raw_data)
  @raw_data         = raw_data || {}
  @sibling_segments = []
end

Instance Attribute Details

#sibling_segmentsObject

Returns the value of attribute sibling_segments.



18
19
20
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 18

def sibling_segments
  @sibling_segments
end

Instance Method Details

#arrival_airport_codeObject

returns the arrival airport code of the segment



51
52
53
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 51

def arrival_airport_code
  @raw_data[:ArrivalAirportCode]
end

#arrival_timeObject

returns a datetime for the arrival date of the segment



31
32
33
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 31

def arrival_time
  DateTime.parse(@raw_data[:ArrivalDateTime])
end

#carrier_codeObject

returns the carrier code of the segment



41
42
43
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 41

def carrier_code
  @raw_data[:CarrierCode]
end

#departure_airport_codeObject

returns the departure airport code of the segment



46
47
48
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 46

def departure_airport_code
  @raw_data[:DepartureAirportCode]
end

#departure_timeObject

returns a departure datetime for the departure time of the segment



26
27
28
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 26

def departure_time
  DateTime.parse(@raw_data[:DepartureDateTime])
end

#duration_secondsObject

returns the duration how long the segment takes. returns 0 if it can not be identified.



65
66
67
68
69
70
71
72
73
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 65

def duration_seconds
  hours   = hours_flight
  minutes = minutes_flight
  if hours && minutes
    hours * 3600 + minutes * 60
  else
    0
  end
end

#flight_numberObject

returns the flight number of the flight



92
93
94
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 92

def flight_number
  @raw_data[:FlightNumber]
end

#hours_flightObject

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



76
77
78
79
80
81
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 76

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

#indexObject

returns the index of the segment



36
37
38
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 36

def index
  @raw_data[:FlightSegmentIndex].to_i
end

#is_first_segment_of_flight?Boolean

returns true if it is the first segment of the flight

Returns:

  • (Boolean)


103
104
105
106
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 103

def is_first_segment_of_flight?
  return true if sibling_segments.empty?
  sibling_segments.sort_by {|segment| segment.index }.first == self
end

#is_last_segment_of_flight?Boolean

returns true if it is the last segment of the flight

Returns:

  • (Boolean)


97
98
99
100
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 97

def is_last_segment_of_flight?
  return true if sibling_segments.empty?
  sibling_segments.sort_by {|segment| segment.index }.reverse.first == self
end

#minutes_flightObject

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



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

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

#next_segmentObject

returns the next segment followed by this segment



109
110
111
112
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 109

def next_segment
  return nil if sibling_segments.empty?
  sibling_segments[sibling_segments.sort_by(&:index).index(self) + 1]
end

#previous_segmentObject

returns the previous segment preceeded by this segment



115
116
117
118
119
120
121
122
123
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 115

def previous_segment
  return nil if sibling_segments.empty?
  index = sibling_segments.sort_by(&:index).index(self)
  if index && index >= 1
    sibling_segments[index - 1]
  else
    nil
  end
end

#stay_duration_secondsObject

returns the time between this segment and the next one.



56
57
58
59
60
61
# File 'lib/expedia_api/entities/package_flight_leg_segment.rb', line 56

def stay_duration_seconds
  return 0 unless next_segment
  # when we arrive at the next airport, minus when we arrived at this
  # airport.
  (next_segment.departure_time.to_time - arrival_time.to_time).to_i
end