defmodule NDCEx do require HTTPotion require Logger use Timex def request(method, data, config) do processing_start = Time.now NDCEx.Message.Base.build_document(method, data, config) |> rest_call_with_message(config, method, processing_start) end def rest_call_with_message({xml, processing_time}, config, method, processing_start) do Logger.debug xml url = NDCEx.Message.Base.build_url(config[:server][:url], method) headers = get_headers(config[:rest][:headers], method) processing_end = Time.now case HTTPotion.post(url, [body: xml, headers: headers, timeout: 30000 ]) do %HTTPotion.Response{body: body, headers: _headers, status_code: 200 } -> get_response(xml, body, config, processing_start, processing_end) |> process_response(config[:soap]) %HTTPotion.Response{body: body, headers: _headers, status_code: _status_code } -> xml = get_response(xml, body, config, processing_start, processing_end) {:error, NDCNormalize.remove_soap_tags(xml, config[:soap])} %HTTPotion.Response{status_code: 404} -> {:error, error_message("Request does not exist")} _ -> {:error, error_message("Unknown Error")} end end defp process_response(body, config) when config == nil, do: {:ok, body} defp process_response(body, config) when is_list(config), do: {:ok, NDCNormalize.remove_soap_tags(body, config)} defp build_url(url, method), do: String.replace(url, "{{NDC-method}}", Atom.to_string(method)) defp error_message(message), do: "#{message}" defp remove_tag(doc, tag), do: String.replace(doc, tag, "") def get_mix_config(key) when is_atom(key), do: Application.get_env(:ndc_ex_sdk, key) defp get_headers(headers, method) do Enum.map(headers, fn ({key, value}) -> {key, String.replace(value, "{{NDC-method}}", Atom.to_string(method))} end) end defp get_response(request, response, config, processing_start, processing_end) do FileLogger.log(request, response, config, processing_start, processing_end) processing_time = Time.diff(processing_end, processing_start, :milliseconds) response_time = Time.diff(Time.now, processing_end, :milliseconds) "#{response}\n \n\n\n" end end