Skip to content

Commit 7b8fafa

Browse files
Merge pull request #46 from thygesteffensen/dev
Dev
2 parents e63df13 + 9adf814 commit 7b8fafa

20 files changed

Lines changed: 408 additions & 83 deletions

File tree

.github/workflows/.releaserc

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,5 @@ plugins:
1515
- path: ../../artifacts/PowerAutomateMockUp.*.nupkg
1616
label: Parser DLL
1717

18-
- - "@semantic-release/exec"
19-
- publishCmd: "dotnet nuget push ..\\..\\artifacts\\PowerAutomateMockUp.*.nupkg --source https://nuget.pkg.github.com/thygesteffensen/index.json --api-key ${process.env.GITHUB_TOKEN}"
20-
2118
- - "@semantic-release/exec"
2219
- publishCmd: "dotnet nuget push ..\\..\\artifacts\\PowerAutomateMockUp.*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${process.env.CI_NUGET_API_KEY}"

.github/workflows/build.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ jobs:
1313
name: Testing
1414
steps:
1515
- name: Checkout code base
16-
uses: actions/checkout@v2
16+
uses: actions/checkout@v3
1717

1818
- name: Run tests
1919
run: dotnet test --verbosity normal
@@ -23,10 +23,10 @@ jobs:
2323
name: Building
2424
steps:
2525
- name: Checkout code base
26-
uses: actions/checkout@v2
26+
uses: actions/checkout@v3
2727

2828
- name: Setup MSBuild
29-
uses: microsoft/setup-msbuild@v1
29+
uses: microsoft/setup-msbuild@v1.1
3030

3131
- name: Restore NuGet packages
3232
run: nuget restore PowerAutomateMockUp.sln
@@ -35,7 +35,7 @@ jobs:
3535
run: msbuild /p:OutputPath=../build /p:Configuration=Release /p:RestorePackages=false
3636

3737
- name: Archive build to artifacts
38-
uses: actions/upload-artifact@v2
38+
uses: actions/upload-artifact@v3
3939
with:
4040
name: build
4141
path: |

.github/workflows/release.yml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: windows-latest
1313
steps:
1414
- name: Checkout repo
15-
uses: actions/checkout@v2
15+
uses: actions/checkout@v3
1616

1717
- name: Run tests
1818
run: dotnet test --verbosity normal
@@ -24,12 +24,10 @@ jobs:
2424
- test
2525
steps:
2626
- name: Checkout repo
27-
uses: actions/checkout@v2
27+
uses: actions/checkout@v3
2828

2929
- name: Setup Node.js
30-
uses: actions/setup-node@v1
31-
with:
32-
node-version: 13
30+
uses: actions/setup-node@v3
3331

3432
- name: Add plugin for conventional commits
3533
run: npm install conventional-changelog-conventionalcommits
@@ -39,7 +37,7 @@ jobs:
3937
run: npm install @semantic-release/exec -D
4038
working-directory: ./.github/workflows
4139

42-
- name: Dry Run Semantic to get next Version nummber
40+
- name: Dry Run Semantic to get next Version number
4341
working-directory: ./.github/workflows
4442
env:
4543
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
@@ -52,7 +50,7 @@ jobs:
5250
run: echo ${env:RELEASE_VERSION}
5351

5452
- name: Setup MSBuild
55-
uses: microsoft/setup-msbuild@v1
53+
uses: microsoft/setup-msbuild@v1.1
5654

5755
- name: Restore NuGet packages
5856
run: nuget restore PowerAutomateMockUp.sln

