-
Notifications
You must be signed in to change notification settings - Fork 588
/
Copy pathTemplates.fs
27 lines (23 loc) · 1.01 KB
/
Templates.fs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/// NOTE: Maybe this should be an extra module?
/// Contains basic templating functions. Used in other helpers.
[<RequireQualifiedAccess>]
module Fake.IO.Templates
/// Loads all templates (lazy - line by line!)
let load seq = Seq.map (fun fileName -> fileName, File.read fileName) seq
/// Replaces a bunch of the keywords in all files (lazy - line by line!)
let replaceKeywords replacements =
Seq.map (fun (fileName, file) ->
fileName,
file |> Seq.map (fun (line : string) ->
let mutable sb = new System.Text.StringBuilder(line)
for (k : string, r : string) in replacements do
sb <- sb.Replace(k, r)
sb.ToString()))
/// Saves all files (lazy - file by file!)
let saveFiles = Seq.iter (fun (fileName, file) -> File.write false fileName (Seq.toList file))
/// Replaces the templates with the given replacements
let replaceInFiles replacements files =
files
|> load
|> replaceKeywords replacements
|> saveFiles