summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/filter.go49
-rw-r--r--cmd/filters.go46
-rw-r--r--cmd/uptfs.go (renamed from cmd/uptfs/main.go)35
3 files changed, 120 insertions, 10 deletions
diff --git a/cmd/filter.go b/cmd/filter.go
new file mode 100644
index 0000000..9d8ccac
--- /dev/null
+++ b/cmd/filter.go
@@ -0,0 +1,49 @@
+package cmd
+
+import (
+ "fmt"
+)
+
+type Filter struct {
+ name string
+ action func(string) string
+ subfilters []Filter
+}
+
+type Greeter interface {
+ Greet()
+}
+
+type Filterer interface {
+ Greeter
+ Filter(string) string
+}
+
+func (f Filter) Greet() {
+ subfilterCount := len(f.subfilters)
+
+ fmt.Printf("I am a filter and my name is %v\n", f.name)
+ if subfilterCount > 0 {
+ fmt.Println("My subfilters are:")
+
+ for _, subfilter := range f.subfilters {
+ fmt.Printf("- %v\n", subfilter.name)
+ }
+ }
+}
+
+func (f Filter) Filter(token string) (modifiedToken string) {
+ subfilterCount := len(f.subfilters)
+ modifiedToken = token
+
+ if subfilterCount > 0 {
+ for _, subfilter := range f.subfilters {
+ modifiedToken = subfilter.action(modifiedToken)
+ }
+
+ return modifiedToken
+ }
+
+ modifiedToken = f.action(token)
+ return modifiedToken
+}
diff --git a/cmd/filters.go b/cmd/filters.go
new file mode 100644
index 0000000..28592ba
--- /dev/null
+++ b/cmd/filters.go
@@ -0,0 +1,46 @@
+package cmd
+
+import (
+ "strings"
+)
+
+var filterList = map[string]interface{}{
+ "uppercase": NewUppercaseFilter,
+ "lowercase": NewLowercaseFilter,
+ "lowercase_extra": NewLowercaseFilterWithExtraSteps,
+}
+
+func NewUppercaseFilter() Filter {
+ uppercaseFilter := Filter{
+ name: "Uppercase",
+ action: strings.ToUpper,
+ subfilters: []Filter{},
+ }
+
+ return uppercaseFilter
+}
+
+func NewLowercaseFilter() Filter {
+ lowercaseFilter := Filter{
+ name: "Lowercase",
+ action: strings.ToLower,
+ subfilters: []Filter{},
+ }
+
+ return lowercaseFilter
+}
+
+func NewLowercaseFilterWithExtraSteps() Filter {
+ var subfilters []Filter
+
+ subfilters = append(subfilters, NewUppercaseFilter())
+ subfilters = append(subfilters, NewLowercaseFilter())
+
+ filter := Filter{
+ name: "Lowercase (extra dumb)",
+ action: func(string) string { return "" },
+ subfilters: subfilters,
+ }
+
+ return filter
+}
diff --git a/cmd/uptfs/main.go b/cmd/uptfs.go
index c8fbf89..1bba4c4 100644
--- a/cmd/uptfs/main.go
+++ b/cmd/uptfs.go
@@ -1,4 +1,4 @@
-package main
+package cmd
import (
"bufio"
@@ -6,16 +6,10 @@ import (
"fmt"
"os"
"strings"
- "uptfs/internal/config"
- "uptfs/internal/split"
+ "uptfs/util/split"
)
-const filepath = ""
-
-func main() {
- var config config.Config
- config.LoadConfig(filepath)
-
+func Run() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
inputString := scanner.Text()
@@ -30,7 +24,28 @@ func main() {
tokens := strings.Split(inputString, " ")
tokens = formatInput(tokens, additionalDelimeters)
- fmt.Println(tokens)
+ lowercaseFilter := NewLowercaseFilterWithExtraSteps()
+ lowercaseFilter.Greet()
+
+ var newTokens []string
+ for _, token := range tokens {
+ newTokens = append(newTokens, lowercaseFilter.Filter(token))
+ }
+
+ tokens = newTokens
+
+ uppercaseFilter := NewUppercaseFilter()
+ uppercaseFilter.Greet()
+
+ newTokens = nil
+ for _, token := range tokens {
+ newTokens = append(newTokens, uppercaseFilter.Filter(token))
+ }
+
+ result := strings.Join(newTokens, " ")
+
+ fmt.Println("")
+ fmt.Println(result)
}
func formatInput(tokenArray []string, delimeterArray []string) []string {