Skip to content

Commit

Permalink
Update Transformer functionality to return value instead of string (#858
Browse files Browse the repository at this point in the history
)
  • Loading branch information
StefH authored Dec 11, 2022
1 parent 6b03dfa commit 9606fee
Show file tree
Hide file tree
Showing 25 changed files with 673 additions and 540 deletions.
1 change: 1 addition & 0 deletions WireMock.Net Solution.sln.DotSettings
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
<s:Boolean x:Key="/Default/UserDictionary/Words/=Scriban/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sigil/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Stef/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=templated/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Victoor/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhook/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhooks/@EntryIndexedValue">True</s:Boolean>
Expand Down
47 changes: 18 additions & 29 deletions src/WireMock.Net.Abstractions/Types/ReplaceNodeOptions.cs
Original file line number Diff line number Diff line change
@@ -1,36 +1,25 @@
using System;
namespace WireMock.Types;

namespace WireMock.Types
/// <summary>
/// Logic to use when replace a JSON node using the Transformer.
/// </summary>
public enum ReplaceNodeOptions
{
/// <summary>
/// Flags to use when replace a JSON node using the Transformer.
/// Try to evaluate a templated value.
/// In case this is valid, return the value and if the value can be converted to a primitive type, use that value.
/// </summary>
[Flags]
public enum ReplaceNodeOptions
{
/// <summary>
/// Default
/// </summary>
None = 0
EvaluateAndTryToConvert = 0,

///// <summary>
///// Replace boolean string value to a real boolean value. (This is used by default to maintain backward compatibility.)
///// </summary>
//Bool = 0b00000001,

///// <summary>
///// Replace integer string value to a real integer value.
///// </summary>
//Integer = 0b00000010,

///// <summary>
///// Replace long string value to a real long value.
///// </summary>
//Long = 0b00000100,
/// <summary>
/// Try to evaluate a templated value.
/// In case this is valid, return the value, else fallback to the parse behavior.
/// </summary>
Evaluate = 1,

///// <summary>
///// Replace all string values to a real values.
///// </summary>
//All = Bool | Integer | Long
}
/// <summary>
/// Parse templated string to a templated string.
/// (keep a templated string value as string value).
/// </summary>
Parse = 2
}
33 changes: 16 additions & 17 deletions src/WireMock.Net.Abstractions/Types/TransformerType.cs
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
namespace WireMock.Types
namespace WireMock.Types;

/// <summary>
/// The ResponseMessage Transformers
/// </summary>
public enum TransformerType
{
/// <summary>
/// The ResponseMessage Transformers
/// https://github.com/Handlebars-Net/Handlebars.Net
/// </summary>
public enum TransformerType
{
/// <summary>
/// https://github.com/Handlebars-Net/Handlebars.Net
/// </summary>
Handlebars,
Handlebars,

/// <summary>
/// https://github.com/scriban/scriban : default
/// </summary>
Scriban,
/// <summary>
/// https://github.com/scriban/scriban : default
/// </summary>
Scriban,

/// <summary>
/// https://github.com/scriban/scriban : DotLiquid
/// </summary>
ScribanDotLiquid
}
/// <summary>
/// https://github.com/scriban/scriban : DotLiquid
/// </summary>
ScribanDotLiquid
}
6 changes: 3 additions & 3 deletions src/WireMock.Net/Http/WebhookSender.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,14 @@ IResponseMessage originalResponseMessage
switch (webhookRequest.TransformerType)
{
case TransformerType.Handlebars:
var factoryHandlebars = new HandlebarsContextFactory(_settings.FileSystemHandler, _settings.HandlebarsRegistrationCallback);
transformer = new Transformer(factoryHandlebars);
var factoryHandlebars = new HandlebarsContextFactory(_settings);
transformer = new Transformer(_settings, factoryHandlebars);
break;

case TransformerType.Scriban:
case TransformerType.ScribanDotLiquid:
var factoryDotLiquid = new ScribanContextFactory(_settings.FileSystemHandler, webhookRequest.TransformerType);
transformer = new Transformer(factoryDotLiquid);
transformer = new Transformer(_settings, factoryDotLiquid);
break;

default:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ public interface ITransformResponseBuilder : IDelayResponseBuilder
/// <returns>
/// The <see cref="IResponseBuilder"/>.
/// </returns>
IResponseBuilder WithTransformer(TransformerType transformerType = TransformerType.Handlebars, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.None);
IResponseBuilder WithTransformer(TransformerType transformerType = TransformerType.Handlebars, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.Evaluate);
}
8 changes: 4 additions & 4 deletions src/WireMock.Net/ResponseBuilders/Response.cs
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ public IResponseBuilder WithTransformer(ReplaceNodeOptions options)
}

/// <inheritdoc />
public IResponseBuilder WithTransformer(TransformerType transformerType, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.None)
public IResponseBuilder WithTransformer(TransformerType transformerType, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.Evaluate)
{
UseTransformer = true;
TransformerType = transformerType;
Expand Down Expand Up @@ -314,14 +314,14 @@ string RemoveFirstOccurrence(string source, string find)
switch (TransformerType)
{
case TransformerType.Handlebars:
var factoryHandlebars = new HandlebarsContextFactory(settings.FileSystemHandler, settings.HandlebarsRegistrationCallback);
responseMessageTransformer = new Transformer(factoryHandlebars);
var factoryHandlebars = new HandlebarsContextFactory(settings);
responseMessageTransformer = new Transformer(settings, factoryHandlebars);
break;

case TransformerType.Scriban:
case TransformerType.ScribanDotLiquid:
var factoryDotLiquid = new ScribanContextFactory(settings.FileSystemHandler, TransformerType);
responseMessageTransformer = new Transformer(factoryDotLiquid);
responseMessageTransformer = new Transformer(settings, factoryDotLiquid);
break;

default:
Expand Down
2 changes: 1 addition & 1 deletion src/WireMock.Net/Serialization/WebhookMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public static IWebhook Map(WebhookModel model)

if (!Enum.TryParse<ReplaceNodeOptions>(model.Request.TransformerReplaceNodeOptions, out var option))
{
option = ReplaceNodeOptions.None;
option = ReplaceNodeOptions.Evaluate;
}
webhook.Request.TransformerReplaceNodeOptions = option;
}
Expand Down
2 changes: 1 addition & 1 deletion src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ private static IResponseBuilder InitResponseBuilder(ResponseModel responseModel)

if (!Enum.TryParse<ReplaceNodeOptions>(responseModel.TransformerReplaceNodeOptions, out var option))
{
option = ReplaceNodeOptions.None;
option = ReplaceNodeOptions.Evaluate;
}
responseBuilder = responseBuilder.WithTransformer(
transformerType,
Expand Down
Loading

0 comments on commit 9606fee

Please sign in to comment.