/// <summary> /// Creates a new RubyScriptStepFactory. /// </summary> protected RubyScriptStepFactory() { _lazyRubyFunction = new Lazy <RubyFunction <TOutput> >( () => new RubyFunction <TOutput>( FunctionName, RubyFunctionText, RubyFunctionParameter.GetRubyFunctionParameters <TStep>(), RequiredNuixVersion, RequiredFeatures, RequiredHelpers ! ) ); }
/// <inheritdoc /> protected override async Task <Result <StringStream, IError> > Run( IStateMonad stateMonad, CancellationToken cancellationToken) { //var isAdmin = IsCurrentProcessAdmin(); //var isLinux = IsLinux; //if(isAdmin &&!isLinux) // return new SingleError("You cannot run arbitrary Nuix Scripts as Administrator", ErrorCode.ExternalProcessError, new StepErrorLocation(this)); var functionName = await FunctionName.Run(stateMonad, cancellationToken) .Map(x => x.GetStringAsync()) ; if (functionName.IsFailure) { return(functionName.ConvertFailure <StringStream>()); } var scriptText = await ScriptText.Run(stateMonad, cancellationToken) .Map(x => x.GetStringAsync()); if (scriptText.IsFailure) { return(scriptText.ConvertFailure <StringStream>()); } var parameters = await Parameters.Run(stateMonad, cancellationToken); if (parameters.IsFailure) { return(parameters.ConvertFailure <StringStream>()); } var nuixConnection = await stateMonad.GetOrCreateNuixConnection(this, false); if (nuixConnection.IsFailure) { return(nuixConnection.ConvertFailure <StringStream>() .MapError(x => x.WithLocation(this))); } var rubyFunctionParameters = parameters.Value .Select(x => new RubyFunctionParameter(ConvertString(x.Name), x.Name, true)) .ToList(); var parameterDict = parameters.Value .ToDictionary( x => new RubyFunctionParameter(ConvertString(x.Name), x.Name, true), x => x.BestValue.ObjectValue ) .Where(x => x.Value != null) .ToDictionary(x => x.Key, x => x.Value !); if (EntityStreamParameter != null) { var streamResult = await EntityStreamParameter.Run(stateMonad, cancellationToken); if (streamResult.IsFailure) { return(streamResult.ConvertFailure <StringStream>()); } const string streamParameter = "datastream"; var parameter = new RubyFunctionParameter( ConvertString(streamParameter), streamParameter, true ); rubyFunctionParameters.Add(parameter); parameterDict.Add(parameter, streamResult.Value); } var function = new RubyFunction <string>( ConvertString(functionName.Value), scriptText.Value, rubyFunctionParameters, new Version(5, 0), ArraySegment <NuixFeature> .Empty ); var runResult = await nuixConnection.Value.RunFunctionAsync( stateMonad, this, function, parameterDict, CasePathParameter.IgnoresOpenCase.Instance, cancellationToken ) .Map(x => new StringStream(x)); if (runResult.IsFailure) { return(runResult.MapError(x => x.WithLocation(this)).ConvertFailure <StringStream>()); } return(runResult.Value); }