summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Privitera <priviterag@gmail.com>2015-09-02 09:24:56 +0100
committerGiuseppe Privitera <priviterag@gmail.com>2015-09-03 10:08:56 +0100
commitf1377540aa410eb26a2f8e7fae489044d6636b7b (patch)
tree46a6d4d6f0ea6832c83aac66c3b538699ba8a918
parent43b04fee5990f23d28cefdd5ecf67b4fc1c05297 (diff)
downloadrabbitmq-server-git-f1377540aa410eb26a2f8e7fae489044d6636b7b.tar.gz
implemented rabbit_misc:plmerge/2 to merge property lists
-rw-r--r--src/rabbit_misc.erl10
-rw-r--r--test/src/rabbit_tests.erl7
2 files changed, 16 insertions, 1 deletions
diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl
index a781f18895..b45d600217 100644
--- a/src/rabbit_misc.erl
+++ b/src/rabbit_misc.erl
@@ -54,7 +54,7 @@
-export([const/1]).
-export([ntoa/1, ntoab/1]).
-export([is_process_alive/1]).
--export([pget/2, pget/3, pget_or_die/2, pmerge/3, pset/3]).
+-export([pget/2, pget/3, pget_or_die/2, pmerge/3, pset/3, plmerge/2]).
-export([format_message_queue/2]).
-export([append_rpc_all_nodes/4]).
-export([os_cmd/1]).
@@ -228,6 +228,7 @@
-spec(pget/3 :: (term(), [term()], term()) -> term()).
-spec(pget_or_die/2 :: (term(), [term()]) -> term() | no_return()).
-spec(pmerge/3 :: (term(), term(), [term()]) -> term()).
+-spec(plmerge/2 :: ([term()], [term()]) -> term()).
-spec(pset/3 :: (term(), term(), [term()]) -> term()).
-spec(format_message_queue/2 :: (any(), priority_queue:q()) -> term()).
-spec(append_rpc_all_nodes/4 :: ([node()], atom(), atom(), [any()]) -> [any()]).
@@ -883,12 +884,19 @@ pget_or_die(K, P) ->
V -> V
end.
+%% property merge
pmerge(Key, Val, List) ->
case proplists:is_defined(Key, List) of
true -> List;
_ -> [{Key, Val} | List]
end.
+%% proplists merge
+plmerge(P1, P2) ->
+ K1 = proplists:get_keys(P1),
+ K2 = proplists:get_keys(P2),
+ P1 ++ [X || {K, _} = X <- P2, lists:member(K, K2 -- K1)].
+
pset(Key, Value, List) -> [{Key, Value} | proplists:delete(Key, List)].
format_message_queue(_Opt, MQ) ->
diff --git a/test/src/rabbit_tests.erl b/test/src/rabbit_tests.erl
index a7435a3860..188222057b 100644
--- a/test/src/rabbit_tests.erl
+++ b/test/src/rabbit_tests.erl
@@ -56,6 +56,7 @@ all_tests0() ->
passed = test_pg_local(),
passed = test_unfold(),
passed = test_pmerge(),
+ passed = test_plmerge(),
passed = test_supervisor_delayed_restart(),
passed = test_table_codec(),
passed = test_content_framing(),
@@ -430,6 +431,12 @@ test_pmerge() ->
[{c, 3} | P] = rabbit_misc:pmerge(c, 3, P),
passed.
+test_plmerge() ->
+ P1 = [{a, 1}, {b, 2}, {c, 3}],
+ P2 = [{a, 2}, {d, 4}],
+ [{a, 1}, {b, 2}, {c, 3}, {d, 4}] = rabbit_misc:plmerge(P1, P2),
+ passed.
+
test_table_codec() ->
%% FIXME this does not test inexact numbers (double and float) yet,
%% because they won't pass the equality assertions