From 9c57aad7d91d94c0bf719dd833dc479c151de43d Mon Sep 17 00:00:00 2001 From: Inanc Gumus Date: Tue, 6 Aug 2019 03:32:24 +0300 Subject: [PATCH] refactor: log parser names (again :)) --- .../log-parser-exp/log.txt | 2 +- .../log-parser-exp/main.go | 28 +++++------ .../log-parser-exp/report.go | 46 +++++++------------ .../log-parser-exp/textreader.go | 8 ++-- .../log-parser-exp/textwriter.go | 24 +++++----- 5 files changed, 47 insertions(+), 61 deletions(-) diff --git a/27-functional-programming/log-parser-exp/log.txt b/27-functional-programming/log-parser-exp/log.txt index e907371..fa57104 100644 --- a/27-functional-programming/log-parser-exp/log.txt +++ b/27-functional-programming/log-parser-exp/log.txt @@ -1,4 +1,4 @@ -learngoprogramming.com.tr / 10 5 +learngoprogramming.com / 10 5 learngoprogramming.com /courses 15 10 learngoprogramming.com /courses 10 5 learngoprogramming.com /articles 20 15 diff --git a/27-functional-programming/log-parser-exp/main.go b/27-functional-programming/log-parser-exp/main.go index ccf03f8..615482c 100644 --- a/27-functional-programming/log-parser-exp/main.go +++ b/27-functional-programming/log-parser-exp/main.go @@ -16,15 +16,12 @@ func main() { defer recoverErr() _, err := newReport(). - from(os.Stdin). - to(os.Stdout). - retrieveFrom(textReader). - filterBy(orgDomainsFilter). - // filterBy(notUsing(domainExtFilter("org", "io"))). - // groupBy(pageGrouper). + from(textReader(os.Stdin)). + to(textWriter(os.Stdout)). + // filterBy(orgDomainsFilter). + filterBy(notUsing(domainExtFilter("com", "io"))). groupBy(domainGrouper). - writeTo(textWriter). - run() + start() if err != nil { fmt.Println("> Err:", err) @@ -49,12 +46,11 @@ 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() +_, err := report.New(). + From(report.TextReader(os.Stdin)). + To(report.TextWriter(os.Stdout)). + // FilterBy(report.OrgDomainsFilter). + FilterBy(notUsing(report.DomainExtFilter("com", "io"))). + GroupBy(report.DomainGrouper). + Start() */ diff --git a/27-functional-programming/log-parser-exp/report.go b/27-functional-programming/log-parser-exp/report.go index 52f9e9c..6f717b1 100644 --- a/27-functional-programming/log-parser-exp/report.go +++ b/27-functional-programming/log-parser-exp/report.go @@ -1,19 +1,15 @@ package main -import "io" - type ( - retrieveFunc func(io.Reader) ([]result, error) - writeFunc func(io.Writer, []result) error + inputFunc func() ([]result, error) + outputFunc func([]result) error ) type report struct { - input io.Reader - output io.Writer - retrieve retrieveFunc - filter filterFunc - group groupFunc - write writeFunc + input inputFunc + filter filterFunc + group groupFunc + output outputFunc } func newReport() *report { @@ -22,18 +18,13 @@ func newReport() *report { } } -func (r *report) from(reader io.Reader) *report { - r.input = reader +func (r *report) from(fn inputFunc) *report { + r.input = fn return r } -func (r *report) to(writer io.Writer) *report { - r.output = writer - return r -} - -func (r *report) retrieveFrom(fn retrieveFunc) *report { - r.retrieve = fn +func (r *report) to(fn outputFunc) *report { + r.output = fn return r } @@ -47,17 +38,12 @@ func (r *report) groupBy(fn groupFunc) *report { return r } -func (r *report) writeTo(fn writeFunc) *report { - r.write = fn - return r -} - -func (r *report) run() ([]result, error) { - if r.retrieve == nil { - panic("report retrieve cannot be nil") +func (r *report) start() ([]result, error) { + if r.input == nil { + panic("report input cannot be nil") } - results, err := r.retrieve(r.input) + results, err := r.input() if err != nil { return nil, err } @@ -72,8 +58,8 @@ func (r *report) run() ([]result, error) { } // TODO: prefer: noop writer - if r.write != nil { - if err := r.write(r.output, results); err != nil { + if r.output != nil { + if err := r.output(results); err != nil { return nil, err } } diff --git a/27-functional-programming/log-parser-exp/textreader.go b/27-functional-programming/log-parser-exp/textreader.go index a77f8d0..5ff77e2 100644 --- a/27-functional-programming/log-parser-exp/textreader.go +++ b/27-functional-programming/log-parser-exp/textreader.go @@ -14,9 +14,11 @@ import ( "strings" ) -func textReader(r io.Reader) ([]result, error) { - in := bufio.NewScanner(r) - return parseText(in) +func textReader(r io.Reader) inputFunc { + return func() ([]result, error) { + in := bufio.NewScanner(r) + return parseText(in) + } } func parseText(in *bufio.Scanner) ([]result, error) { diff --git a/27-functional-programming/log-parser-exp/textwriter.go b/27-functional-programming/log-parser-exp/textwriter.go index 995cdba..b7a1326 100644 --- a/27-functional-programming/log-parser-exp/textwriter.go +++ b/27-functional-programming/log-parser-exp/textwriter.go @@ -19,17 +19,19 @@ const ( dashLength = 58 ) -func textWriter(w io.Writer, results []result) error { - fmt.Fprintf(w, header, "DOMAINS", "PAGES", "VISITS", "UNIQUES") - fmt.Fprintln(w, strings.Repeat("-", dashLength)) +func textWriter(w io.Writer) outputFunc { + return func(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, line, r.domain, r.page, r.visits, r.uniques) + var total result + for _, r := range results { + total = total.add(r) + fmt.Fprintf(w, line, r.domain, r.page, r.visits, r.uniques) + } + + fmt.Fprintf(w, footer, "", total.visits, total.uniques) + + return nil } - - fmt.Fprintf(w, footer, "", total.visits, total.uniques) - - return nil }