Beispiel #1
0
        protected override int Execute()
        {
            var baseResult = base.Execute();

            if (baseResult != 0)
            {
                return(baseResult);
            }

            var metadata = new GenymanMetadata();
            var version  = GetVersion();

            Log.Information($"Executing new command for {metadata.PackageId} - Version {version}");

            var sw = Stopwatch.StartNew();

            var configuration = new GenymanConfiguration <TConfiguration>
            {
                Genyman       = metadata,
                Configuration = new TTemplate(),
            };

            var output    = "";
            var extension = "json";

            if (JsonOption.HasValue())
            {
                output    = configuration.ToJsonString();
                extension = "json";
            }
            else             //Later support more formats!
            {
                // DEFAULT is json
                output    = configuration.ToJsonString();
                extension = "json";
            }

            var fileName = !string.IsNullOrEmpty(FileNameOption.Value()) ? FileNameOption.ParsedValue : $"gm-{metadata.Identifier.ToLower()}";

            fileName = $"{fileName}.{extension}";

            var fullFileName = Path.Combine(Environment.CurrentDirectory, fileName);

            if (File.Exists(fileName) && !Overwrite.HasValue())
            {
                Log.Error($"File {fullFileName} already exists. Specify --overwrite if you want to overwrite files");
                return(-1);
            }

            File.WriteAllText(fullFileName, output);
            Log.Information($"Configuration file {fileName} was written");

            Log.Information($"Finished ({sw.ElapsedMilliseconds}ms)");

            return(0);
        }
Beispiel #2
0
        protected override int Execute()
        {
            var baseResult = base.Execute();

            if (baseResult != 0)
            {
                return(baseResult);
            }

            var metadata = new GenymanMetadata();
            var version  = GetVersion();

            Log.Information($"Executing doc command for {metadata.PackageId} - Version {version}");

            var markdown    = new List <string>();
            var useMarkdown = MarkdownOption.HasValue();

            if (useMarkdown)
            {
                markdown.Add($"# {metadata.PackageId}");
                markdown.Add(metadata.Description);
                markdown.Add("## Getting Started");
                markdown.Add($"{metadata.PackageId} is a **[genyman](http://genyman.net)** code generator. If you haven't installed **genyman** run following command:");
                markdown.Add($"```");
                markdown.Add($"dotnet tool install -g genyman");
                markdown.Add($"```");
                markdown.Add($"_Genyman is a .NET Core Global tool and thereby you need .NET Core version 2.1 installed._");

                markdown.Add("## New Configuration file ");
                markdown.Add($"```");
                if (metadata.Identifier == "Genyman")
                {
                    markdown.Add($"genyman new");
                }
                else
                {
                    markdown.Add($"genyman new {metadata.PackageId}");
                }
                markdown.Add($"```");

                markdown.Add("## Sample Configuration file ");

                var configuration = new GenymanConfiguration <TConfiguration>
                {
                    Genyman       = metadata,
                    Configuration = new TTemplate(),
                };
                var output = configuration.ToJsonString();
                markdown.Add($"```");
                markdown.Add(output);
                markdown.Add($"```");

                markdown.Add("## Documentation ");
            }

            var types = typeof(TConfiguration).Assembly.GetExportedTypes();

            foreach (var type in types)
            {
                var documentation = type.GetCustomAttribute <DocumentationAttribute>();
                if (documentation == null)
                {
                    continue;
                }

                if (type.IsClass)
                {
                    var output = new List <PropertyList>();

                    var properties = type.GetProperties();
                    foreach (var property in properties)
                    {
                        var ignoreAttribute = property.GetCustomAttribute <IgnoreAttribute>();
                        if (ignoreAttribute != null)
                        {
                            continue;
                        }

                        var descriptionAttribute = property.GetCustomAttribute <DescriptionAttribute>();
                        var requiredAttribute    = property.GetCustomAttribute <RequiredAttribute>();

                        var typeName = property.PropertyType.Name;
                        if (property.PropertyType.IsEnum)
                        {
                            typeName += " (Enum)";
                        }
                        else if (property.PropertyType.IsGenericType && typeName.Contains("List"))
                        {
                            typeName = $"{property.PropertyType.GenericTypeArguments[0].Name}[]";
                        }


                        output.Add(new PropertyList()
                        {
                            Name        = property.Name,
                            Type        = typeName,
                            Required    = requiredAttribute != null ? "*" : "",
                            Description = descriptionAttribute?.Description
                        });
                    }

                    WriteHeader(type);

                    var table = new PrintableTable <PropertyList>();
                    table.AddColumn("Name", p => p.Name);
                    table.AddColumn("Type", p => p.Type);
                    table.AddColumn("Req", p => p.Required);
                    table.AddColumn("Description", p => p.Description);
                    table.PrintRows(output, Console.WriteLine);

                    if (useMarkdown)
                    {
                        markdown.Add($"### Class {type.Name}");
                        if (!string.IsNullOrEmpty(documentation.Remarks))
                        {
                            markdown.Add(documentation.Remarks);
                        }

                        markdown.Add($"| Name | Type | Req | Description |");
                        markdown.Add($"| --- | --- | :---: | --- |");
                        foreach (var p in output)
                        {
                            markdown.Add($"| {p.Name} | {p.Type} | {p.Required} | {p.Description} |");
                        }
                    }
                }
                else if (type.IsEnum)
                {
                    var output = new List <EnumList>();

                    var fields = type.GetFields();
                    foreach (var fieldInfo in fields)
                    {
                        if (fieldInfo.IsSpecialName)
                        {
                            continue;
                        }
                        var descriptionAttribute = fieldInfo.GetCustomAttribute <DescriptionAttribute>();
                        output.Add(new EnumList()
                        {
                            Name        = fieldInfo.Name,
                            Description = descriptionAttribute?.Description
                        });
                    }

                    WriteHeader(type);

                    var table = new PrintableTable <EnumList>();
                    table.AddColumn("Name", p => p.Name);
                    table.AddColumn("Description", p => p.Description);
                    table.PrintRows(output, Console.WriteLine);

                    if (useMarkdown)
                    {
                        markdown.Add($"### Enum {type.Name}");
                        if (!string.IsNullOrEmpty(documentation.Remarks))
                        {
                            markdown.Add(documentation.Remarks);
                        }

                        markdown.Add($"| Name | Description |");
                        markdown.Add($"| --- | --- |");
                        foreach (var p in output)
                        {
                            markdown.Add($"| {p.Name} | {p.Description} |");
                        }
                    }
                }
            }

            if (useMarkdown)
            {
                var target = Path.Combine(WorkingDirectory, MarkdownOption.ParsedValue);
                target.EnsureFolderExists();
                File.WriteAllLines(target, markdown);
            }

            return(0);
        }
