Skip to content

Commit

Permalink
Add IPowerShellObjectMapper
Browse files Browse the repository at this point in the history
  • Loading branch information
FrediKats committed Jul 2, 2024
1 parent 2e80010 commit 9d6295c
Show file tree
Hide file tree
Showing 12 changed files with 107 additions and 37 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Kysect.PowerShellRunner.Abstractions.Objects;
using Kysect.PowerShellRunner.Abstractions.Variables;

namespace Kysect.PowerShellRunner.Abstractions.Cmdlets;

public interface IPowerShellCmdletExecutor
{
IReadOnlyCollection<IPowerShellObject> Execute(IPowerShellCmdlet cmdlet);
PowerShellVariable<IPowerShellObject> InitializeVariable(string variableName, IPowerShellCmdlet cmdlet);

IReadOnlyCollection<T> Execute<T>(IPowerShellCmdlet<T> cmdlet) where T : notnull;
PowerShellVariable<T> InitializeVariable<T>(string variableName, IPowerShellCmdlet<T> cmdlet) where T : notnull;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using Kysect.PowerShellRunner.Abstractions.Objects;

namespace Kysect.PowerShellRunner.Abstractions.Cmdlets;

public interface IPowerShellObjectMapper
{
T Map<T>(IPowerShellObject powerShellObject) where T : notnull;
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using Kysect.CommonLib.BaseTypes.Extensions;
using Kysect.CommonLib.DependencyInjection.Logging;
using Kysect.PowerShellRunner.Abstractions.Accessors;
using Kysect.PowerShellRunner.Abstractions.Cmdlets;
using Kysect.PowerShellRunner.Accessors;
using Kysect.PowerShellRunner.Cmdlets;
using Microsoft.Extensions.DependencyInjection;

namespace Kysect.PowerShellRunner.Configuration;
Expand Down Expand Up @@ -29,6 +31,11 @@ public static IServiceCollection AddPowerShellAccessor(this IServiceCollection s
return serviceCollection.AddSingleton(GetPowerShellAccessor);
}

public static IServiceCollection AddPowerShellCmdletExecutor(this IServiceCollection serviceCollection)
{
return serviceCollection.AddSingleton<IPowerShellCmdletExecutor, PowerShellCmdletExecutor>();
}

private static IPowerShellAccessor GetPowerShellAccessor(IServiceProvider serviceProvider)
{
IPowerShellLogger powerShellLogger = serviceProvider.GetRequiredService<IPowerShellLogger>();
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
using FluentAssertions;
using Kysect.PowerShellRunner.Abstractions.Variables;
using Kysect.PowerShellRunner.Cmdlets;
using Kysect.PowerShellRunner.CustomCmdlets;
using Kysect.PowerShellRunner.Mapping;
using Kysect.PowerShellRunner.Tests.Mocks;
using NUnit.Framework;

namespace Kysect.PowerShellRunner.Tests;

public class PowerShellCmdletExecutorTests
{
[Test]
public void ExecuteAndSetTo_NonGenericImplementation_FinishWithoutError()
{
string expectedResult = @"C:\\Folder";

using var testPowerShellAccessor = new FakePowerShellAccessor();
var powerShellCmdletExecutor = new PowerShellCmdletExecutor(testPowerShellAccessor, PowerShellObjectMapper.Instance);
testPowerShellAccessor.SetSuccessResult(new GetLocationCmdletWrapperResult(expectedResult));

PowerShellVariable<GetLocationCmdletWrapperResult> result = powerShellCmdletExecutor.InitializeVariable("$result", new GetLocationCmdlet());

GetLocationCmdletWrapperResult resultObject = result.Values.Single();
resultObject.Path.Should().NotBeNull();
}
}
1 change: 1 addition & 0 deletions Sources/Kysect.PowerShellRunner.sln
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1D69C86F-577E-4246-B9E7-B7D2C3F6E0A3}"
ProjectSection(SolutionItems) = preProject
Directory.Build.props = Directory.Build.props
Directory.Packages.props = Directory.Packages.props
EndProjectSection
EndProject
Global
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ public class PowerShellAccessorFactory : IPowerShellAccessorFactory
{
public IPowerShellAccessor Create()
{
#pragma warning disable CA2000 // Dispose objects before losing scope
return new PowerShellAccessor(System.Management.Automation.PowerShell.Create());
#pragma warning restore CA2000 // Dispose objects before losing scope
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using Kysect.PowerShellRunner.Abstractions.Accessors;
using Kysect.PowerShellRunner.Abstractions.Cmdlets;
using Kysect.PowerShellRunner.Abstractions.Objects;
using Kysect.PowerShellRunner.Abstractions.Queries;
using Kysect.PowerShellRunner.Abstractions.Variables;
using Kysect.PowerShellRunner.Executions;
using Kysect.PowerShellRunner.QueryBuilding;

namespace Kysect.PowerShellRunner.Cmdlets;

public class PowerShellCmdletExecutor(IPowerShellAccessor accessor, IPowerShellObjectMapper powerShellObjectMapper)
: IPowerShellCmdletExecutor
{
public IReadOnlyCollection<IPowerShellObject> Execute(IPowerShellCmdlet cmdlet)
{
PowerShellQuery powerShellQuery = cmdlet.BuildFromCmdlet();

return accessor.ExecuteAndGet(powerShellQuery).ToList();
}

public PowerShellVariable<IPowerShellObject> InitializeVariable(string variableName, IPowerShellCmdlet cmdlet)
{
var powerShellVariable = new PowerShellVariable(variableName);
PowerShellQuery powerShellQuery = cmdlet.BuildFromCmdlet();
return new PowerShellVariableInitializer(accessor, powerShellVariable, powerShellObjectMapper).With(powerShellQuery);
}

public IReadOnlyCollection<T> Execute<T>(IPowerShellCmdlet<T> cmdlet) where T : notnull
{
PowerShellQuery powerShellQuery = cmdlet.BuildFromCmdlet();

return accessor.ExecuteAndGet(powerShellQuery)
.Select(powerShellObjectMapper.Map<T>)
.ToList();
}

public PowerShellVariable<T> InitializeVariable<T>(string variableName, IPowerShellCmdlet<T> cmdlet) where T : notnull
{
var powerShellVariable = new PowerShellVariable(variableName);
PowerShellQuery powerShellQuery = cmdlet.BuildFromCmdlet();
return new PowerShellVariableInitializer(accessor, powerShellVariable, powerShellObjectMapper).With<T>(powerShellQuery);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ public class ConvertToSecureStringCmdlet : IPowerShellCmdlet<SecureString>
{
public string CmdletName => "ConvertTo-SecureString";

#pragma warning disable CA1720 // Identifier contains type name
public IPowerShellCmdletParameter<string> String { get; } = null!;
#pragma warning restore CA1720 // Identifier contains type name
public IPowerShellCmdletParameter<SwitchParameter> AsPlainText { get; } = null!;
public IPowerShellCmdletParameter<SwitchParameter> Force { get; } = null!;
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ public PowerShellAccessorCmdletExecutionContext(IPowerShellAccessor accessor, IP
_cmdlet = cmdlet;
_accessor = accessor;

_morphisms = new List<Func<PowerShellQuery, PowerShellQuery>>();
_powerShellObjectMapper = PowerShellObjectMapper.Instance;
_morphisms = new List<Func<PowerShellQuery, PowerShellQuery>>();
}

public PowerShellAccessorCmdletExecutionContext<T> Continue(Func<PowerShellQuery, PowerShellQuery> morphism)
Expand All @@ -42,9 +42,7 @@ public IReadOnlyCollection<T> Execute()
public PowerShellVariable<T> ExecuteAndSetTo(string variableName)
{
var powerShellVariable = new PowerShellVariable(variableName);

PowerShellQuery powerShellQuery = BuildQuery();

return new PowerShellVariableInitializer(_accessor, powerShellVariable, _powerShellObjectMapper).With<T>(powerShellQuery);
}

Expand All @@ -68,8 +66,8 @@ public PowerShellAccessorCmdletExecutionContext(IPowerShellAccessor accessor, IP
_cmdlet = cmdlet;
_accessor = accessor;

_morphisms = new List<Func<PowerShellQuery, PowerShellQuery>>();
_powerShellObjectMapper = PowerShellObjectMapper.Instance;
_morphisms = new List<Func<PowerShellQuery, PowerShellQuery>>();
}

public PowerShellAccessorCmdletExecutionContext Continue(Func<PowerShellQuery, PowerShellQuery> morphism)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Kysect.PowerShellRunner.Abstractions.Objects;
using Kysect.PowerShellRunner.Abstractions.Queries;
using Kysect.PowerShellRunner.Abstractions.Variables;
using Kysect.PowerShellRunner.Mapping;
using Kysect.PowerShellRunner.QueryBuilding;

namespace Kysect.PowerShellRunner.Executions;
Expand All @@ -13,9 +12,9 @@ public class PowerShellVariableInitializer
{
private readonly IPowerShellAccessor _accessor;
private readonly PowerShellVariable _variable;
private readonly PowerShellObjectMapper _powerShellObjectMapper;
private readonly IPowerShellObjectMapper _powerShellObjectMapper;

public PowerShellVariableInitializer(IPowerShellAccessor accessor, PowerShellVariable variable, PowerShellObjectMapper powerShellObjectMapper)
public PowerShellVariableInitializer(IPowerShellAccessor accessor, PowerShellVariable variable, IPowerShellObjectMapper powerShellObjectMapper)
{
_accessor = accessor.ThrowIfNull();
_variable = variable.ThrowIfNull();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
using Kysect.CommonLib.BaseTypes.Extensions;
using Kysect.CommonLib.Reflection;
using Kysect.CommonLib.Reflection.TypeCache;
using Kysect.PowerShellRunner.Abstractions.Cmdlets;
using Kysect.PowerShellRunner.Abstractions.Objects;
using Kysect.PowerShellRunner.Tools;
using System.Reflection;
using System.Text.Json;

namespace Kysect.PowerShellRunner.Mapping;

public class PowerShellObjectMapper
public class PowerShellObjectMapper : IPowerShellObjectMapper
{
private readonly PowerShellObjectMappingConfiguration _configuration;
private readonly JsonSerializerOptions _serializerOptions;
Expand Down

0 comments on commit 9d6295c

Please sign in to comment.