RazorPageGenerator: extracted creating RazorEngine into a method [refactoring] (#1727)

* RazorPageGenerator: extracted creating RazorEngine into a method to simplify reusing logic in custom generators

RazorPageGenerator: added optional cli argument with base directory  (previously current dir always was used)
This commit is contained in:
Sergei Dorogin 2017-10-23 22:44:29 +03:00 committed by Pranav K
parent 984713c297
commit a0733ffa91
2 changed files with 24 additions and 8 deletions

View File

@ -14,17 +14,25 @@ namespace RazorPageGenerator
{ {
public static int Main(string[] args) public static int Main(string[] args)
{ {
if (args == null || args.Length != 1) if (args == null || args.Length < 1)
{ {
Console.WriteLine("Invalid argument(s)."); Console.WriteLine("Invalid argument(s).");
Console.WriteLine("Usage: dotnet razorpagegenerator <root-namespace-of-views>"); Console.WriteLine(@"Usage:
Console.WriteLine("Example: dotnet razorpagegenerator Microsoft.AspNetCore.Diagnostics.RazorViews"); dotnet razorpagegenerator <root-namespace-of-views> [path]
Examples:
dotnet razorpagegenerator Microsoft.AspNetCore.Diagnostics.RazorViews
- processes all views in ""Views"" subfolders of the current directory
dotnet razorpagegenerator Microsoft.AspNetCore.Diagnostics.RazorViews c:\project
- processes all views in ""Views"" subfolders of c:\project directory
");
return 1; return 1;
} }
var rootNamespace = args[0]; var rootNamespace = args[0];
var targetProjectDirectory = Directory.GetCurrentDirectory(); var targetProjectDirectory = args.Length > 1 ? args[1] : Directory.GetCurrentDirectory();
var results = MainCore(rootNamespace, targetProjectDirectory); var razorEngine = CreateRazorEngine(rootNamespace);
var results = MainCore(razorEngine, targetProjectDirectory);
foreach (var result in results) foreach (var result in results)
{ {
@ -37,7 +45,7 @@ namespace RazorPageGenerator
return 0; return 0;
} }
public static IList<RazorPageGeneratorResult> MainCore(string rootNamespace, string targetProjectDirectory) public static RazorEngine CreateRazorEngine(string rootNamespace, Action<IRazorEngineBuilder> configure = null)
{ {
var razorEngine = RazorEngine.Create(builder => var razorEngine = RazorEngine.Create(builder =>
{ {
@ -52,8 +60,16 @@ namespace RazorPageGenerator
}); });
builder.Features.Add(new SuppressChecksumOptionsFeature()); builder.Features.Add(new SuppressChecksumOptionsFeature());
if (configure != null)
{
configure(builder);
}
}); });
return razorEngine;
}
public static IList<RazorPageGeneratorResult> MainCore(RazorEngine razorEngine, string targetProjectDirectory)
{
var viewDirectories = Directory.EnumerateDirectories(targetProjectDirectory, "Views", SearchOption.AllDirectories); var viewDirectories = Directory.EnumerateDirectories(targetProjectDirectory, "Views", SearchOption.AllDirectories);
var razorProject = RazorProject.Create(targetProjectDirectory); var razorProject = RazorProject.Create(targetProjectDirectory);
var templateEngine = new RazorTemplateEngine(razorEngine, razorProject); var templateEngine = new RazorTemplateEngine(razorEngine, razorProject);

View File

@ -35,9 +35,9 @@ namespace RazorPageGenerator.Test
{ {
// Arrange // Arrange
var projectDirectory = TestProject.GetProjectDirectory(GetType()); var projectDirectory = TestProject.GetProjectDirectory(GetType());
var razorEngine = Program.CreateRazorEngine("Microsoft.AspNetCore.TestGenerated");
// Act // Act
var results = Program.MainCore("Microsoft.AspNetCore.TestGenerated", projectDirectory); var results = Program.MainCore(razorEngine, projectDirectory);
// Assert // Assert
Assert.Collection(results, Assert.Collection(results,