Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 16 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,9 @@ Scaffold EF Core models using Handlebars templates.

You can register Handlebars helpers in the `ScaffoldingDesignTimeServices` where setup takes place.
- Create a named tuple as shown with `myHelper` below.
- The `context` parameter of the helper method provides model data injected by the Handlebars scaffolding extension.
- Pass the tuple to the `AddHandlebarsHelpers` extension method.
- To use Handlebars helper defined above, add the following to any of the .hbs files within the CodeTemplates folder: `{{my-helper}}`
- You may register as many helpers as you wish.

You can pass transform functions to `AddHandlebarsTransformers` in order to customize generation of entity type definitions, including class names, constructors and properties.
Expand All @@ -93,23 +95,29 @@ public class ScaffoldingDesignTimeServices : IDesignTimeServices
// Add optional Handlebars helpers
services.AddHandlebarsHelpers(myHelper);

// Add optional Handlebars transformers
// Add Handlebars transformer for Country property
services.AddHandlebarsTransformers(
entityNameTransformer: n => n + "Foo",
entityFileNameTransformer: n => n + "Foo",
constructorTransformer: e => new EntityPropertyInfo(e.PropertyType + "Foo", e.PropertyName + "Foo"),
propertyTransformer: e => new EntityPropertyInfo(e.PropertyType, e.PropertyName + "Foo"),
navPropertyTransformer: e => new EntityPropertyInfo(e.PropertyType + "Foo", e.PropertyName + "Foo"));
propertyTransformer: e =>
e.PropertyName == "Country"
? new EntityPropertyInfo("Country", e.PropertyName)
: new EntityPropertyInfo(e.PropertyType, e.PropertyName));

// Add optional Handlebars transformers
//services.AddHandlebarsTransformers(
// entityNameTransformer: n => n + "Foo",
// entityFileNameTransformer: n => n + "Foo",
// constructorTransformer: e => new EntityPropertyInfo(e.PropertyType + "Foo", e.PropertyName + "Foo"),
// propertyTransformer: e => new EntityPropertyInfo(e.PropertyType, e.PropertyName + "Foo"),
// navPropertyTransformer: e => new EntityPropertyInfo(e.PropertyType + "Foo", e.PropertyName + "Foo"));
}

