added proper output directory structure

This commit is contained in:
Daniel Fichtinger 2025-04-04 23:53:47 -04:00
parent fdb8753538
commit 988d4ba42e
3 changed files with 52 additions and 1 deletions

View file

@ -57,15 +57,17 @@ func processFile(inPath string, entry fs.DirEntry, err error, outRoot string, se
return nil
} else {
ext = filepath.Ext(inPath)
outPath = util.ReplaceRoot(inPath, outRoot)
// NOTE: This could be an if statement, but keeping
// the switch makes it easy to extend the logic here later
switch ext {
case ".md":
toProcess = true
outPath = util.ReplaceRoot(inPath, outRoot)
outPath = util.ChangeExtension(outPath, ".html")
outPath = util.Indexify(outPath)
default:
toProcess = false
outPath = util.ReplaceRoot(inPath, outRoot)
}
}

View file

@ -22,6 +22,7 @@ func ChangeExtension(in string, outExt string) string {
return strings.TrimSuffix(in, filepath.Ext(in)) + outExt
}
// TODO: look for .zona.yml instead?
func getRoot(path string) string {
for {
parent := filepath.Dir(path)
@ -40,6 +41,19 @@ func ReplaceRoot(inPath, outRoot string) string {
return outPath
}
// Indexify converts format path/file.ext
// into path/file/index.ext
func Indexify(in string) string {
ext := filepath.Ext(in)
trimmed := strings.TrimSuffix(in, ext)
filename := filepath.Base(trimmed)
if filename == "index" {
return in
}
prefix := strings.TrimSuffix(trimmed, filename)
return filepath.Join(prefix, filename, "index"+ext)
}
// InDir checks whether checkPath is
// inside targDir.
func InDir(checkPath string, targDir string) bool {

View file

@ -0,0 +1,35 @@
package util_test
import (
"testing"
"github.com/ficcdaf/zona/internal/util"
)
func TestIndexify(t *testing.T) {
tests := []struct {
name string // description of this test case
// Named input parameters for target function.
in string
want string
}{
{
"Simple Path",
"foo/bar/name.html",
"foo/bar/name/index.html",
},
{
"Index Name",
"foo/bar/index.md",
"foo/bar/index.md",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got := util.Indexify(tt.in)
if got != tt.want {
t.Errorf("Indexify() = %v, want %v", got, tt.want)
}
})
}
}