summaryrefslogtreecommitdiff
path: root/internal/filter
diff options
context:
space:
mode:
Diffstat (limited to 'internal/filter')
-rw-r--r--internal/filter/filter.go49
-rw-r--r--internal/filter/filters.go46
2 files changed, 95 insertions, 0 deletions
diff --git a/internal/filter/filter.go b/internal/filter/filter.go
new file mode 100644
index 0000000..3fff07f
--- /dev/null
+++ b/internal/filter/filter.go
@@ -0,0 +1,49 @@
+package filter
+
+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/internal/filter/filters.go b/internal/filter/filters.go
new file mode 100644
index 0000000..8532fef
--- /dev/null
+++ b/internal/filter/filters.go
@@ -0,0 +1,46 @@
+package filter
+
+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
+}