Current section

Files

Jump to
ndc_ex_sdk lib message base.ex
Raw

lib/message/base.ex

defmodule NDCEx.Message.Base do
import XmlBuilder
require Logger
@acceptable_ndc_methods [
AirShopping: ["AirShoppingRQ", "AirShoppingRS"],
FlightPrice: ["FlightPriceRQ", "FlightPriceRS"],
SeatAvailability: ["SeatAvailabilityRQ", "SeatAvailabilityRS"],
ServiceList: ["ServiceListRQ", "ServiceListRS"],
ServicePrice: ["ServicePriceRQ", "ServicePriceRS"],
OrderCreate: ["OrderCreateRQ", "OrderViewRS"],
OrderList: ["OrderListRQ", "OrderListRS"],
OrderRetrieve: ["OrderRetrieveRQ", "OrderViewRS"],
OrderCancel: ["OrderCancelRQ", "OrderCancelRS"]
]
@node_names [
AirShopping: :CoreQuery,
FlightPrice: [:Query, :DataLists, :Metadata],
SeatAvailability: [:Query, :DataLists]
]
def build_document(method, params) do
[request_name, response_name] = get_request_data(method)
build_body(request_name, params)
|> generate
end
defp get_request_data(method), do: @acceptable_ndc_methods[method]
defp document_attributes(request_name) do
%{
"xmlns" => "http://www.iata.org/IATA/EDIST",
"xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance",
"xsi:schemaLocation" => "http://www.iata.org/IATA/EDIST ../#{request_name}.xsd",
"Version" => "15.2"
}
end
defp build_body(request_name, params) do
element(String.to_atom(request_name), document_attributes(request_name), [
element(Document: params[:Document]),
element(Party: params[:Party]),
element(Parameters: params[:Parameters]),
element(Travelers: [params[:Travelers]]),
element(CoreQuery: [params[:CoreQuery]]),
element(Preferences: params[:Preferences])
]
)
end
#defp get_node_name(method), do: @node_names[method]
#defp get_node(params, method), do: {get_node_name(method), params[get_node_name(method)]}
#defp get_node_element(params, method), do: element( { get_node_name(method), get_node(params, method) } )
end