Packages
exvcr
0.3.1
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)
defp do_parse_headers([{key,value}|tail], acc) do
replaced_value = to_string(value) |> ExVCR.Filter.filter_sensitive_data
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_request_body(body) do
to_string(body) |> ExVCR.Filter.filter_sensitive_data
end
defoverridable [parse_request_body: 1]
defp parse_keyword_list(params) do
Enum.map(params, fn({k,v}) -> {k,to_string(v)} end)
end
defoverridable [parse_keyword_list: 1]
end
end
end