Skip to content

Commit 9606fee

Browse files
authored
Update Transformer functionality to return value instead of string (#858)
1 parent 6b03dfa commit 9606fee

25 files changed

+673
-540
lines changed

WireMock.Net Solution.sln.DotSettings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
<s:Boolean x:Key="/Default/UserDictionary/Words/=Scriban/@EntryIndexedValue">True</s:Boolean>
3434
<s:Boolean x:Key="/Default/UserDictionary/Words/=Sigil/@EntryIndexedValue">True</s:Boolean>
3535
<s:Boolean x:Key="/Default/UserDictionary/Words/=Stef/@EntryIndexedValue">True</s:Boolean>
36+
<s:Boolean x:Key="/Default/UserDictionary/Words/=templated/@EntryIndexedValue">True</s:Boolean>
3637
<s:Boolean x:Key="/Default/UserDictionary/Words/=Victoor/@EntryIndexedValue">True</s:Boolean>
3738
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhook/@EntryIndexedValue">True</s:Boolean>
3839
<s:Boolean x:Key="/Default/UserDictionary/Words/=Webhooks/@EntryIndexedValue">True</s:Boolean>
Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,25 @@
1-
using System;
1+
namespace WireMock.Types;
22

3-
namespace WireMock.Types
3+
/// <summary>
4+
/// Logic to use when replace a JSON node using the Transformer.
5+
/// </summary>
6+
public enum ReplaceNodeOptions
47
{
58
/// <summary>
6-
/// Flags to use when replace a JSON node using the Transformer.
9+
/// Try to evaluate a templated value.
10+
/// In case this is valid, return the value and if the value can be converted to a primitive type, use that value.
711
/// </summary>
8-
[Flags]
9-
public enum ReplaceNodeOptions
10-
{
11-
/// <summary>
12-
/// Default
13-
/// </summary>
14-
None = 0
12+
EvaluateAndTryToConvert = 0,
1513

16-
///// <summary>
17-
///// Replace boolean string value to a real boolean value. (This is used by default to maintain backward compatibility.)
18-
///// </summary>
19-
//Bool = 0b00000001,
20-
21-
///// <summary>
22-
///// Replace integer string value to a real integer value.
23-
///// </summary>
24-
//Integer = 0b00000010,
25-
26-
///// <summary>
27-
///// Replace long string value to a real long value.
28-
///// </summary>
29-
//Long = 0b00000100,
14+
/// <summary>
15+
/// Try to evaluate a templated value.
16+
/// In case this is valid, return the value, else fallback to the parse behavior.
17+
/// </summary>
18+
Evaluate = 1,
3019

31-
///// <summary>
32-
///// Replace all string values to a real values.
33-
///// </summary>
34-
//All = Bool | Integer | Long
35-
}
20+
/// <summary>
21+
/// Parse templated string to a templated string.
22+
/// (keep a templated string value as string value).
23+
/// </summary>
24+
Parse = 2
3625
}
Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,22 @@
1-
namespace WireMock.Types
1+
namespace WireMock.Types;
2+
3+
/// <summary>
4+
/// The ResponseMessage Transformers
5+
/// </summary>
6+
public enum TransformerType
27
{
38
/// <summary>
4-
/// The ResponseMessage Transformers
9+
/// https://github.com/Handlebars-Net/Handlebars.Net
510
/// </summary>
6-
public enum TransformerType
7-
{
8-
/// <summary>
9-
/// https://github.com/Handlebars-Net/Handlebars.Net
10-
/// </summary>
11-
Handlebars,
11+
Handlebars,
1212

13-
/// <summary>
14-
/// https://github.com/scriban/scriban : default
15-
/// </summary>
16-
Scriban,
13+
/// <summary>
14+
/// https://github.com/scriban/scriban : default
15+
/// </summary>
16+
Scriban,
1717

18-
/// <summary>
19-
/// https://github.com/scriban/scriban : DotLiquid
20-
/// </summary>
21-
ScribanDotLiquid
22-
}
18+
/// <summary>
19+
/// https://github.com/scriban/scriban : DotLiquid
20+
/// </summary>
21+
ScribanDotLiquid
2322
}

src/WireMock.Net/Http/WebhookSender.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ IResponseMessage originalResponseMessage
5151
switch (webhookRequest.TransformerType)
5252
{
5353
case TransformerType.Handlebars:
54-
var factoryHandlebars = new HandlebarsContextFactory(_settings.FileSystemHandler, _settings.HandlebarsRegistrationCallback);
55-
transformer = new Transformer(factoryHandlebars);
54+
var factoryHandlebars = new HandlebarsContextFactory(_settings);
55+
transformer = new Transformer(_settings, factoryHandlebars);
5656
break;
5757

5858
case TransformerType.Scriban:
5959
case TransformerType.ScribanDotLiquid:
6060
var factoryDotLiquid = new ScribanContextFactory(_settings.FileSystemHandler, webhookRequest.TransformerType);
61-
transformer = new Transformer(factoryDotLiquid);
61+
transformer = new Transformer(_settings, factoryDotLiquid);
6262
break;
6363

6464
default:

src/WireMock.Net/ResponseBuilders/ITransformResponseBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ public interface ITransformResponseBuilder : IDelayResponseBuilder
2929
/// <returns>
3030
/// The <see cref="IResponseBuilder"/>.
3131
/// </returns>
32-
IResponseBuilder WithTransformer(TransformerType transformerType = TransformerType.Handlebars, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.None);
32+
IResponseBuilder WithTransformer(TransformerType transformerType = TransformerType.Handlebars, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.Evaluate);
3333
}

src/WireMock.Net/ResponseBuilders/Response.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ public IResponseBuilder WithTransformer(ReplaceNodeOptions options)
207207
}
208208