.github/workflows/todo.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
steps:
1313
- uses: "actions/checkout@master"
1414
- name: "TODO to Issue"
15-
uses: "alstr/todo-to-issue-action@v2.4"
15+
uses: "alstr/todo-to-issue-action@v4"
1616
id: "todo"
1717
with:
1818
TOKEN: ${{ secrets.GITHUB_TOKEN }}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System.Linq;
2+
using Microsoft.Extensions.Options;
3+
using Parser.ExpressionParser.Functions.Base;
4+
using Parser.ExpressionParser.Functions.CustomException;
5+
6+
namespace Parser.ExpressionParser.Functions.Implementations.Miscellaneous
7+
{
8+
public class ParametersFunction : Function
9+
{
10+
private readonly WorkflowParameters _flowParameters;
11+
12+
public ParametersFunction(IOptions<WorkflowParameters> flowParameters) : base("parameters")
13+
{
14+
_flowParameters = flowParameters?.Value;
15+
}
16+
17+
public override ValueContainer ExecuteFunction(params ValueContainer[] parameters)
18+
{
19+
var paramKey = parameters.FirstOrDefault();
20+
21+
if (paramKey == null || paramKey.Type() != ValueContainer.ValueType.String)
22+
{
23+
throw new ArgumentError("The parameters functions is expected to have one argument of type string");
24+
}
25+
26+
if (_flowParameters?.Parameters == null)
27+
{
28+
return paramKey;
29+
}
30+
31+
if (_flowParameters.Parameters.ContainsKey(paramKey.GetValue<string>()))
32+
{
33+
return _flowParameters.Parameters[paramKey.GetValue<string>()];
34+
}
35+
36+
throw InvalidTemplateException.BuildInvalidLanguageFunction("ActionName", "parameters");
37+
}
38+
}
39+
}

PowerAutomateMockUp/ExpressionParser/ValueContainer.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,16 @@ public ValueContainer()
112112
_value = null;
113113
}
114114

115-
public ValueContainer(JToken json)
115+
public ValueContainer(JToken json, IExpressionEngine expressionEngine = null)
116116
{
117-
var v = JsonToValueContainer(json);
117+
if (json == null)
118+
{
119+
_type = ValueType.Null;
120+
_value = null;
121+
return;
122+
}
123+
124+
var v = JsonToValueContainer(json, expressionEngine);
118125
_type = v._type;
119126
_value = v._value;
120127
}
@@ -222,24 +229,26 @@ public Dictionary<string, ValueContainer> AsDict()
222229
throw new PowerAutomateMockUpException("Can't get none object value container as dict.");
223230
}
224231

