Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -module(x_version_4).
- -import(util_record, [insert_version/2,
- update_version/2,
- insert_field/3,
- update_field/3,
- remove_field/2,
- update_record/3]).
- -include_lib("eunit/include/eunit.hrl").
- -compile(export_all).
- % -record(x, {field_a :: string()}).
- % -record(x, {version = {version, 1} :: {version, integer()},
- % field_a :: string()}).
- % -record(x, {version = {version, 2} :: {version, integer()},
- % field_a :: string(),
- % field_b :: string()}).
- % -record(x, {version = {version, 3} :: {version, integer()},
- % field_b :: string()}).
- -record(x, {version = {version, 4} :: {version, integer()},
- field_b :: atom()}).
- -spec update_x(not_versioned | integer(), tuple()) -> #x{}.
- update_x(not_versioned, X) ->
- update_x(1, insert_version(1, X));
- update_x(1, X) ->
- update_x(2, update_version(2, insert_field(3, "default_field_b", X)));
- update_x(2, X) ->
- update_x(3, update_version(3, remove_field(2, X)));
- update_x(3, X) ->
- update_x(4, update_version(4, update_field(2, fun list_to_atom/1, X)));
- update_x(4, X) ->
- X.
- -spec update_x(tuple()) -> #x{}.
- update_x(X) ->
- update_record(x, fun update_x/2, X).
- update_x_not_versioned_test() ->
- ?assertEqual(#x{version = {version, 4},
- field_b = default_field_b},
- update_x({x, "field_a"})).
- update_x_version_1_test() ->
- ?assertEqual(#x{version = {version, 4},
- field_b = default_field_b},
- update_x({x, {version, 1}, "field_a"})).
- update_x_version_2_test() ->
- ?assertEqual(#x{version = {version, 4},
- field_b = field_b},
- update_x({x, {version, 2}, "field_a", "field_b"})).
- update_x_version_3_test() ->
- ?assertEqual(#x{version = {version, 4},
- field_b = field_b},
- update_x({x, {version, 3}, "field_b"})).
- update_x_version_4_test() ->
- ?assertEqual(#x{version = {version, 4},
- field_b = field_b},
- update_x({x, {version, 4}, field_b})).
Add Comment
Please, Sign In to add comment