From 69094da9974668996387978cf75990a6ad380e21 Mon Sep 17 00:00:00 2001 From: Inanc Gumus Date: Tue, 6 Aug 2019 01:49:48 +0300 Subject: [PATCH] refactor: log parser text writer and func types --- .../log-parser-exp/filterby.go | 2 ++ .../log-parser-exp/filters.go | 2 +- .../log-parser-exp/groupby.go | 2 ++ .../log-parser-exp/main.go | 17 ++++++++++--- .../log-parser-exp/report.go | 2 -- .../log-parser-exp/textwriter.go | 25 +++++++++++-------- 6 files changed, 34 insertions(+), 16 deletions(-) diff --git a/27-functional-programming/log-parser-exp/filterby.go b/27-functional-programming/log-parser-exp/filterby.go index 7201aa7..5e88916 100644 --- a/27-functional-programming/log-parser-exp/filterby.go +++ b/27-functional-programming/log-parser-exp/filterby.go @@ -1,5 +1,7 @@ package main +type filterFunc func(result) (include bool) + func filterBy(results []result, filterer filterFunc) []result { out := results[:0] diff --git a/27-functional-programming/log-parser-exp/filters.go b/27-functional-programming/log-parser-exp/filters.go index 68de7cb..c5032ef 100644 --- a/27-functional-programming/log-parser-exp/filters.go +++ b/27-functional-programming/log-parser-exp/filters.go @@ -6,7 +6,7 @@ func noopFilter(r result) bool { return true } -func not(filter filterFunc) filterFunc { +func notUsing(filter filterFunc) filterFunc { return func(r result) bool { return !filter(r) } diff --git a/27-functional-programming/log-parser-exp/groupby.go b/27-functional-programming/log-parser-exp/groupby.go index 7d9f71a..a7f069f 100644 --- a/27-functional-programming/log-parser-exp/groupby.go +++ b/27-functional-programming/log-parser-exp/groupby.go @@ -1,5 +1,7 @@ package main +type groupFunc func(result) (key string) + func groupBy(results []result, keyer groupFunc) []result { grouped := make(map[string]result, len(results)) diff --git a/27-functional-programming/log-parser-exp/main.go b/27-functional-programming/log-parser-exp/main.go index 76e5642..ccf03f8 100644 --- a/27-functional-programming/log-parser-exp/main.go +++ b/27-functional-programming/log-parser-exp/main.go @@ -20,7 +20,7 @@ func main() { to(os.Stdout). retrieveFrom(textReader). filterBy(orgDomainsFilter). - // filterBy(not(domainExtFilter("org", "io"))). + // filterBy(notUsing(domainExtFilter("org", "io"))). // groupBy(pageGrouper). groupBy(domainGrouper). writeTo(textWriter). @@ -44,6 +44,17 @@ func recoverErr() { } /* -newReport -> stats.NewReport(). -Result -> stats.Record +newReport -> report.New(). +Result -> report.Line + +notUsing = report.Not + +_, err := stats.Parse(). + From(os.Stdin). + To(os.Stdout). + RetrieveFrom(stats.TextReader). + FilterBy(notUsing(stats.DomainExtFilter("org", "io"))). + GroupBy(stats.DomainGrouper). + WriteTo(stats.TextWriter). + Run() */ diff --git a/27-functional-programming/log-parser-exp/report.go b/27-functional-programming/log-parser-exp/report.go index a08e3b5..52f9e9c 100644 --- a/27-functional-programming/log-parser-exp/report.go +++ b/27-functional-programming/log-parser-exp/report.go @@ -4,8 +4,6 @@ import "io" type ( retrieveFunc func(io.Reader) ([]result, error) - filterFunc func(result) bool - groupFunc func(result) string writeFunc func(io.Writer, []result) error ) diff --git a/27-functional-programming/log-parser-exp/textwriter.go b/27-functional-programming/log-parser-exp/textwriter.go index d9be406..995cdba 100644 --- a/27-functional-programming/log-parser-exp/textwriter.go +++ b/27-functional-programming/log-parser-exp/textwriter.go @@ -8,23 +8,28 @@ import ( // TODO: sort by result key interfaces section -func textWriter(w io.Writer, results []result) error { - fmt.Fprintf(w, "%-25s %-10s %10s %10s\n", - "DOMAINS", "PAGES", "VISITS", "UNIQUES") +const ( - fmt.Fprintln(w, strings.Repeat("-", 58)) + // DOMAINS PAGES VISITS UNIQUES + // ^ ^ ^ ^ + // | | | | + header = "%-25s %-10s %10s %10s\n" + line = "%-25s %-10s %10d %10d\n" + footer = "\n%-36s %10d %10d\n" // -> "" VISITS UNIQUES + dashLength = 58 +) + +func textWriter(w io.Writer, results []result) error { + fmt.Fprintf(w, header, "DOMAINS", "PAGES", "VISITS", "UNIQUES") + fmt.Fprintln(w, strings.Repeat("-", dashLength)) var total result - for _, r := range results { total = total.add(r) - - fmt.Fprintf(w, "%-25s %-10s %10d %10d\n", - r.domain, r.page, r.visits, r.uniques) + fmt.Fprintf(w, line, r.domain, r.page, r.visits, r.uniques) } - fmt.Fprintf(w, "\n%-36s %10d %10d\n", - "", total.visits, total.uniques) + fmt.Fprintf(w, footer, "", total.visits, total.uniques) return nil }