Packages

A REST API testing framework for erlang

Current section

Files

Jump to
efrisby src efrisby_data.erl
Raw

src/efrisby_data.erl

-module(efrisby_data).
%% Callbacks
-export([
encode_headers/1,
json_encode/1,
type_of/1,
get/2
]).
encode_headers(Headers) ->
Function = fun(Val) -> value_to_list(Val) end,
Result = lists:keymap(Function, 2, lists:keymap(Function, 1, Headers)),
Result.
json_encode(Value) ->
jsx:encode(Value).
get(Path, Value) when erlang:is_binary(Value) ->
get(Path, jsx:decode(Value));
get(Path, Value) ->
get_data(Path, Value).
get_data(".", Value) ->
Value;
get_data(<<".">>, Value) ->
Value;
get_data(Path, Value) ->
Parts = get_path_parts(Path),
Func = fun(Part, Data) -> get_data_value(Part, Data) end,
lists:foldl(Func, Value, Parts).
get_data_value(Key, List) ->
case (is_integer_binary(Key)) of
true -> lists:nth(erlang:binary_to_integer(Key), List);
_ -> proplists:get_value(Key, List)
end.
get_path_parts(Path) when erlang:is_bitstring(Path)->
get_path_parts(erlang:binary_to_list(Path));
get_path_parts(Path) when erlang:is_atom(Path)->
get_path_parts(erlang:atom_to_list(Path));
get_path_parts(Path) ->
Parts = string:tokens(Path, "."),
Func = fun erlang:list_to_binary/1,
lists:map(Func, Parts).
value_to_list(Value) when erlang:is_bitstring(Value) ->
erlang:binary_to_list(Value);
value_to_list(Value) when erlang:is_integer(Value) ->
erlang:integer_to_list(Value);
value_to_list(Value) ->
Value.
type_of(Val) when is_integer(Val) -> integer;
type_of(Val) when is_float(Val) -> float;
type_of(Val) when is_list(Val) -> list;
type_of(Val) when is_tuple(Val) -> tuple;
type_of(Val) when is_bitstring(Val) -> bitstring;
type_of(Val) when is_binary(Val) -> binary;
type_of(Val) when is_boolean(Val) -> boolean;
type_of(Val) when is_atom(Val) -> atom;
type_of(_Val) -> unknown.
is_integer_binary(B) ->
try
_ = erlang:binary_to_integer(B),
true
catch error:badarg ->
false
end.