diff --git a/Rest.Net.Example/Program.cs b/Rest.Net.Example/Program.cs index 98ce619..a08fad6 100644 --- a/Rest.Net.Example/Program.cs +++ b/Rest.Net.Example/Program.cs @@ -99,11 +99,11 @@ namespace MontoyaTech.Rest.Net.Example File.WriteAllText("Client.cs", listener.GenerateCSharpClient()); - File.WriteAllText("Client.js", listener.GenerateJavascriptClient(useJsonNames: true)); + File.WriteAllText("Client.js", listener.GenerateJavascriptClient(useJsonNames: true, namedParameters: true)); File.WriteAllText("StaticClient.cs", listener.GenerateCSharpClient("StaticClient", staticCode: true)); - File.WriteAllText("StaticClient.js", listener.GenerateJavascriptClient("StaticClient", staticCode: true, useJsonNames: true)); + File.WriteAllText("StaticClient.js", listener.GenerateJavascriptClient("StaticClient", staticCode: true, useJsonNames: true, namedParameters: true)); Console.WriteLine("Generated Client.cs, Client.js, StaticClient.cs, StaticClient.js"); @@ -155,6 +155,8 @@ namespace MontoyaTech.Rest.Net.Example Console.WriteLine("Download output:" + str); } + Console.WriteLine("Done. Starting listener."); + listener.Block(); } diff --git a/Rest.Net/Rest.Net.csproj b/Rest.Net/Rest.Net.csproj index f13b072..3c33dd9 100644 --- a/Rest.Net/Rest.Net.csproj +++ b/Rest.Net/Rest.Net.csproj @@ -17,7 +17,7 @@ MontoyaTech.Rest.Net MontoyaTech.Rest.Net True - 1.9.0 + 1.9.1 Logo_Symbol_Black_Outline.png README.md diff --git a/Rest.Net/RestJavascriptClientGenerator.cs b/Rest.Net/RestJavascriptClientGenerator.cs index 24ef589..344f40e 100644 --- a/Rest.Net/RestJavascriptClientGenerator.cs +++ b/Rest.Net/RestJavascriptClientGenerator.cs @@ -31,6 +31,11 @@ namespace MontoyaTech.Rest.Net /// public bool NamedParameters = false; + /// + /// The minimum number of parameters before using named parameters. Default is 0. + /// + public int NamedParameterMin = 0; + /// /// Generates a Javascript Client from a given set of routes and returns it. /// @@ -79,7 +84,11 @@ namespace MontoyaTech.Rest.Net writer.WriteLine("@param {Function} urlHandler An optional function to process request urls before they are sent. This must return the url."); writer.WriteLine("@param {Function} requestHandler An optional function to process requests before they are sent. This must return the request."); writer.Outdent().WriteLine("*/"); - writer.Write("static Init(baseUrl, urlHandler = null, requestHandler = null) ").WriteLine("{").Indent(); + if (this.NamedParameters) + writer.Write("static Init({ baseUrl, urlHandler = null, requestHandler = null } = {}) "); + else + writer.Write("static Init(baseUrl, urlHandler = null, requestHandler = null) "); + writer.WriteLine("{").Indent(); //Make sure the baseUrl isn't null or whitespace writer.WriteBreak().WriteLine("if (baseUrl == null || baseUrl == undefined || baseUrl.trim() == '') {").Indent(); @@ -110,7 +119,11 @@ namespace MontoyaTech.Rest.Net writer.WriteLine("@param {Function} urlHandler An optional function to process request urls before they are sent. This must return the url."); writer.WriteLine("@param {Function} requestHandler An optional function to process requests before they are sent. This must return the request."); writer.Outdent().WriteLine("*/"); - writer.Write("constructor(baseUrl, urlHandler = null, requestHandler = null) ").WriteLine("{").Indent(); + if (this.NamedParameters) + writer.Write("constructor({ baseUrl, urlHandler = null, requestHandler = null } = {}) "); + else + writer.Write("constructor(baseUrl, urlHandler = null, requestHandler = null) "); + writer.WriteLine("{").Indent(); //Make sure the baseUrl isn't null or whitespace writer.WriteBreak().WriteLine("if (baseUrl == null || baseUrl == undefined || baseUrl.trim() == '') {").Indent(); @@ -373,7 +386,10 @@ namespace MontoyaTech.Rest.Net writer.Outdent().WriteLine("*/"); writer.Write("constructor("); - writer.WriteAssert(this.UseJsonNames, "{"); + + var parameterCount = fields.Length + properties.Length; + + writer.WriteAssert(this.UseJsonNames && parameterCount > this.NamedParameterMin, "{ "); //Write the default fields foreach (var field in fields) @@ -393,7 +409,7 @@ namespace MontoyaTech.Rest.Net writer.WriteSeparator().Write(EscapeName(property.Name)).Write(" = ").Write(this.GetTypeDefaultValue(property.PropertyType)); } - writer.WriteAssert(this.UseJsonNames, "} = {}"); + writer.WriteAssert(this.UseJsonNames && parameterCount > this.NamedParameterMin, " } = {}"); writer.WriteLine(") {").Indent(); //Init the default fields @@ -650,7 +666,11 @@ namespace MontoyaTech.Rest.Net else writer.Write($"async {(routeName == null ? methodInfo.Name : routeName.Name)}("); - //Generate the functions parameters + int parameterCount = (parameters.Length - 1) + (routeRequest != null ? 1 : 0) + (routeResponse != null && routeResponse.Parameter ? 1 : 0); + + writer.WriteAssert(this.NamedParameters && parameterCount > this.NamedParameterMin, "{ "); + + //Generate the functions parameters, skip the default context parameter. if (parameters != null) { for (int i = 1; i < parameters.Length; i++) @@ -672,6 +692,7 @@ namespace MontoyaTech.Rest.Net writer.Write("input"); } + writer.WriteAssert(this.NamedParameters && parameterCount > this.NamedParameterMin, " } = {}"); writer.WriteLine(") {").Indent(); //Generate the url diff --git a/Rest.Net/RouteListener.cs b/Rest.Net/RouteListener.cs index 6a4b903..9392c12 100644 --- a/Rest.Net/RouteListener.cs +++ b/Rest.Net/RouteListener.cs @@ -257,8 +257,9 @@ namespace MontoyaTech.Rest.Net /// Whether or not to generate a static client. Default is false. /// Whether or not to use JSON Property name overrides during code generation. Default is false. /// Whether or not to generate routes that use named parameters over positional parameters. Default is false. + /// The minimum number of parameters before converting to named parameters. Default is 0. /// - public string GenerateJavascriptClient(string clientName = "Client", bool staticCode = false, bool useJsonNames = false, bool namedParameters = false) + public string GenerateJavascriptClient(string clientName = "Client", bool staticCode = false, bool useJsonNames = false, bool namedParameters = false, int namedParameterMin = 0) { var generator = new RestJavascriptClientGenerator(); @@ -266,6 +267,7 @@ namespace MontoyaTech.Rest.Net generator.StaticCode = staticCode; generator.UseJsonNames = useJsonNames; generator.NamedParameters = namedParameters; + generator.NamedParameterMin = namedParameterMin; return generator.Generate(this); }