// Sample Handlebars helper
void MyHbsHelper(TextWriter writer, object context, object[] parameters)
void MyHbsHelper(TextWriter writer, Dictionary<string, object> context, object[] parameters)
{
writer.Write("// My Handlebars Helper");
}
}
```
- To use Handlebars helper defined above, add the following to any of the .hbs files within the CodeTemplates folder: `{{my-helper}}`

## Extending the OnModelCreating Method

Expand Down
2 changes: 1 addition & 1 deletion sample/ScaffoldingSample/Sample.ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public class ScaffoldingDesignTimeServices : IDesignTimeServices
}

// Sample Handlebars helper
void MyHbsHelper(TextWriter writer, object context, object[] parameters)
void MyHbsHelper(TextWriter writer, Dictionary<string, object> context, object[] parameters)
{
writer.Write("// My Handlebars Helper");
}
Expand Down
5 changes: 3 additions & 2 deletions sample/ScaffoldingSample/ScaffoldingDesignTimeServices.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using EntityFrameworkCore.Scaffolding.Handlebars;
Expand All @@ -22,7 +23,7 @@ public void ConfigureDesignTimeServices(IServiceCollection services)
var options = ReverseEngineerOptions.DbContextAndEntities;

// Register Handlebars helper
var myHelper = (helperName: "my-helper", helperFunction: (Action<TextWriter, object, object[]>) MyHbsHelper);
var myHelper = (helperName: "my-helper", helperFunction: (Action<TextWriter, Dictionary<string, object>, object[]>) MyHbsHelper);

// Add Handlebars scaffolding templates
services.AddHandlebarsScaffolding(options);
Expand All @@ -47,7 +48,7 @@ public void ConfigureDesignTimeServices(IServiceCollection services)
}

// Sample Handlebars helper
void MyHbsHelper(TextWriter writer, object context, object[] parameters)
void MyHbsHelper(TextWriter writer, Dictionary<string, object> context, object[] parameters)
{
writer.Write("// My Handlebars Helper");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ public class HbsHelperService : IHbsHelperService
/// <summary>
/// Handlebars helpers.
/// </summary>
public Dictionary<string, Action<TextWriter, object, object[]>> Helpers { get; }
public Dictionary<string, Action<TextWriter, Dictionary<string, object>, object[]>> Helpers { get; }

/// <summary>
/// Constructor for the Handlebars helper service.
/// </summary>
/// <param name="helpers">Dictionary of Handlebars helpers.</param>
public HbsHelperService(
Dictionary<string, Action<TextWriter, object, object[]>> helpers)
Dictionary<string, Action<TextWriter, Dictionary<string, object>, object[]>> helpers)
{
Helpers = helpers;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public static class HandlebarsHelpers
/// Get the spaces Handlebars helper.
/// </summary>
/// <returns>Spaces Handlebars helper.</returns>
public static Action<TextWriter, object, object[]> SpacesHelper
public static Action<TextWriter, dynamic, object[]> SpacesHelper
=> (writer, context, parameters) =>
{
var spaces = string.Empty;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public interface IHbsHelperService
/// <summary>
/// Handlebars helpers.
/// </summary>
Dictionary<string, Action<TextWriter, object, object[]>> Helpers { get; }
Dictionary<string, Action<TextWriter, Dictionary<string, object>, object[]>> Helpers { get; }

/// <summary>
/// Register Handlebars helpers.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,11 @@ public static IServiceCollection AddHandlebarsScaffolding(this IServiceCollectio
/// <param name="handlebarsHelpers">Handlebars helpers.</param>
/// <returns>The same service collection so that multiple calls can be chained.</returns>
public static IServiceCollection AddHandlebarsHelpers(this IServiceCollection services,
params (string helperName, Action<TextWriter, object, object[]> helperFunction)[] handlebarsHelpers)
params (string helperName, Action<TextWriter, Dictionary<string, object>, object[]> helperFunction)[] handlebarsHelpers)
{
services.AddSingleton<IHbsHelperService>(provider =>
{
var helpers = new Dictionary<string, Action<TextWriter, object, object[]>>
var helpers = new Dictionary<string, Action<TextWriter, Dictionary<string, object>, object[]>>
{
{Constants.SpacesHelper, HandlebarsHelpers.SpacesHelper}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ public TestProviderCodeGenerator(ProviderCodeGeneratorDependencies dependencies)
{
}

#pragma warning disable 672
public override MethodCallCodeFragment GenerateUseProvider(string connectionString)
#pragma warning restore 672
=> new MethodCallCodeFragment("UseTestProvider", connectionString);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ private IReverseEngineerScaffolder CreateScaffolder(ReverseEngineerOptions optio
: new NullCSharpEntityTypeGenerator();
})
.AddSingleton<IHbsHelperService>(provider =>
new HbsHelperService(new Dictionary<string, Action<TextWriter, object, object[]>>
new HbsHelperService(new Dictionary<string, Action<TextWriter, Dictionary<string, object>, object[]>>
{
{EntityFrameworkCore.Scaffolding.Handlebars.Helpers.Constants.SpacesHelper, HandlebarsHelpers.SpacesHelper}
}))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public void ValidateContextNameInReverseEngineerGenerator(string contextName)
.AddSingleton<IReverseEngineerScaffolder, HbsReverseEngineerScaffolder>()
.AddSingleton<IEntityTypeTransformationService, HbsEntityTypeTransformationService>()
.AddSingleton<IHbsHelperService>(provider => new HbsHelperService(
new Dictionary<string, Action<TextWriter, object, object[]>>
new Dictionary<string, Action<TextWriter, Dictionary<string, object>, object[]>>
{
{Constants.SpacesHelper, HandlebarsHelpers.SpacesHelper}
}))
Expand Down