fix: most of the template blocks
This commit is contained in:
@@ -18,11 +18,11 @@ type yamlBlock struct {
|
||||
}
|
||||
|
||||
type yamlField struct {
|
||||
Path string `yaml:"path"`
|
||||
Value any `yaml:"value,omitempty"`
|
||||
Codec string `yaml:"codec"`
|
||||
Hidden bool `yaml:"hidden,omitempty"`
|
||||
PathAlias []string `yaml:"pathAlias,omitempty"`
|
||||
Path string `yaml:"path"`
|
||||
Value any `yaml:"value,omitempty"`
|
||||
Codec string `yaml:"codec"`
|
||||
Hidden bool `yaml:"hidden,omitempty"`
|
||||
PathAlias string `yaml:"pathAlias,omitempty"`
|
||||
}
|
||||
|
||||
func parseYamlTemplate(input Slice) (block Block, err error) {
|
||||
@@ -34,7 +34,7 @@ func parseYamlTemplate(input Slice) (block Block, err error) {
|
||||
dec.KnownFields(true)
|
||||
|
||||
if err := dec.Decode(&blk); err != nil {
|
||||
return block, NewErrorf("content '%q' -> %w", cleaned, err).WithPosition(input.start, input.end)
|
||||
return block, NewErrorf("failed to parse yaml -> %w", err).WithPosition(input.start, input.end)
|
||||
}
|
||||
|
||||
if blk.Path == "" {
|
||||
|
@@ -1,9 +1,13 @@
|
||||
package template
|
||||
|
||||
import "strings"
|
||||
|
||||
// CompileTemplate scans once, emitting:
|
||||
// - data blocks: inner content between a line that's exactly "{" and a line that's exactly "}"
|
||||
// - matching blocks: gaps between data blocks (excluding the brace lines themselves)
|
||||
func CompileTemplate(templateSource string) ([]Block, error) {
|
||||
templateSource = strings.TrimSuffix(templateSource, "\n")
|
||||
|
||||
var out []Block
|
||||
var curlyIndex int
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package template_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"git.max-richter.dev/max/marka/registry"
|
||||
@@ -20,6 +21,10 @@ func TestExtractBlocks(t *testing.T) {
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
for i, b := range templateBlocks {
|
||||
fmt.Printf("Block#%d: %q\n", i, b.GetContent())
|
||||
}
|
||||
|
||||
expected := []template.Block{
|
||||
{
|
||||
Type: template.MatchingBlock,
|
||||
@@ -58,14 +63,11 @@ func TestExtractBlocks(t *testing.T) {
|
||||
{Type: template.MatchingBlock},
|
||||
{Type: template.DataBlock, Path: "name", Codec: "text"},
|
||||
{Type: template.MatchingBlock},
|
||||
{Type: template.DataBlock, Path: "keywords", Codec: "hashtags", Optional: true},
|
||||
{Type: template.MatchingBlock},
|
||||
{Type: template.DataBlock, Path: "description", Codec: "text"},
|
||||
{Type: template.MatchingBlock},
|
||||
{Type: template.DataBlock, Path: "recipeIngredient", Codec: "list", ListTemplate: "- { . }"},
|
||||
{Type: template.MatchingBlock},
|
||||
{Type: template.DataBlock, Path: "recipeInstructions", Codec: "list", ListTemplate: "{ @index }. { . }"},
|
||||
{Type: template.MatchingBlock},
|
||||
}
|
||||
|
||||
if len(templateBlocks) != len(expected) {
|
||||
|
Reference in New Issue
Block a user