constraint <- ws? app_name ws? between_op ws? version ws? "," ws? version ws? !.
/ ws? app_name ws? constraint_op ws? version ws? !.
/ ws? app_name ws? !.
`
case Node of
[_,AppName,_, _] ->
{ok, AppName};
[_,AppName,_,Op,_,Vsn,_, _] ->
{ok,
{AppName,
rlx_goal_utils:to_vsn(Vsn),
rlx_goal_utils:to_op(Op)}};
[_,AppName,_,Op,_,Vsn1,_,_,_,Vsn2,_,_] ->
{ok,
{AppName,
rlx_goal_utils:to_vsn(Vsn1),
rlx_goal_utils:to_vsn(Vsn2),
rlx_goal_utils:to_op(Op)}};
_ ->
io:format("~p~n", [Node])
end
` ;
ws <- [ \t\n\s\r] ;
app_name <- [a-zA-Z0-9_]+
` erlang:list_to_atom(erlang:binary_to_list(erlang:iolist_to_binary(Node))) ` ;
between_op <-
":" ws? ( "btwn" / "between" ) ws? ":"
` case Node of
[C,_,Op,_,C] -> erlang:iolist_to_binary([C,Op,C]);
_ -> Node
end
` ;
constraint_op <- "=" / "-" / "<=" / "<" / "~>" / ">=" / ">" / word_constraint_op / ":" ;
word_constraint_op <-
":" ws? ( "gte" / "lte" / "gt" / "lt" / "pes" ) ws? ":"
` case Node of
[C,_,Op,_,C] -> erlang:iolist_to_binary([C,Op,C]);
_ -> Node
end
` ;
version <- [0-9a-zA-Z-+.]+ ;
%% This only exists to get around a bug in erlang where if
%% warnings_as_errors is specified `nowarn` directives are ignored
`-compile(export_all).`