209209
/// <inheritdoc />
210-
public IResponseBuilder WithTransformer(TransformerType transformerType, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.None)
210+
public IResponseBuilder WithTransformer(TransformerType transformerType, bool transformContentFromBodyAsFile = false, ReplaceNodeOptions options = ReplaceNodeOptions.Evaluate)
211211
{
212212
UseTransformer = true;
213213
TransformerType = transformerType;
@@ -314,14 +314,14 @@ string RemoveFirstOccurrence(string source, string find)
314314
switch (TransformerType)
315315
{
316316
case TransformerType.Handlebars:
317-
var factoryHandlebars = new HandlebarsContextFactory(settings.FileSystemHandler, settings.HandlebarsRegistrationCallback);
318-
responseMessageTransformer = new Transformer(factoryHandlebars);
317+
var factoryHandlebars = new HandlebarsContextFactory(settings);
318+
responseMessageTransformer = new Transformer(settings, factoryHandlebars);
319319
break;
320320

321321
case TransformerType.Scriban:
322322
case TransformerType.ScribanDotLiquid:
323323
var factoryDotLiquid = new ScribanContextFactory(settings.FileSystemHandler, TransformerType);
324-
responseMessageTransformer = new Transformer(factoryDotLiquid);
324+
responseMessageTransformer = new Transformer(settings, factoryDotLiquid);
325325
break;
326326

327327
default:

src/WireMock.Net/Serialization/WebhookMapper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static IWebhook Map(WebhookModel model)
3939

4040
if (!Enum.TryParse<ReplaceNodeOptions>(model.Request.TransformerReplaceNodeOptions, out var option))
4141
{
42-
option = ReplaceNodeOptions.None;
42+
option = ReplaceNodeOptions.Evaluate;
4343
}
4444
webhook.Request.TransformerReplaceNodeOptions = option;
4545
}

src/WireMock.Net/Server/WireMockServer.ConvertMapping.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ private static IResponseBuilder InitResponseBuilder(ResponseModel responseModel)
250250

251251
if (!Enum.TryParse<ReplaceNodeOptions>(responseModel.TransformerReplaceNodeOptions, out var option))
252252
{
253-
option = ReplaceNodeOptions.None;
253+
option = ReplaceNodeOptions.Evaluate;
254254
}
255255
responseBuilder = responseBuilder.WithTransformer(
256256
transformerType,

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy