Browse Source

Merge pull request #442 from shino/pretty-print-list

Pretty print lists of records at top level and field values
pull/445/head
Mark Allen 7 years ago
committed by GitHub
parent
commit
f369835b65
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 21 deletions
  1. +9
    -2
      src/lager.erl
  2. +40
    -0
      test/pr_composite_test.erl
  3. +0
    -19
      test/pr_nested_record_test.erl

+ 9
- 2
src/lager.erl View File

@ -538,13 +538,15 @@ unsafe_format(Fmt, Args) ->
_:_ -> io_lib:format("FORMAT ERROR: ~p ~p", [Fmt, Args])
end.
%% @doc Print a record lager found during parse transform
%% @doc Print a record or a list of records lager found during parse transform
pr(Record, Module) when is_tuple(Record), is_atom(element(1, Record)) ->
pr(Record, Module, []);
pr(List, Module) when is_list(List) ->
pr(List, Module, []);
pr(Record, _) ->
Record.
%% @doc Print a record lager found during parse transform
%% @doc Print a record or a list of records lager found during parse transform
pr(Record, Module, Options) when is_tuple(Record), is_atom(element(1, Record)), is_list(Options) ->
try
case is_record_known(Record, Module) of
@ -558,9 +560,14 @@ pr(Record, Module, Options) when is_tuple(Record), is_atom(element(1, Record)),
error:undef ->
Record
end;
pr(List, Module, Options) when is_list(List), is_list(Options) ->
[pr(Element, Module, Options) || Element <- List];
pr(Record, _, _) ->
Record.
zip([FieldName|RecordFields], [FieldValue|Record], Module, Options, ToReturn) when is_list(FieldValue) ->
zip(RecordFields, Record, Module, Options,
[{FieldName, pr(FieldValue, Module, Options)}|ToReturn]);
zip([FieldName|RecordFields], [FieldValue|Record], Module, Options, ToReturn) ->
Compress = lists:member(compress, Options),
case is_tuple(FieldValue) andalso

+ 40
- 0
test/pr_composite_test.erl View File

@ -0,0 +1,40 @@
-module(pr_composite_test).
-compile([{parse_transform, lager_transform}]).
-record(a, {field1 :: term(), field2 :: term()}).
-record(b, {field1 :: term() , field2 :: term()}).
-include_lib("eunit/include/eunit.hrl").
nested_record_test() ->
A = #a{field1 = x, field2 = y},
B = #b{field1 = A, field2 = {}},
Pr_B = lager:pr(B, ?MODULE),
?assertEqual({'$lager_record', b,
[{field1, {'$lager_record', a,
[{field1, x},{field2, y}]}},
{field2, {}}]},
Pr_B).
list_field_test() ->
As = [#a{field1 = 1, field2 = a2},
#a{field1 = 2, field2 = a2}],
B = #b{field1 = As, field2 = b2},
Pr_B = lager:pr(B, ?MODULE),
?assertEqual({'$lager_record', b,
[{field1, [{'$lager_record', a,
[{field1, 1},{field2, a2}]},
{'$lager_record', a,
[{field1, 2},{field2, a2}]}]},
{field2, b2}]},
Pr_B).
list_of_records_test() ->
As = [#a{field1 = 1, field2 = a2},
#a{field1 = 2, field2 = a2}],
Pr_As = lager:pr(As, ?MODULE),
?assertEqual([{'$lager_record', a, [{field1, 1},{field2, a2}]},
{'$lager_record', a, [{field1, 2},{field2, a2}]}],
Pr_As).

+ 0
- 19
test/pr_nested_record_test.erl View File

@ -1,19 +0,0 @@
-module(pr_nested_record_test).
-compile([{parse_transform, lager_transform}]).
-record(a, {field1 :: term(), field2 :: term()}).
-record(b, {field1 :: term() , field2 :: term()}).
-include_lib("eunit/include/eunit.hrl").
nested_record_test() ->
A = #a{field1 = x, field2 = y},
B = #b{field1 = A, field2 = {}},
Pr_B = lager:pr(B, ?MODULE),
?assertEqual({'$lager_record', b,
[{field1, {'$lager_record', a,
[{field1, x},{field2, y}]}},
{field2, {}}]},
Pr_B).

Loading…
Cancel
Save