Class: SabreDevStudio::Flight::Shop::StreamlinedItineraries

Inherits:
Object
  • Object
show all
Defined in:
lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(itineraries) ⇒ StreamlinedItineraries

Returns a new instance of StreamlinedItineraries.



30
31
32
33
34
35
36
37
38
39
40
41
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
67
68
69
70
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 30

def initialize(itineraries)
  @flights = []
  @outbounds = []
  @min_price = @max_price = nil
  @min_outbound_duration = @max_outbound_duration = nil
  outbound_flights = Hash.new
  outbound_flight = nil

  itineraries.each do |itin|
    segments = itin['AirItinerary']['OriginDestinationOptions']['OriginDestinationOption']
    amount = itin['AirItineraryPricingInfo']['ItinTotalFare']['TotalFare']['Amount'].to_f
    segments.each_with_index.each do |segment, idx|
      direction = idx % 2 == 0 ? 'outbound' : 'inbound'
      flight = Flight.new(segment['FlightSegment'], direction, segment['ElapsedTime'])
      @flights << flight.to_hash

      set_price(amount)
      if flight.direction == 'outbound'
        set_duration(flight.duration)
        outbound_flight = flight
        outbound_flights[outbound_flight.sha] ||= OutboundFlight.new(flight, amount)
      else
        outbound_flights[outbound_flight.sha].add_inbound_flight(flight, amount)
      end

      if segment['FlightSegment'].is_a?(Array)
        segment['FlightSegment'].each_with_index do |flight_segment, idx|
          # next if idx > 0
          connection = Flight.new(flight_segment, 'connecting', segment['ElapsedTime'])
          next if connection.sha == flight.sha
          @flights << connection.to_hash
          flight.add_connecting_flight(connection)
        end
      end
    end
  end

  @airline_codes = @flights.map { |f| f[:airlines] }.flatten.uniq.sort
  @flights.uniq!
  @outbounds = outbound_flights.values.map(&:to_hash)
end

Instance Attribute Details

#airline_codesObject (readonly)

Returns the value of attribute airline_codes.



27
28
29
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 27

def airline_codes
  @airline_codes
end

#flightsObject (readonly)

Returns the value of attribute flights.



27
28
29
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 27

def flights
  @flights
end

#max_outbound_durationObject (readonly)

Returns the value of attribute max_outbound_duration.



27
28
29
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 27

def max_outbound_duration
  @max_outbound_duration
end

#max_priceObject (readonly)

Returns the value of attribute max_price.



27
28
29
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 27

def max_price
  @max_price
end

#min_outbound_durationObject (readonly)

Returns the value of attribute min_outbound_duration.



27
28
29
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 27

def min_outbound_duration
  @min_outbound_duration
end

#min_priceObject (readonly)

Returns the value of attribute min_price.



27
28
29
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 27

def min_price
  @min_price
end

#outboundsObject (readonly)

Returns the value of attribute outbounds.



27
28
29
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 27

def outbounds
  @outbounds
end

Instance Method Details

#set_duration(duration) ⇒ Object



76
77
78
79
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 76

def set_duration(duration)
  @min_outbound_duration = duration if @min_outbound_duration.nil? || duration < @min_outbound_duration
  @max_outbound_duration = duration if @max_outbound_duration.nil? || duration > @max_outbound_duration
end

#set_price(fare) ⇒ Object



72
73
74
75
# File 'lib/sabre_dev_studio-flight/shop/streamlined_itineraries.rb', line 72

def set_price(fare)
  @min_price = fare if @min_price.nil? || fare < @min_price
  @max_price = fare if @max_price.nil? || fare > @max_price
end