From 43084fb5bb1d5109db9a0315c49382f6d5dc9a23 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Mon, 9 Dec 2024 12:56:16 -0500 Subject: [PATCH] Add ability to parse quoted strings in meta This should actually make migration from Caddy easier, because Caddy's YAML front matter seems to support quoted strings? IDK, the current Holanet has them. Closes #11 --- meta.go | 8 ++++++++ meta_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/meta.go b/meta.go index 47934af..d063fd7 100644 --- a/meta.go +++ b/meta.go @@ -1,5 +1,6 @@ package step +import "strconv" import "strings" const metaRule = "---" @@ -52,6 +53,13 @@ func ParseMeta (input string) (Meta, error) { } key = strings.ToLower(strings.TrimSpace(key)) value = strings.TrimSpace(value) + if strings.HasPrefix(value, "\"") || strings.HasPrefix(value, "'") { + unquoted, err := strconv.Unquote(value) + if err != nil { + return nil, err + } + value = unquoted + } if key == "" { return nil, ErrMetaMalformed } diff --git a/meta_test.go b/meta_test.go index 27a8de6..066d518 100644 --- a/meta_test.go +++ b/meta_test.go @@ -85,3 +85,27 @@ func TestSplitMetaCRLF (test *testing.T) { if value3 != "that" { test.Fatal("value is not correct") } if value4 != quickBrownFox { test.Fatal("value is not correct") } } + +func TestParseMeta (test *testing.T) { + meta, err := ParseMeta( +`thing: " Quoted string!!!!! " +Other-Thing: askdjlksajd + +number: 3849 +`) + if err != nil { + test.Fatal(err) + } + + test.Log("META:") + test.Log(meta) + value0, ok := meta["thing"] + if !ok { test.Fatal("missing key") } + value1, ok := meta["other-thing"] + if !ok { test.Fatal("missing key") } + value2, ok := meta["number"] + if !ok { test.Fatal("missing key") } + if value0 != "\tQuoted string!!!!!m " { test.Fatal("value is not correct") } + if value1 != "askdjlksajd" { test.Fatal("value is not correct") } + if value2 != "3849" { test.Fatal("value is not correct") } +}