private RenderedDocumentOutput CreateReport(ReportFactoryArguments arguements,
                                                    Func <string, ReportGenerationArguments, NodePipeLineTask> taskFactory)
        {
            using (var renderDirectory = GetWorkspace())
            {
                var reportJsonPath     = PersistReportData(arguements.ReportJson, renderDirectory.TmpPath);
                var reportTemplatePath = FetchReportTemplatePath(arguements.TemplateName, arguements.Extension);

                if (InvalidReportTemplatePath(reportTemplatePath))
                {
                    return(ReturnInvalidReportTemplatePathError(reportTemplatePath));
                }

                var presenter       = new PropertyPresenter <string, ErrorOutput>();
                var reportArguments = new ReportGenerationArguments
                {
                    TemplatePath = reportTemplatePath,
                    JsonPath     = reportJsonPath,
                    SheetNumber  = arguements.SheetNumber
                };
                RenderReport(reportArguments, taskFactory, presenter);

                return(RenderingErrors(presenter) ? ReturnErrors(presenter) : ReturnRenderedReport(presenter));
            }
        }
        private void RenderReport(ReportGenerationArguments arguments,
                                  Func <string, ReportGenerationArguments, NodePipeLineTask> taskFactory,
                                  IRespondWithSuccessOrError <string, ErrorOutput> presenter)
        {
            var nodeAppPath = Fetch_NodeApp_Path(_options.NodeApp);

            var task = taskFactory.Invoke(nodeAppPath, arguments);

            var executor = new SynchronousAction(task, new ProcessFactory());

            executor.Execute(presenter);
        }