225-
private ValueContainer JsonToValueContainer(JToken json)
232+
private ValueContainer JsonToValueContainer(JToken json, IExpressionEngine expressionEngine)
226233
{
227234
switch (json)
228235
{
229-
case JObject jObject:
236+
case JObject _:
230237
{
231238
var dictionary = json.ToDictionary(pair => ((JProperty) pair).Name, token =>
232239
{
233-
if (token.Children().Count() != 1) return JsonToValueContainer(token.Children().First());
240+
if (token.Children().Count() != 1)
241+
return JsonToValueContainer(token.Children().First(), expressionEngine);
234242

235243
var t = token.First;
236244
return t.Type switch
237245
{
238-
JTokenType.String => new ValueContainer(t.Value<string>(), true),
246+
JTokenType.String => expressionEngine?.ParseToValueContainer(t.Value<string>()) ??
247+
new ValueContainer(t.Value<string>()),
239248
JTokenType.Boolean => new ValueContainer(t.Value<bool>()),
240249
JTokenType.Integer => new ValueContainer(t.Value<int>()),
241250
JTokenType.Float => new ValueContainer(t.Value<float>()),
242-
_ => JsonToValueContainer(token.Children().First())
251+
_ => JsonToValueContainer(token.Children().First(), expressionEngine)
243252
};
244253
});
245254

@@ -260,7 +269,8 @@ private ValueContainer JsonToValueContainer(JToken json)
260269
JTokenType.Integer => new ValueContainer(jValue.Value<int>()),
261270
JTokenType.Float => new ValueContainer(jValue.Value<float>()),
262271
JTokenType.Null => new ValueContainer(),
263-
JTokenType.String => new ValueContainer(jValue.Value<string>()),
272+
JTokenType.String => expressionEngine?.ParseToValueContainer(jValue.Value<string>()) ??
273+
new ValueContainer(jValue.Value<string>()),
264274
JTokenType.None => new ValueContainer(),
265275
JTokenType.Guid => new ValueContainer(jValue.Value<Guid>().ToString()),
266276
_ => throw new PowerAutomateMockUpException(

PowerAutomateMockUp/FlowParser/ActionExecutors/ActionExecutorBase.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,13 @@ public abstract class ActionExecutorBase
1010

1111
public string ActionName { get; private set; }
1212

13-
public ValueContainer Inputs { get; private set; }
13+
public ValueContainer Inputs { get; protected set; }
1414

1515
public void InitializeActionExecutor(string actionName, JToken json)
1616
{
1717
ActionName = actionName;
1818
Json = json;
1919

20-
var inputs = Json.SelectToken("$.inputs");
21-
if (inputs != null)
22-
{
23-
Inputs = new ValueContainer(inputs);
24-
}
25-
2620
ProcessJson();
2721
}
2822
protected abstract void ProcessJson();

PowerAutomateMockUp/FlowParser/ActionExecutors/Implementations/ControlActions/TerminateActionExecutor.cs

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66

77
namespace Parser.FlowParser.ActionExecutors.Implementations.ControlActions
88
{
9-
public class TerminateActionExecutor : DefaultBaseActionExecutor
9+
public class TerminateActionExecutor : InputsBaseActionExecutor
1010
{
1111
private readonly ILogger<TerminateActionExecutor> _logger;
1212

13-
public TerminateActionExecutor(ILogger<TerminateActionExecutor> logger)
13+
public TerminateActionExecutor(ILogger<TerminateActionExecutor> logger, IExpressionEngine expressionEngine) :
14+
base(expressionEngine)
1415
{
1516
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
1617
}
@@ -23,18 +24,20 @@ public override Task<ActionResult> Execute()
2324
{
2425
case "Succeeded":
2526
case "Cancelled":
26-
_logger.LogInformation($"Terminate Action {ActionName} reached with status {runStatus}.");
27+
_logger.LogInformation("Terminate Action {ActionName} reached with status {RunStatus}",
28+
ActionName, runStatus);
2729
return Task.FromResult(new ActionResult
2830
{
2931
ActionStatus = ActionStatus.Succeeded,
3032
ContinueExecution = false
3133
});
3234
case "Failed":
3335
var exceptionMessage = "Terminate action with status: Failed.";
34-
36+
3537
if (!Inputs.GetValue<Dictionary<string, ValueContainer>>()
36-
.TryGetValue("runError", out var runErrorDict)) throw new PowerAutomateMockUpException(exceptionMessage);
37-
38+
.TryGetValue("runError", out var runErrorDict))
39+
throw new PowerAutomateMockUpException(exceptionMessage);
40+
3841
var dict = runErrorDict.GetValue<Dictionary<string, ValueContainer>>();
3942

4043
if (dict.TryGetValue("code", out var code))
@@ -46,10 +49,11 @@ public override Task<ActionResult> Execute()
4649
{
4750
exceptionMessage += $" Error message: {message}.";
4851
}
49-
50-
_logger.LogInformation(
51-
$"Terminate Action {ActionName} reached with status {runStatus}. Error code: {code}. Error message: {message}. Throwing exception.");
52-
52+
53+
_logger.LogInformation("Terminate Action {ActionName} reached with status {RunStatus}. " +
54+
"Error code: {Code}. Error message: {Message}. Throwing exception",
55+
ActionName, runStatus, code, message);
56+
5357
throw new PowerAutomateMockUpException(exceptionMessage);
5458
default:
5559
throw new Exception($"Unknown runStatus: {runStatus}");

PowerAutomateMockUp/FlowParser/ActionExecutors/Implementations/DataOperation/ComposeActionExecutor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
namespace Parser.FlowParser.ActionExecutors.Implementations.DataOperation
66
{
7-
public class ComposeActionExecutor : DefaultBaseActionExecutor
7+
public class ComposeActionExecutor : InputsBaseActionExecutor
88
{
99
private readonly IExpressionEngine _expressionEngine;
1010

11-
public ComposeActionExecutor(IExpressionEngine expressionEngine)
11+
public ComposeActionExecutor(IExpressionEngine expressionEngine) : base(expressionEngine)
1212
{
1313
_expressionEngine = expressionEngine ?? throw new ArgumentNullException(nameof(expressionEngine));
1414
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using Parser.ExpressionParser;
3+
4+
namespace Parser.FlowParser.ActionExecutors
5+
{
6+
public abstract class InputsBaseActionExecutor : ActionExecutorBase
7+
{
8+
private readonly IExpressionEngine _expressionEngine;
9+
10+
protected InputsBaseActionExecutor(IExpressionEngine expressionEngine)
11+
{
12+
_expressionEngine = expressionEngine ?? throw new ArgumentNullException(nameof(expressionEngine));
13+
}
14+
15+
protected override void ProcessJson()
16+
{
17+
var inputs = Json.SelectToken("$.inputs");
18+
if (inputs != null)
19+
{
20+
Inputs = new ValueContainer(inputs, _expressionEngine);
21+
}
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)