class MalindoAir

Attributes

res[RW]

Public Instance Methods

Private Instance Methods

flights(result) click to toggle source
# File lib/teecket/malindo_air.rb, line 122
def flights(result)
  result["SearchAirlineFlightsResult"]
end
get() click to toggle source
# File lib/teecket/malindo_air.rb, line 21
def get
  get_initialization_page
  get_result_page
end
get_initialization_page() click to toggle source
# File lib/teecket/malindo_air.rb, line 26
def get_initialization_page
  prepare

  url = "https://mobileapi.malindoair.com/GQWCF_FlightEngine/" <<
        "GQDPMobileBookingService.svc/InitializeGQService"

  uri = URI(url)

  req = Net::HTTP::Post.new(uri.path, "Content-Type" => "application/json")
  req.body = '{"B2BID":"0","UserLoginId":"0","CustomerUserID":91,' <<
    '"Language":"en-GB","isearchType":"15"}'

  self.res = request(uri, req)
end
get_result_page() click to toggle source
# File lib/teecket/malindo_air.rb, line 41
def get_result_page
  key = res["wscContext"]

  url = "https://mobileapi.malindoair.com/GQWCF_FlightEngine/" <<
        "GQDPMobileBookingService.svc/SearchAirlineFlights"

  uri = URI(url)

  req = Net::HTTP::Post.new(uri.path,
                            "Content-Type" => "application/json",
                            "WscContext" => key)

  req.body = payload

  self.res = request(uri, req)
end
payload() click to toggle source
# File lib/teecket/malindo_air.rb, line 108
def payload
  "{\"sd\":{\"Adults\":1,\"AirlineCode\":\"\"," <<
    "\"ArrivalCity\":\"#{to}\",\"ArrivalCityName\":null," <<
    "\"BookingClass\":null,\"CabinClass\":0,\"ChildAge\":[]," <<
    "\"Children\":0,\"CustomerId\":0,\"CustomerType\":0," <<
    "\"CustomerUserId\":91,\"DepartureCity\":\"#{from}\"," <<
    "\"DepartureCityName\":null," <<
    "\"DepartureDate\":\"/Date(#{date})/\"," <<
    "\"DepartureDateGap\":0,\"DirectFlightsOnly\":false," <<
    "\"Infants\":0,\"IsPackageUpsell\":false,\"JourneyType\":1," <<
    "\"ReturnDate\":\"/Date(-2208988800000)/\"," <<
    "\"ReturnDateGap\":0,\"SearchOption\":1},\"fsc\":\"0\"}"
end
prepare() click to toggle source
# File lib/teecket/malindo_air.rb, line 15
def prepare
  self.date = DateTime.parse(date).strftime("%Q")
  self.from = from.upcase
  self.to = to.upcase
end
process() click to toggle source
# File lib/teecket/malindo_air.rb, line 58
def process
  json = JSON.parse(res.body)

  flights(json).each do |flight|
    params = if trips(flight).count > 1
               process_for_transit(flight)
             else
               process_for_non_transit(flight)
             end

    process_for_all(flight, params)
  end
end
process_for_all(flight, params) click to toggle source
# File lib/teecket/malindo_air.rb, line 89
def process_for_all(flight, params)
  depart_at = depart_at_selector(flight)
  fare = fare_selector(flight)
  origin = origin_selector(flight)
  destination = destination_selector(flight)
  flight_number = flight_number_selector(flight)

  if params[:transit] == "NO"
    add_to_fares(flight_name: "Malindo Air",
                 flight_number: flight_number,
                 transit: params[:transit],
                 origin: origin,
                 destination: destination,
                 depart_at: depart_at,
                 arrive_at: params[:arrive_at],
                 fare: fare)
  end
end
process_for_non_transit(flight) click to toggle source
# File lib/teecket/malindo_air.rb, line 83
def process_for_non_transit(flight)
  arrive_at = arrive_at_selector(flight["ArrivalDate"])

  { transit: "NO", arrive_at: arrive_at }
end
process_for_transit(flight) click to toggle source
# File lib/teecket/malindo_air.rb, line 76
def process_for_transit(flight)
  trips = trips(flight)
  arrive_at = arrive_at_selector(trips[trips.size - 1]["ArrivalDate"])

  { transit: "YES", arrive_at: arrive_at }
end
trips(flight) click to toggle source
# File lib/teecket/malindo_air.rb, line 72
def trips(flight)
  flight["SegmentInformation"]
end