protected void ProcessHandlebarTemplates(Func <string, bool> skipTemplate = null, Func <string, string> overrideTargetName = null, Action <TemplateProcessed> templateProcessed = null) { var folder = TemplatePath; var templateFiles = Directory.GetFiles(folder, "*.*", SearchOption.AllDirectories); foreach (var templateFile in templateFiles) { var template = TargetFileName(templateFile, TemplatePath); var targetName = template; if (skipTemplate != null) { var skip = skipTemplate.Invoke(template); if (skip) { Log.Debug($"Skipping {template}"); continue; } } if (overrideTargetName != null) { var result = overrideTargetName.Invoke(template); if (!string.IsNullOrEmpty(result)) { targetName = result; } } var targetPath = Path.Combine(WorkingDirectory, targetName); Log.Debug($"Processing {template}. Target: {targetPath}"); targetPath.EnsureFolderExists(); var output = FluentHandlebars.Create(this) .WithAllHelpers() .HavingModel(Configuration) .UsingFileTemplate(templateFile) .OutputFile(targetPath, Overwrite); templateProcessed?.Invoke(new TemplateProcessed(template, output)); } }
public override bool Execute() { var contents = new HttpClient().GetStringAsync("https://raw.githubusercontent.com/AfterShip/phone/master/lib/iso3166_data.js").Result; contents = contents.Substring(17, contents.Length - 19); var definitions = JsonConvert.DeserializeObject <List <MobileDefinition> >(contents); Log.Info($"Found {definitions.Count} definitions"); Config = new Configuration() { Definitions = definitions }; FluentHandlebars.Create(this) .HavingModel(Config) .UsingEmbeddedTemplate("Definitions.cs") .OutputFile(Path.Combine(Env.ConfigPath, $"Definitions.cs"), overwrite: true); return(true); }
public override void Execute() { // ViewModel var viewModelFile = Path.Combine(TemplatePath, "{{ Name }}.cs"); var viewModelTargetFile = Path.Combine(WorkingDirectory, TargetFileName(viewModelFile, TemplatePath)); viewModelTargetFile = FluentHandlebars.Create(this) .WithAllHelpers() .HavingModel(Configuration) .UsingFileTemplate(viewModelFile) .OutputFile(viewModelTargetFile, false); //DO NOT OVERWRITE ViewModel FluentMSBuild.Use(viewModelTargetFile) .WithBuildAction(BuildAction.Compile) .AddToProject(); // generated ViewModel var generatedViewModelFile = Path.Combine(TemplatePath, "{{ Name }}.generated.cs"); var generatedViewModelTargetFile = Path.Combine(WorkingDirectory, TargetFileName(generatedViewModelFile, TemplatePath)); generatedViewModelTargetFile = FluentHandlebars.Create(this) .WithAllHelpers() .WithCustomHelper(Helpers) .HavingModel(Configuration) .UsingFileTemplate(generatedViewModelFile) .OutputFile(generatedViewModelTargetFile, true); FluentMSBuild.Use(generatedViewModelTargetFile) .WithBuildAction(BuildAction.Compile) .WithDependencyOn(viewModelTargetFile) .AddToProject(); FluentMSBuild.Use(InputFileName) .WithBuildAction(BuildAction.None) .WithDependencyOn(viewModelTargetFile) .AddToProject(); }