summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rabbit_parameter_validation.erl11
-rw-r--r--src/rabbit_policy.erl12
2 files changed, 16 insertions, 7 deletions
diff --git a/src/rabbit_parameter_validation.erl b/src/rabbit_parameter_validation.erl
index af940dde..2235340f 100644
--- a/src/rabbit_parameter_validation.erl
+++ b/src/rabbit_parameter_validation.erl
@@ -16,7 +16,7 @@
-module(rabbit_parameter_validation).
--export([number/2, binary/2, list/2, proplist/3]).
+-export([number/2, binary/2, list/2, regex/2, proplist/3]).
number(_Name, Term) when is_number(Term) ->
ok;
@@ -36,6 +36,15 @@ list(_Name, Term) when is_list(Term) ->
list(Name, Term) ->
{error, "~s should be list, actually was ~p", [Name, Term]}.
+regex(Name, Term) when is_binary(Term) ->
+ case re:compile(Term) of
+ {ok, _} -> ok;
+ {error, Reason} -> {error, "~s should be regular expression "
+ "but is invalid: ~p", [Name, Reason]}
+ end;
+regex(Name, Term) ->
+ {error, "~s should be a binary but was ~p", [Name, Term]}.
+
proplist(Name, Constraints, Term) when is_list(Term) ->
{Results, Remainder}
= lists:foldl(
diff --git a/src/rabbit_policy.erl b/src/rabbit_policy.erl
index 05b43a2e..69480c9c 100644
--- a/src/rabbit_policy.erl
+++ b/src/rabbit_policy.erl
@@ -22,7 +22,7 @@
-include("rabbit.hrl").
--import(rabbit_misc, [pget/2]).
+-import(rabbit_misc, [pget/2, pget/3]).
-export([register/0]).
-export([name/1, get/2, set/1]).
@@ -129,14 +129,14 @@ match(Name, Policies) ->
end.
matches(#resource{name = Name}, Policy) ->
- lists:prefix(binary_to_list(pget(<<"prefix">>, Policy)),
- binary_to_list(Name)).
+ match =:= re:run(Name, pget(<<"pattern">>, Policy), [{capture, none}]).
sort_pred(A, B) ->
- size(pget(<<"prefix">>, A)) >= size(pget(<<"prefix">>, B)).
+ pget(<<"priority">>, A, 0) >= pget(<<"priority">>, B, 0).
%%----------------------------------------------------------------------------
policy_validation() ->
- [{<<"prefix">>, fun rabbit_parameter_validation:binary/2, mandatory},
- {<<"policy">>, fun rabbit_parameter_validation:list/2, mandatory}].
+ [{<<"priority">>, fun rabbit_parameter_validation:number/2, optional},
+ {<<"pattern">>, fun rabbit_parameter_validation:regex/2, mandatory},
+ {<<"policy">>, fun rabbit_parameter_validation:list/2, mandatory}].