Skip to content

Commit f137754

Browse files
committed
implemented rabbit_misc:plmerge/2 to merge property lists
1 parent 43b04fe commit f137754

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/rabbit_misc.erl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
-export([const/1]).
5555
-export([ntoa/1, ntoab/1]).
5656
-export([is_process_alive/1]).
57-
-export([pget/2, pget/3, pget_or_die/2, pmerge/3, pset/3]).
57+
-export([pget/2, pget/3, pget_or_die/2, pmerge/3, pset/3, plmerge/2]).
5858
-export([format_message_queue/2]).
5959
-export([append_rpc_all_nodes/4]).
6060
-export([os_cmd/1]).
@@ -228,6 +228,7 @@
228228
-spec(pget/3 :: (term(), [term()], term()) -> term()).
229229
-spec(pget_or_die/2 :: (term(), [term()]) -> term() | no_return()).
230230
-spec(pmerge/3 :: (term(), term(), [term()]) -> term()).
231+
-spec(plmerge/2 :: ([term()], [term()]) -> term()).
231232
-spec(pset/3 :: (term(), term(), [term()]) -> term()).
232233
-spec(format_message_queue/2 :: (any(), priority_queue:q()) -> term()).
233234
-spec(append_rpc_all_nodes/4 :: ([node()], atom(), atom(), [any()]) -> [any()]).
@@ -883,12 +884,19 @@ pget_or_die(K, P) ->
883884
V -> V
884885
end.
885886

887+
%% property merge
886888
pmerge(Key, Val, List) ->
887889
case proplists:is_defined(Key, List) of
888890
true -> List;
889891
_ -> [{Key, Val} | List]
890892
end.
891893

894+
%% proplists merge
895+
plmerge(P1, P2) ->
896+
K1 = proplists:get_keys(P1),
897+
K2 = proplists:get_keys(P2),
898+
P1 ++ [X || {K, _} = X <- P2, lists:member(K, K2 -- K1)].
899+
892900
pset(Key, Value, List) -> [{Key, Value} | proplists:delete(Key, List)].
893901

894902
format_message_queue(_Opt, MQ) ->

test/src/rabbit_tests.erl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ all_tests0() ->
5656
passed = test_pg_local(),
5757
passed = test_unfold(),
5858
passed = test_pmerge(),
59+
passed = test_plmerge(),
5960
passed = test_supervisor_delayed_restart(),
6061
passed = test_table_codec(),
6162
passed = test_content_framing(),
@@ -430,6 +431,12 @@ test_pmerge() ->
430431
[{c, 3} | P] = rabbit_misc:pmerge(c, 3, P),
431432
passed.
432433

434+
test_plmerge() ->
435+
P1 = [{a, 1}, {b, 2}, {c, 3}],
436+
P2 = [{a, 2}, {d, 4}],
437+
[{a, 1}, {b, 2}, {c, 3}, {d, 4}] = rabbit_misc:plmerge(P1, P2),
438+
passed.
439+
433440
test_table_codec() ->
434441
%% FIXME this does not test inexact numbers (double and float) yet,
435442
%% because they won't pass the equality assertions

0 commit comments

Comments
 (0)