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);
}