diff options
-rw-r--r-- | src/rabbit_parameter_validation.erl | 11 | ||||
-rw-r--r-- | src/rabbit_policy.erl | 12 |
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}]. |