diff options
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | cmd/filter.go | 49 | ||||
| -rw-r--r-- | cmd/filters.go | 46 | ||||
| -rw-r--r-- | cmd/uptfs.go (renamed from cmd/uptfs/main.go) | 35 | ||||
| -rw-r--r-- | main.go | 7 | ||||
| -rw-r--r-- | util/config/config.go (renamed from internal/config/config.go) | 0 | ||||
| -rw-r--r-- | util/split/split.go (renamed from internal/split/split.go) | 1 |
8 files changed, 131 insertions, 13 deletions
@@ -25,7 +25,7 @@ go.work.sum .env # binary -./uptfs +uptfs # config config.yaml @@ -1,4 +1,4 @@ -BINARY_DIR=./cmd/uptfs +BINARY_DIR=./cmd .PHONY: all all: build @@ -6,7 +6,7 @@ all: build .PHONY: build build: @echo "Building Go uptfs..." - go build $(BINARY_DIR) + go build .PHONY: clean clean: 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 { @@ -0,0 +1,7 @@ +package main + +import "uptfs/cmd" + +func main() { + cmd.Run() +} diff --git a/internal/config/config.go b/util/config/config.go index ad35ee7..ad35ee7 100644 --- a/internal/config/config.go +++ b/util/config/config.go diff --git a/internal/split/split.go b/util/split/split.go index 65e1a14..2fc29db 100644 --- a/internal/split/split.go +++ b/util/split/split.go @@ -23,6 +23,7 @@ func NewArrayWithSplit(initialArray []string, index int, token string, delimeter Here we check if it is so and essentialy remove that token from resulting array. */ + splitIsEmpty := checkArrayElementsEmpty(split) if splitIsEmpty { result = append(initialArray[:index], initialArray[index+1:]...) |
