Skip to content

Commit 434cc25

Browse files
committed
scriban sample update
1 parent a2ff74f commit 434cc25

File tree

2 files changed

+29
-41
lines changed

2 files changed

+29
-41
lines changed

samples/Scriban/Program.fs

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,61 @@
11
module Falco.Scriban.Program
22

3+
open System
34
open System.IO
45
open System.Threading.Tasks
56
open Falco
67
open Falco.Routing
78
open Falco.HostBuilder
8-
open Microsoft.Extensions.DependencyInjection
99
open Scriban
1010

11-
// ------------
12-
// View Engine
13-
// ------------
14-
type IViewEngine =
15-
abstract member RenderAsync : view : string * model : 'a -> ValueTask<string>
16-
17-
type ScribanViewEngine (views : Map<string, Template>) =
18-
interface IViewEngine with
19-
member _.RenderAsync(view : string, model : 'a) =
20-
match Map.tryFind view views with
21-
| Some template -> template.RenderAsync(model)
22-
| None -> failwithf "View '%s' was not found" view
11+
type RenderTemplate = string -> obj -> ValueTask<string>
2312

2413
// ------------
2514
// Pages
2615
// ------------
2716
module Pages =
28-
let homepage : HttpHandler =
29-
Services.inject<IViewEngine> (fun viewEngine ->
30-
let queryMap (q: QueryCollectionReader) =
31-
{| Name = q.Get "name" |}
17+
let homepage (renderTemplate : RenderTemplate) : HttpHandler =
18+
let queryMap (q: QueryCollectionReader) =
19+
{| Name = q.Get "name" |}
3220

33-
let next model : HttpHandler = fun ctx ->
34-
task {
35-
let! html = viewEngine.RenderAsync("Home", model)
36-
return Response.ofHtmlString html ctx
37-
}
21+
let next model : HttpHandler = fun ctx ->
22+
task {
23+
let! html = renderTemplate "Home" model
24+
return Response.ofHtmlString html ctx
25+
}
3826

39-
Request.mapQuery queryMap next)
27+
Request.mapQuery queryMap next
4028

4129
// ------------
42-
// Services
30+
// App
4331
// ------------
44-
let scribanService scribanTemplates (svc : IServiceCollection) =
45-
svc.AddScoped<IViewEngine, ScribanViewEngine>(fun _ ->
46-
new ScribanViewEngine(scribanTemplates))
47-
48-
[<EntryPoint>]
49-
let main args =
50-
let scribanTemplates =
51-
let root = Directory.GetCurrentDirectory()
52-
let viewsDirectory = Path.Combine(root, "Views")
53-
54-
Directory.EnumerateFiles(viewsDirectory)
32+
module Template =
33+
let loadFrom (path : string) =
34+
Directory.EnumerateFiles(path)
5535
|> Seq.map (fun file ->
5636
let viewName = Path.GetFileNameWithoutExtension(file)
5737
let viewContent = File.ReadAllText(file)
5838
let view = Template.Parse(viewContent)
5939
viewName, view)
6040
|> Map.ofSeq
6141

42+
let render (templates : Map<string, Template>) (name : string) (model : obj) =
43+
match Map.tryFind name templates with
44+
| Some template -> template.RenderAsync(model)
45+
| None -> failwithf "Template '%s' was not found" name
6246

63-
webHost [||] {
64-
use_https
47+
[<EntryPoint>]
48+
let main args =
49+
let executionDirectory = Path.GetDirectoryName(Environment.GetCommandLineArgs()[0])
50+
let scribanTemplates = Template.loadFrom (Path.Combine(executionDirectory, "Views"))
51+
let renderTemplate = Template.render scribanTemplates
6552

66-
add_service (scribanService scribanTemplates)
53+
webHost args {
54+
use_https
6755

6856
endpoints [
69-
get "/" Pages.homepage
57+
get "/" (Pages.homepage renderTemplate)
7058
]
7159
}
7260

73-
0 // Exit code
61+
0

samples/Scriban/Scriban.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</ItemGroup>
1717

1818
<ItemGroup>
19-
<None Include="Views\*" CopyToOutputDirectory="Always" />
19+
<None Include="Views\*" CopyToOutputDirectory="PreserveNewest" />
2020
</ItemGroup>
2121

2222
</Project>

0 commit comments

Comments
 (0)