From 6c64bbe4becbb2cf24bd6da4ede101c846fa4ae3 Mon Sep 17 00:00:00 2001 From: MattMo Date: Wed, 16 Mar 2022 00:24:39 -0700 Subject: [PATCH] Fixed bugs and added a few helper functions. --- Rest.Net/Rest.Net/Route.cs | 66 ++++++++++++++++++++++++++++++++------ 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/Rest.Net/Rest.Net/Route.cs b/Rest.Net/Rest.Net/Route.cs index e41b9eb..83cdeac 100644 --- a/Rest.Net/Rest.Net/Route.cs +++ b/Rest.Net/Rest.Net/Route.cs @@ -37,6 +37,7 @@ namespace MontoyaTech.Rest.Net /// /// Creates a new route with a given method, syntax, target and optional close response flag. /// + /// /// /// /// @@ -52,6 +53,7 @@ namespace MontoyaTech.Rest.Net /// /// Creates a new route with a given method, syntax, target and optional close response flag. /// + /// /// /// /// @@ -59,6 +61,50 @@ namespace MontoyaTech.Rest.Net public Route(HttpRequestMethod method, string syntax, Func target, bool closeResponse = true) : this(method.ToString(), syntax, target, closeResponse) { } + /// + /// Returns a list of the argument names for this route. + /// + /// + public List GetArguments() + { + var segments = this.Syntax.Split('/').Where(segment => segment.Length > 0).Select(segment => segment.Trim()).ToList(); + + var results = new List(); + + foreach (var segment in segments) + if (segment.StartsWith("{")) + results.Add(segment.Substring(1, segment.Length - 2)); + + return results; + } + + /// + /// Returns the url for this route including arguments. + /// + /// + public string GetUrl() + { + var segments = this.Syntax.Split('/').Where(segment => segment.Length > 0).Select(segment => segment.Trim()).ToList(); + + var builder = new StringBuilder(); + + foreach (var segment in segments) + { + builder.Append('/'); + + if (segment.StartsWith("{")) + builder.Append(segment); + else if (segment == "*") + builder.Append("*"); + else if (segment == "**") + break; + else + builder.Append(segment); + } + + return builder.ToString(); + } + /// /// Invokes this route with a context and a given set of string arguments. /// @@ -192,7 +238,7 @@ namespace MontoyaTech.Rest.Net RouteArgumentConverter.Convert(arguments[1]), RouteArgumentConverter.Convert(arguments[2]), RouteArgumentConverter.Convert(arguments[3]), - RouteArgumentConverter.Convert(arguments[4]) + RouteArgumentConverter.Convert(arguments[4]) ); } } @@ -220,8 +266,8 @@ namespace MontoyaTech.Rest.Net RouteArgumentConverter.Convert(arguments[1]), RouteArgumentConverter.Convert(arguments[2]), RouteArgumentConverter.Convert(arguments[3]), - RouteArgumentConverter.Convert(arguments[4]), - RouteArgumentConverter.Convert(arguments[5]) + RouteArgumentConverter.Convert(arguments[4]), + RouteArgumentConverter.Convert(arguments[5]) ); } } @@ -249,9 +295,9 @@ namespace MontoyaTech.Rest.Net RouteArgumentConverter.Convert(arguments[1]), RouteArgumentConverter.Convert(arguments[2]), RouteArgumentConverter.Convert(arguments[3]), - RouteArgumentConverter.Convert(arguments[4]), - RouteArgumentConverter.Convert(arguments[5]), - RouteArgumentConverter.Convert(arguments[6]) + RouteArgumentConverter.Convert(arguments[4]), + RouteArgumentConverter.Convert(arguments[5]), + RouteArgumentConverter.Convert(arguments[6]) ); } } @@ -279,10 +325,10 @@ namespace MontoyaTech.Rest.Net RouteArgumentConverter.Convert(arguments[1]), RouteArgumentConverter.Convert(arguments[2]), RouteArgumentConverter.Convert(arguments[3]), - RouteArgumentConverter.Convert(arguments[4]), - RouteArgumentConverter.Convert(arguments[5]), - RouteArgumentConverter.Convert(arguments[6]), - RouteArgumentConverter.Convert(arguments[7]) + RouteArgumentConverter.Convert(arguments[4]), + RouteArgumentConverter.Convert(arguments[5]), + RouteArgumentConverter.Convert(arguments[6]), + RouteArgumentConverter.Convert(arguments[7]) ); } }