From 47561c960cc52afd294ca2d787652d2d8757aa2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20N=C3=A4geli?= Date: Sat, 13 Apr 2019 15:26:12 +0200 Subject: [PATCH] Prepare for release 2.2 --- API/GenHTTP.API/GenHTTP.Api.csproj | 6 +++--- API/GenHTTP.API/Modules/IResourceProvider.cs | 10 ++++++++++ Core/GenHTTP.Core/GenHTTP.Core.csproj | 6 +++--- .../GenHTTP.Modules.Core.csproj | 6 +++--- .../Resource/FileDataProvider.cs | 2 ++ .../Resource/ResourceDataProvider.cs | 2 ++ .../Resource/StringDataProvider.cs | 2 ++ .../Templating/PlaceholderRender.cs | 19 +++++++++++++++++- .../GenHTTP.Modules.Scriban.csproj | 6 +++--- .../ScribanPageProvider.cs | 8 +++++--- .../ScribanRenderer.cs | 20 ++++++++++++++++--- 11 files changed, 68 insertions(+), 19 deletions(-) diff --git a/API/GenHTTP.API/GenHTTP.Api.csproj b/API/GenHTTP.API/GenHTTP.Api.csproj index 523d666a..c296ec92 100644 --- a/API/GenHTTP.API/GenHTTP.Api.csproj +++ b/API/GenHTTP.API/GenHTTP.Api.csproj @@ -7,9 +7,9 @@ 8.0 enable - 2.1.0.0 - 2.1.0.0 - 2.1.0 + 2.2.0.0 + 2.2.0.0 + 2.2.0 Andreas Nägeli diff --git a/API/GenHTTP.API/Modules/IResourceProvider.cs b/API/GenHTTP.API/Modules/IResourceProvider.cs index 685565c9..97baf9a7 100644 --- a/API/GenHTTP.API/Modules/IResourceProvider.cs +++ b/API/GenHTTP.API/Modules/IResourceProvider.cs @@ -19,6 +19,16 @@ namespace GenHTTP.Api.Modules public interface IResourceProvider { + /// + /// Specifies, whether a consumer of this resource is allowed to + /// cache content derived from the resource. + /// + /// + /// For content which may change externally (e.g. files), this property + /// should return false. + /// + bool AllowCache { get; } + /// /// Returns the read-only stream of the resource to be accessed. /// diff --git a/Core/GenHTTP.Core/GenHTTP.Core.csproj b/Core/GenHTTP.Core/GenHTTP.Core.csproj index 4965c57a..e5039213 100644 --- a/Core/GenHTTP.Core/GenHTTP.Core.csproj +++ b/Core/GenHTTP.Core/GenHTTP.Core.csproj @@ -7,9 +7,9 @@ 8.0 enable - 2.1.0.0 - 2.1.0.0 - 2.1.0 + 2.2.0.0 + 2.2.0.0 + 2.2.0 Andreas Nägeli diff --git a/Modules/GenHTTP.Modules.Core/GenHTTP.Modules.Core.csproj b/Modules/GenHTTP.Modules.Core/GenHTTP.Modules.Core.csproj index 88abf281..7ca3d761 100644 --- a/Modules/GenHTTP.Modules.Core/GenHTTP.Modules.Core.csproj +++ b/Modules/GenHTTP.Modules.Core/GenHTTP.Modules.Core.csproj @@ -7,9 +7,9 @@ 8.0 enable - 2.1.0.0 - 2.1.0.0 - 2.1.0 + 2.2.0.0 + 2.2.0.0 + 2.2.0 Andreas Nägeli diff --git a/Modules/GenHTTP.Modules.Core/Resource/FileDataProvider.cs b/Modules/GenHTTP.Modules.Core/Resource/FileDataProvider.cs index b88d9b5f..12a40416 100644 --- a/Modules/GenHTTP.Modules.Core/Resource/FileDataProvider.cs +++ b/Modules/GenHTTP.Modules.Core/Resource/FileDataProvider.cs @@ -15,6 +15,8 @@ public class FileDataProvider : IResourceProvider public FileInfo File { get; } + public bool AllowCache => false; + #endregion #region Initialization diff --git a/Modules/GenHTTP.Modules.Core/Resource/ResourceDataProvider.cs b/Modules/GenHTTP.Modules.Core/Resource/ResourceDataProvider.cs index 925a382b..020f6dbd 100644 --- a/Modules/GenHTTP.Modules.Core/Resource/ResourceDataProvider.cs +++ b/Modules/GenHTTP.Modules.Core/Resource/ResourceDataProvider.cs @@ -19,6 +19,8 @@ public class ResourceDataProvider : IResourceProvider public string QualifiedName { get; } + public bool AllowCache => true; + #endregion #region Initialization diff --git a/Modules/GenHTTP.Modules.Core/Resource/StringDataProvider.cs b/Modules/GenHTTP.Modules.Core/Resource/StringDataProvider.cs index 3a57dfbf..2bbbfe65 100644 --- a/Modules/GenHTTP.Modules.Core/Resource/StringDataProvider.cs +++ b/Modules/GenHTTP.Modules.Core/Resource/StringDataProvider.cs @@ -15,6 +15,8 @@ public class StringDataProvider : IResourceProvider public string Content { get; } + public bool AllowCache => true; + #endregion #region Initialization diff --git a/Modules/GenHTTP.Modules.Core/Templating/PlaceholderRender.cs b/Modules/GenHTTP.Modules.Core/Templating/PlaceholderRender.cs index 1bbc746d..8d1efdf5 100644 --- a/Modules/GenHTTP.Modules.Core/Templating/PlaceholderRender.cs +++ b/Modules/GenHTTP.Modules.Core/Templating/PlaceholderRender.cs @@ -14,6 +14,8 @@ public class PlaceholderRender : IRenderer where T : IBaseModel { private readonly static Regex PLACEHOLDER = new Regex(@"\[([a-zA-Z0-9]+)\]"); + private string? _Template; + #region Get-/Setters public IResourceProvider TemplateProvider { get; } @@ -33,7 +35,7 @@ public PlaceholderRender(IResourceProvider templateProvider) public string Render(T model) { - var template = TemplateProvider.GetResourceAsString(); + var template = GetTemplate(); var flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase; @@ -52,6 +54,21 @@ public string Render(T model) }); } + private string GetTemplate() + { + if (TemplateProvider.AllowCache) + { + return _Template ?? (_Template = LoadTemplate()); + } + + return LoadTemplate(); + } + + private string LoadTemplate() + { + return TemplateProvider.GetResourceAsString(); + } + #endregion } diff --git a/Modules/GenHTTP.Modules.Scriban/GenHTTP.Modules.Scriban.csproj b/Modules/GenHTTP.Modules.Scriban/GenHTTP.Modules.Scriban.csproj index 6e4c765b..e8b91011 100644 --- a/Modules/GenHTTP.Modules.Scriban/GenHTTP.Modules.Scriban.csproj +++ b/Modules/GenHTTP.Modules.Scriban/GenHTTP.Modules.Scriban.csproj @@ -7,9 +7,9 @@ 8.0 enable - 2.1.0.0 - 2.1.0.0 - 2.1.0 + 2.2.0.0 + 2.2.0.0 + 2.2.0 Andreas Nägeli diff --git a/Modules/GenHTTP.Modules.Scriban/ScribanPageProvider.cs b/Modules/GenHTTP.Modules.Scriban/ScribanPageProvider.cs index ce7eef02..1628cac8 100644 --- a/Modules/GenHTTP.Modules.Scriban/ScribanPageProvider.cs +++ b/Modules/GenHTTP.Modules.Scriban/ScribanPageProvider.cs @@ -22,6 +22,8 @@ public class ScribanPageProvider : IContentProvider where T : PageModel public ModelProvider ModelProvider { get; } + public ScribanRenderer Renderer { get; } + public string? Title { get; } #endregion @@ -33,6 +35,8 @@ public ScribanPageProvider(IResourceProvider templateProvider, ModelProvider TemplateProvider = templateProvider; ModelProvider = modelProvider; Title = title; + + Renderer = new ScribanRenderer(TemplateProvider); } #endregion @@ -43,11 +47,9 @@ public IResponseBuilder Handle(IRequest request) { if (request.HasType(RequestMethod.HEAD, RequestMethod.GET, RequestMethod.POST)) { - var renderer = new ScribanRenderer(TemplateProvider); - var model = ModelProvider(request); - var content = renderer.Render(model); + var content = Renderer.Render(model); var templateModel = new TemplateModel(request, model.Title ?? Title ?? "Untitled Page", content); diff --git a/Modules/GenHTTP.Modules.Scriban/ScribanRenderer.cs b/Modules/GenHTTP.Modules.Scriban/ScribanRenderer.cs index b50a574e..660e5247 100644 --- a/Modules/GenHTTP.Modules.Scriban/ScribanRenderer.cs +++ b/Modules/GenHTTP.Modules.Scriban/ScribanRenderer.cs @@ -14,6 +14,7 @@ namespace GenHTTP.Modules.Scriban public class ScribanRenderer : IRenderer where T : IBaseModel { + private Template? _Template; #region Get-/Setters @@ -34,9 +35,7 @@ public ScribanRenderer(IResourceProvider templateProvider) public string Render(T model) { - var content = TemplateProvider.GetResourceAsString(); - - var template = Template.Parse(content); + var template = GetTemplate(); var obj = new ScriptObject(); @@ -46,6 +45,21 @@ public string Render(T model) return template.Render(obj); } + private Template GetTemplate() + { + if (TemplateProvider.AllowCache) + { + return _Template ?? (_Template = LoadTemplate()); + } + + return LoadTemplate(); + } + + private Template LoadTemplate() + { + return Template.Parse(TemplateProvider.GetResourceAsString()); + } + #endregion }