Packages
exvcr
0.8.4
0.17.1
0.17.0
0.16.0
0.15.2
0.15.1
0.15.0
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.5
0.13.4
0.13.3
0.13.2
0.13.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.2
0.11.1
0.11.0
0.10.4
0.10.3
0.10.2
0.10.1
0.10.0
0.9.1
0.9.0
0.8.12
0.8.11
0.8.10
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.7
0.1.6
0.1.5
HTTP request/response recording library for elixir, inspired by VCR.
Current section
Files
Jump to
Current section
Files
lib/exvcr/converter.ex
defmodule ExVCR.Converter do
@moduledoc """
Provides helpers for adapter converters.
"""
defmacro __using__(_) do
quote do
@doc """
Parse string format into original request / response tuples.
"""
def convert_from_string(%{"request" => request, "response" => response}) do
%{ request: string_to_request(request), response: string_to_response(response) }
end
defoverridable [convert_from_string: 1]
@doc """
Parse request and response tuples into string format.
"""
def convert_to_string(request, response) do
%{ request: request_to_string(request), response: response_to_string(response) }
end
defoverridable [convert_to_string: 2]
defp string_to_request(string) do
request = Enum.map(string, fn({x,y}) -> {String.to_atom(x),y} end) |> Enum.into(%{})
struct(ExVCR.Request, request)
end
defoverridable [string_to_request: 1]
defp string_to_response(string), do: raise ExVCR.ImplementationMissingError
defoverridable [string_to_response: 1]
defp request_to_string(request), do: raise ExVCR.ImplementationMissingError
defoverridable [request_to_string: 1]
defp response_to_string(response), do: raise ExVCR.ImplementationMissingError
defoverridable [response_to_string: 1]
defp parse_headers(headers) do
do_parse_headers(headers, [])
end
defoverridable [parse_headers: 1]
defp do_parse_headers([], acc) do
Enum.reverse(acc) |> Enum.uniq(fn({key,value}) -> key end)
end
defp do_parse_headers([{key,value}|tail], acc) do
replaced_value = to_string(value) |> ExVCR.Filter.filter_sensitive_data
replaced_value = ExVCR.Filter.filter_request_header(to_string(key), to_string(replaced_value))
do_parse_headers(tail, [{to_string(key), replaced_value}|acc])
end
defoverridable [do_parse_headers: 2]
defp parse_url(url) do
to_string(url) |> ExVCR.Filter.filter_url_params
end
defoverridable [parse_url: 1]
defp parse_keyword_list(params) do
Enum.map(params, fn({k,v}) -> {k,to_string(v)} end)
end
defoverridable [parse_keyword_list: 1]
def parse_request_body(:error), do: ""
def parse_request_body({:ok, body}) do
parse_request_body(body)
end
def parse_request_body(body) do
body_string = try do
to_string(body)
rescue
_e in Protocol.UndefinedError -> inspect(body)
end
ExVCR.Filter.filter_sensitive_data(body_string)
end
defoverridable [parse_request_body: 1]
end
end
end