fuzzyworld

template / commit

Added ParametrizedText type.

1a02ef4e7763f12bde307d41e1406064abcff7aa · Pavel Safronov · 2022-10-21 15:16:55 -0700 · parents b0586433b70b

Added ParametrizedText type.
 config_test.go       |  6 +++---
 default_config.go    | 48 +++++++++++++++++++++++++-----------------------
 file.go              |  6 +++---
 name_pattern.go      |  2 +-
 name_pattern_test.go |  4 ++--
 postscript.go        |  2 +-
 postscript_test.go   |  8 ++++----
 profile.go           | 11 ++++++-----
 profile_test.go      | 20 ++++++++++----------
 9 files changed, 55 insertions(+), 52 deletions(-)

diff --git a/config_test.go b/config_test.go
index c214434..6d30a6f 100644
--- a/config_test.go
+++ b/config_test.go
@@ -107,7 +107,7 @@ func TestValidateConfig(t *testing.T) {
 		{
 			Name:         "daily",
 			IsDefault:    true,
-			NamePatterns: []string{"daily"},
+			NamePatterns: []ParameterizedText{"daily"},
 			File: File{
 				Template: "foo",
 			},
@@ -117,7 +117,7 @@ func TestValidateConfig(t *testing.T) {
 		{
 			Name:         "daily",
 			IsDefault:    true,
-			NamePatterns: []string{"daily"},
+			NamePatterns: []ParameterizedText{"daily"},
 			Type:         FileType,
 			File: File{
 				Template: "foo",
@@ -126,7 +126,7 @@ func TestValidateConfig(t *testing.T) {
 		{
 			Name:         "daily2",
 			IsDefault:    true,
-			NamePatterns: []string{"daily"},
+			NamePatterns: []ParameterizedText{"daily"},
 			Type:         FileType,
 			File: File{
 				Template: "foo",
diff --git a/default_config.go b/default_config.go
index 0de3dfc..bce8d8e 100644
--- a/default_config.go
+++ b/default_config.go
@@ -8,7 +8,7 @@ func defaultConfig() Config {
 				Description:  "Creates a MD file in ~/Dropbox/DailyNotes folder in the format YYYY-MM-DD[-vX].md",
 				Path:         "~/Dropbox/DailyNotes",
 				Type:         FileType,
-				NamePatterns: []string{"{{.Year}}-{{.Month}}-{{.Day}}.md"},
+				NamePatterns: []ParameterizedText{"{{.Year}}-{{.Month}}-{{.Day}}.md"},
 				File: File{
 					Template: `# {{.Year}}-{{.Month}}-{{.Day}}
 
@@ -16,14 +16,15 @@ Today's notes
 
 ## Todo
 
-1. [ ] Check email
-2. [ ] Check chat
-3. [ ] Check calendar
-4. [ ] Check yesterday's notes
-5. [ ] Have fun!`,
+1. Check email
+2. Check chat
+3. Check calendar
+4. Check yesterday's notes
+5. Have fun!
+6. ADD MORE ITEMS HERE`,
 				},
 				ScriptShell: "pwsh",
-				PostScripts: []string{
+				PostScripts: []ParameterizedText{
 					"code . \"{{.Path}}\"",
 				},
 			},
@@ -34,7 +35,7 @@ Today's notes
 				Path:        "~/Dropbox/Notes",
 				IsDefault:   true,
 				Type:        FileType,
-				NamePatterns: []string{
+				NamePatterns: []ParameterizedText{
 					"{{$version := getVersion}}" +
 						"{{.Year}}-{{.Month}}-{{.Day}}" +
 						"{{if .ProjectName}}-{{.ProjectName}}{{end}}" +
@@ -42,7 +43,7 @@ Today's notes
 						".md",
 				},
 				ScriptShell: "pwsh",
-				PostScripts: []string{
+				PostScripts: []ParameterizedText{
 					"code \"{{.Path}}\"",
 				},
 			},
@@ -55,7 +56,7 @@ Today's notes
 					TemplatePath: "~/.templates/blog-template.md",
 				},
 				Type: FileType,
-				NamePatterns: []string{
+				NamePatterns: []ParameterizedText{
 					"{{$version := getVersion}}" +
 						"{{.Year}}-{{.Month}}-{{.Day}}" +
 						"{{if .ProjectName}}-{{.ProjectName}}{{end}}" +
@@ -63,7 +64,7 @@ Today's notes
 						".md",
 				},
 				ScriptShell: "pwsh",
-				PostScripts: []string{
+				PostScripts: []ParameterizedText{
 					"code . \"{{.Name}}\"",
 				},
 			},
@@ -104,14 +105,14 @@ Sincerely, me
 `,
 				},
 				Type: FileType,
-				NamePatterns: []string{
+				NamePatterns: []ParameterizedText{
 					"{{$version := getVersion}}" +
 						"{{.Year}}-{{.Month}}-{{.Day}}" +
 						"{{if (gt $version 1)}}v{{$version}}{{end}}" +
 						".md",
 				},
 				ScriptShell: "pwsh",
-				PostScripts: []string{
+				PostScripts: []ParameterizedText{
 					"code . \"{{.Name}}\"",
 				},
 			},
@@ -120,24 +121,25 @@ Sincerely, me
 				Description: "Creates a folder in the ~/Work folder in the format YYYY-MM-DD[-hh][-mm][-ss][-ProjectName]",
 				Path:        "~/Work",
 				Type:        FolderType,
-				NamePatterns: []string{
+				NamePatterns: []ParameterizedText{
 					"{{.Year}}-{{.Month}}-{{.Day}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 					"{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 					"{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}-{{.Minute}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 					"{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}-{{.Minute}}-{{.Second}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 				},
 				ScriptShell: "pwsh",
-				PostScripts: []string{
+				PostScripts: []ParameterizedText{
 					"code \"{{.Path}}\"",
 				},
+				Files: []File{},
 			},
 			{
 				Name:        "folder",
 				Description: "Creates a folder in the current folder in the format YYYY-MM-DD[-ProjectName][-vVersion]",
 				Type:        FolderType,
 				ScriptShell: "pwsh",
-				PostScripts: []string{},
-				NamePatterns: []string{
+				PostScripts: []ParameterizedText{},
+				NamePatterns: []ParameterizedText{
 					"{{$version := getVersion}}" +
 						"{{.Year}}-{{.Month}}-{{.Day}}" +
 						"{{if .ProjectName}}-{{.ProjectName}}{{end}}" +
@@ -149,13 +151,13 @@ Sincerely, me
 				Type:        FolderType,
 				Description: "Creates a folder in the current folder in the format create-react-app[-ProjectName][-vVersion], runs `npx create-react-app` to initialize the folder, and opens the folder in VSCode",
 				ScriptShell: "pwsh",
-				NamePatterns: []string{
+				NamePatterns: []ParameterizedText{
 					"{{$version := getVersion}}" +
 						"create-react-app" +
 						"{{if .ProjectName}}-{{.ProjectName}}{{end}}" +
 						"{{if (gt $version 1)}}-n{{$version}}{{end}}",
 				},
-				PostScripts: []string{
+				PostScripts: []ParameterizedText{
 					"npx create-react-app .",
 					"code .",
 				},
@@ -166,14 +168,14 @@ Sincerely, me
 				OS:          "Windows",
 				Path:        "C:/code",
 				Type:        FolderType,
-				NamePatterns: []string{
+				NamePatterns: []ParameterizedText{
 					"{{.Year}}-{{.Month}}-{{.Day}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 					"{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 					"{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}-{{.Minute}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 					"{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}-{{.Minute}}-{{.Second}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 				},
 				ScriptShell: "pwsh",
-				PostScripts: []string{
+				PostScripts: []ParameterizedText{
 					"git init",
 					"code \"{{.Path}}\"",
 				},
@@ -182,11 +184,11 @@ Sincerely, me
 				Name:        "test",
 				Description: "Echoes the format YYYY-MM-DD[-hh][-mm][-ss][-ProjectName]",
 				Type:        ScriptType,
-				NamePatterns: []string{
+				NamePatterns: []ParameterizedText{
 					"{{.Year}}-{{.Month}}-{{.Day}}{{if .ProjectName}}-{{.ProjectName}}{{end}}",
 				},
 				ScriptShell: "pwsh",
-				PostScripts: []string{
+				PostScripts: []ParameterizedText{
 					"echo \"Name={{.Name}}\"",
 					"echo \"Path={{.Path}}\"",
 					"echo \"Value1={{.Extras.value1}}\"",
diff --git a/file.go b/file.go
index e364f77..5574051 100644
--- a/file.go
+++ b/file.go
@@ -30,7 +30,7 @@ func createFilePatternData(now time.Time, projectName string, name string, extra
 	}
 }
 
-func createTemplateFile(srcPath string, destPath string, projectName string, name string, extras map[string]string, usr user.User) error {
+func createFileFromTemplateFile(srcPath string, destPath string, projectName string, name string, extras map[string]string, usr user.User) error {
 	now := time.Now()
 	filePatternData := createFilePatternData(now, projectName, name, extras)
 
@@ -60,12 +60,12 @@ func createTemplateFile(srcPath string, destPath string, projectName string, nam
 	return nil
 }
 
-func createTemplateString(templateText string, projectName string, name string, extras map[string]string) (string, error) {
+func createTemplateString(templateText ParameterizedText, projectName string, name string, extras map[string]string) (string, error) {
 	now := time.Now()
 	filePatternData := createFilePatternData(now, projectName, name, extras)
 
 	// parse template
-	template, err := template.New("text-template").Parse(templateText)
+	template, err := template.New("text-template").Parse(string(templateText))
 	if err != nil {
 		return "", fmt.Errorf("error parsing template text: %v", err)
 	}
diff --git a/name_pattern.go b/name_pattern.go
index 32fb4d3..11e0996 100644
--- a/name_pattern.go
+++ b/name_pattern.go
@@ -41,7 +41,7 @@ func createNewNameForProfile(now time.Time, projectName string, profile Profile,
 
 		for {
 
-			template, err := template.Parse(namePattern)
+			template, err := template.Parse(string(namePattern))
 			if err != nil {
 				return "", fmt.Errorf("error parsing name pattern %d: %w", index, err)
 			}
diff --git a/name_pattern_test.go b/name_pattern_test.go
index f0e4dc9..485ccf8 100644
--- a/name_pattern_test.go
+++ b/name_pattern_test.go
@@ -16,7 +16,7 @@ func TestCreateNewName(t *testing.T) {
 	profile := Profile{
 		IsDefault: true,
 		Type:      FileType,
-		NamePatterns: []string{
+		NamePatterns: []ParameterizedText{
 			"{{.Extras.test1}}-{{.Year}}-{{.Month}}-{{.Day}}{{if .ProjectName}}-{{.ProjectName}}{{end}}.txt",
 			"{{.Extras.test1}}-{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}{{if .ProjectName}}-{{.ProjectName}}{{end}}.txt",
 			"{{.Extras.test1}}-{{.Year}}-{{.Month}}-{{.Day}}-{{.Hour}}-{{.Minute}}-{{.Second}}-{{.ProjectName}}.txt",
@@ -68,7 +68,7 @@ func TestCreateNewName_Index(t *testing.T) {
 	profile := Profile{
 		IsDefault: true,
 		Type:      FileType,
-		NamePatterns: []string{
+		NamePatterns: []ParameterizedText{
 			"{{.Extras.test1}}-{{$version := getVersion}}{{.Year}}-{{.Month}}-{{.Day}}v{{$version}}.txt",
 		},
 	}
diff --git a/postscript.go b/postscript.go
index e8cfcce..d9967f5 100644
--- a/postscript.go
+++ b/postscript.go
@@ -26,7 +26,7 @@ func createPostScriptArrays(profile Profile, newName string, fullPath string, ex
 	}
 
 	for _, postScriptPattern := range profile.PostScripts {
-		template, err := template.New("postscript").Parse(postScriptPattern)
+		template, err := template.New("postscript").Parse(string(postScriptPattern))
 		if err != nil {
 			return nil, err
 		}
diff --git a/postscript_test.go b/postscript_test.go
index 8ae03f6..722cb62 100644
--- a/postscript_test.go
+++ b/postscript_test.go
@@ -22,7 +22,7 @@ func TestCreatePostScriptArrays(t *testing.T) {
 	}
 
 	testSuccess(Profile{
-		PostScripts: []string{
+		PostScripts: []ParameterizedText{
 			"echo \"{{.Name}}\"",
 		},
 	})
@@ -30,15 +30,15 @@ func TestCreatePostScriptArrays(t *testing.T) {
 		PostScripts: nil,
 	})
 	testFailure(Profile{
-		PostScripts: []string{},
+		PostScripts: []ParameterizedText{},
 	})
 	testFailure(Profile{
-		PostScripts: []string{
+		PostScripts: []ParameterizedText{
 			"echo \"{{.Name\"",
 		},
 	})
 	testFailure(Profile{
-		PostScripts: []string{
+		PostScripts: []ParameterizedText{
 			"echo \"{{.NameUnknown}}\"",
 		},
 	})
diff --git a/profile.go b/profile.go
index 0c6ba81..5d76df4 100644
--- a/profile.go
+++ b/profile.go
@@ -31,9 +31,11 @@ const (
 	All     OSType = "All"
 )
 
+type ParameterizedText string
+
 type File struct {
 	TemplatePath string
-	Template     string
+	Template     ParameterizedText
 }
 
 type Profile struct {
@@ -43,12 +45,11 @@ type Profile struct {
 	Description  string
 	Path         string
 	Type         ProfileType
-	NamePatterns []string
-	PostScripts  []string
+	NamePatterns []ParameterizedText
+	PostScripts  []ParameterizedText
 	ScriptShell  string
 	OS           OSType
 	Files        []File
-	// FileTemplatePath string
 }
 
 var forbiddenProfileNames = []string{
@@ -149,7 +150,7 @@ func processProfile(profile Profile, projectName string, extras map[string]strin
 		useTemplate := profile.Template != ""
 		if useTemplateFile {
 			fmt.Printf("Creating file '%v' from template: %v\n", fullPath, profile.TemplatePath)
-			err := createTemplateFile(profile.TemplatePath, fullPath, projectName, newName, extras, usr)
+			err := createFileFromTemplateFile(profile.TemplatePath, fullPath, projectName, newName, extras, usr)
 			if err != nil {
 				return fmt.Errorf("error creating template file: %v", err)
 			}
diff --git a/profile_test.go b/profile_test.go
index cc0182a..47fe19e 100644
--- a/profile_test.go
+++ b/profile_test.go
@@ -21,12 +21,12 @@ func TestValidateProfile(t *testing.T) {
 	testSuccess(Profile{
 		Type:         FileType,
 		Name:         "daily",
-		NamePatterns: []string{"{{.Date}}"},
+		NamePatterns: []ParameterizedText{"{{.Date}}"},
 	})
 	testSuccess(Profile{
 		Type:         FileType,
 		Name:         "daily",
-		NamePatterns: []string{"{{.Date}}"},
+		NamePatterns: []ParameterizedText{"{{.Date}}"},
 		File: File{
 			Template: "foo",
 		},
@@ -34,7 +34,7 @@ func TestValidateProfile(t *testing.T) {
 	testSuccess(Profile{
 		Type:         FileType,
 		Name:         "daily",
-		NamePatterns: []string{"{{.Date}}"},
+		NamePatterns: []ParameterizedText{"{{.Date}}"},
 		File: File{
 			TemplatePath: "foo",
 		},
@@ -65,13 +65,13 @@ func TestValidateProfile(t *testing.T) {
 	testFailure(Profile{
 		Type:         FileType,
 		Name:         "daily",
-		NamePatterns: []string{},
+		NamePatterns: []ParameterizedText{},
 	})
 	// file template and file template path are set
 	testFailure(Profile{
 		Type:         FileType,
 		Name:         "daily",
-		NamePatterns: []string{"test"},
+		NamePatterns: []ParameterizedText{"test"},
 		File: File{
 			TemplatePath: "foo",
 			Template:     "bar",
@@ -81,7 +81,7 @@ func TestValidateProfile(t *testing.T) {
 	testFailure(Profile{
 		Type:         FolderType,
 		Name:         "daily",
-		NamePatterns: []string{"test"},
+		NamePatterns: []ParameterizedText{"test"},
 		File: File{
 			Template: "bar",
 		},
@@ -90,7 +90,7 @@ func TestValidateProfile(t *testing.T) {
 	testFailure(Profile{
 		Type:         FolderType,
 		Name:         "daily",
-		NamePatterns: []string{"test"},
+		NamePatterns: []ParameterizedText{"test"},
 		File: File{
 			TemplatePath: "bar",
 		},
@@ -99,14 +99,14 @@ func TestValidateProfile(t *testing.T) {
 	testFailure(Profile{
 		Type:         ScriptType,
 		Name:         "daily",
-		NamePatterns: []string{"test", "test2"},
+		NamePatterns: []ParameterizedText{"test", "test2"},
 	})
 	// postscripts with no shell
 	testFailure(Profile{
 		Type:         ScriptType,
 		Name:         "daily",
-		NamePatterns: []string{"test"},
-		PostScripts:  []string{"test"},
+		NamePatterns: []ParameterizedText{"test"},
+		PostScripts:  []ParameterizedText{"test"},
 		ScriptShell:  "",
 	})