Hi, ChicagoBoss-0.8.7, don't know how to define nested objects in CB, so i use prolists for this purpose. Unfort. if you return json with record where one of the fields is proplist cb crashes due to is_list() and following list_to_binary(Val) what is not quite correct. So i made changes in boss_model_manager_boss_db.erl (attached) to solve this, works fine for me. Also i have made changes in date/time formatting as 1) lists are no good for json, they are converted to Arrays, binary is much better 2) it is better to pass date/time in universal format "cO" and make formatting on client side with JS
to_json(Object) ->
Data = lists:map (fun
({Attr, Val}) when is_list (Val) ->
%{Attr, list_to_binary (Val)}; %original, removed by can2nac, 15-05-14
{Attr, case is_proplist(Val) of true -> Val; false -> list_to_binary (Val)
end}; %added by can2nac, 15-05-14
({Attr, {_,_,_} = Val}) ->
%%list_to_binary was added and format was changed
{Attr, list_to_binary (erlydtl_filters:date
(calendar:now_to_datetime (Val), "cO"))}; %added by can2nac, 15-05-14
%{Attr, erlydtl_filters:date (calendar:now_to_datetime (Val), "F d,
Y H:i:s")}; %original, removed by can2nac, 15-05-14
({Attr, {{_, _, _}, {_, _, _}} = Val}) ->
%%format was changed
{Attr, list_to_binary (erlydtl_filters:date (Val, "cO"))}; %added by
can2nac, 15-05-14
%{Attr, list_to_binary (erlydtl_filters:date (Val, "F d, Y
H:i:s"))}; %original, removed by can2nac, 15-05-14
(Other) ->
Other
end, Object:attributes()),
{struct, Data}.
%%added by can2nac, 05-15-14, taken from
%https://code.google.com/p/zotonic/source/browse/src/support/z_utils.erl?r=d9da1b9de75c2567aca49a22548e05c89808d94a
%with 2 additinal lines according to spec. "whose first elements are keys
atoms, which work as shorthand for tuples {Atom, true}",
http://www.erlang.org/doc/man/proplists.html
is_proplist([]) -> true;
is_proplist([{K,_}|R]) when is_atom(K) -> is_proplist(R);
is_proplist([A|R]) when is_atom(A) -> is_proplist(R); %added by can2nac,
15-05-14
is_proplist([A]) when is_atom(A) -> true; %added by can2nac, 15-05-14
is_proplist(_) -> false.
*No heavy testing was performed, use on your own risk*
--
You received this message because you are subscribed to the Google Groups
"ChicagoBoss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
Visit this group at http://groups.google.com/group/chicagoboss.
To view this discussion on the web visit
https://groups.google.com/d/msgid/chicagoboss/2ff4ee02-4443-41b4-a337-98beba7e0607%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
boss_model_manager_boss_db.erl
Description: Binary data
