summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--Makefile4
-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
-rw-r--r--main.go7
-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
diff --git a/.gitignore b/.gitignore
index 15a7c3d..50ea6e5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,7 +25,7 @@ go.work.sum
.env
# binary
-./uptfs
+uptfs
# config
config.yaml
diff --git a/Makefile b/Makefile
index 6451759..0f55e78 100644
--- a/Makefile
+++ b/Makefile
@@ -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 {
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..10c5c9a
--- /dev/null
+++ b/main.go
@@ -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:]...)