Beispiel #3
0
        protected override int Execute()
        {
            base.Execute();

            var metaData = new GenymanMetadata();
            var version  = GetVersion();

            if (Input.Value.IsNullOrEmpty())
            {
                Description = $"{metaData.Description} (Version {version})";
                Name        = metaData.Identifier.ToLower();
                ShowHelp();
                return(-1);
            }

            var fileName = Input.ParsedValue;

            if (!File.Exists(fileName))
            {
                Log.Error($"Could not find input file {fileName}");
                return(-1);
            }

            var configurationContents = File.ReadAllText(fileName);
            GenymanConfiguration <TConfiguration> genyManConfiguration;

            try
            {
                //todo: based upon extension parse this
                genyManConfiguration = configurationContents.FromJsonString <TConfiguration>();
            }
            catch (Exception e)
            {
                Log.Debug(e.Message);
                Log.Error($"Could not parse {fileName} as a valid Genyman input file");
                return(-1);
            }

            var generator = new TGenerator
            {
                InputFileName         = fileName,
                ConfigurationMetadata = genyManConfiguration.Genyman,
                Configuration         = genyManConfiguration.Configuration,
                WorkingDirectory      = new FileInfo(fileName).DirectoryName,
                Metadata  = metaData,
                Overwrite = Overwrite.HasValue(),
                Update    = UpdateOption?.HasValue() ?? false
            };

            var sw = Stopwatch.StartNew();

            Log.Information($"Executing {generator.Metadata.PackageId} - Version {version}");
            generator.Execute();
            var elapsed = sw.ElapsedMilliseconds;

            Log.Information($"Finished {generator.Metadata.PackageId} ({elapsed}ms)");

            // telemetry
            if (metaData.PackageId.ToLower() != "genyman")
            {
                const string telemetryUrl = "https://cmgg8m1ib1.execute-api.us-east-2.amazonaws.com/genyman";
                telemetryUrl.PostJsonToUrl(new Telemetry()
                {
                    Name = metaData.PackageId, Version = metaData.Version, Duration = elapsed
                });
            }

            return(0);
        }