-
Notifications
You must be signed in to change notification settings - Fork 132
/
converter.ex
61 lines (51 loc) · 2.01 KB
/
converter.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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
Enum.map(string, fn({x,y}) -> {binary_to_atom(x),y} end) |> ExVCR.Request.new
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]
end
end
end