Class: ExpediaApi::Entities::PackageFlightLegSegment
- Inherits:
-
Object
- Object
- ExpediaApi::Entities::PackageFlightLegSegment
- 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
-
#sibling_segments ⇒ Object
Returns the value of attribute sibling_segments.
Instance Method Summary collapse
-
#arrival_airport_code ⇒ Object
returns the arrival airport code of the segment.
-
#arrival_time ⇒ Object
returns a datetime for the arrival date of the segment.
-
#carrier_code ⇒ Object
returns the carrier code of the segment.
-
#departure_airport_code ⇒ Object
returns the departure airport code of the segment.
-
#departure_time ⇒ Object
returns a departure datetime for the departure time of the segment.
-
#duration_seconds ⇒ Object
returns the duration how long the segment takes.
-
#flight_number ⇒ Object
returns the flight number of the flight.
-
#hours_flight ⇒ Object
returns the hours of the flight, if nor parsable, returns nil.
-
#index ⇒ Object
returns the index of the segment.
-
#initialize(raw_data) ⇒ PackageFlightLegSegment
constructor
A new instance of PackageFlightLegSegment.
-
#is_first_segment_of_flight? ⇒ Boolean
returns true if it is the first segment of the flight.
-
#is_last_segment_of_flight? ⇒ Boolean
returns true if it is the last segment of the flight.
-
#minutes_flight ⇒ Object
returns the minutes of the flight, if nor parsable, returns nil.
-
#next_segment ⇒ Object
returns the next segment followed by this segment.
-
#previous_segment ⇒ Object
returns the previous segment preceeded by this segment.
-
#stay_duration_seconds ⇒ Object
returns the time between this segment and the next one.
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_segments ⇒ Object
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_code ⇒ Object
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_time ⇒ Object
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_code ⇒ Object
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_code ⇒ Object
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_time ⇒ Object
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_seconds ⇒ Object
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_number ⇒ Object
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_flight ⇒ Object
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 |
#index ⇒ Object
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
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
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_flight ⇒ Object
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_segment ⇒ Object
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_segment ⇒ Object
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_seconds ⇒ Object
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 |