refactor: log parser names (again :))
This commit is contained in:
		| @@ -1,4 +1,4 @@ | |||||||
| learngoprogramming.com.tr / 10 5 | learngoprogramming.com / 10 5 | ||||||
| learngoprogramming.com /courses 15 10 | learngoprogramming.com /courses 15 10 | ||||||
| learngoprogramming.com /courses 10 5 | learngoprogramming.com /courses 10 5 | ||||||
| learngoprogramming.com /articles 20 15 | learngoprogramming.com /articles 20 15 | ||||||
|   | |||||||
| @@ -16,15 +16,12 @@ func main() { | |||||||
| 	defer recoverErr() | 	defer recoverErr() | ||||||
|  |  | ||||||
| 	_, err := newReport(). | 	_, err := newReport(). | ||||||
| 		from(os.Stdin). | 		from(textReader(os.Stdin)). | ||||||
| 		to(os.Stdout). | 		to(textWriter(os.Stdout)). | ||||||
| 		retrieveFrom(textReader). | 		// filterBy(orgDomainsFilter). | ||||||
| 		filterBy(orgDomainsFilter). | 		filterBy(notUsing(domainExtFilter("com", "io"))). | ||||||
| 		// filterBy(notUsing(domainExtFilter("org", "io"))). |  | ||||||
| 		// groupBy(pageGrouper). |  | ||||||
| 		groupBy(domainGrouper). | 		groupBy(domainGrouper). | ||||||
| 		writeTo(textWriter). | 		start() | ||||||
| 		run() |  | ||||||
|  |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Println("> Err:", err) | 		fmt.Println("> Err:", err) | ||||||
| @@ -49,12 +46,11 @@ Result    -> report.Line | |||||||
|  |  | ||||||
| notUsing = report.Not | notUsing = report.Not | ||||||
|  |  | ||||||
| _, err := stats.Parse(). | _, err := report.New(). | ||||||
| 	From(os.Stdin). | 	From(report.TextReader(os.Stdin)). | ||||||
| 	To(os.Stdout). | 	To(report.TextWriter(os.Stdout)). | ||||||
| 	RetrieveFrom(stats.TextReader). | 	// FilterBy(report.OrgDomainsFilter). | ||||||
| 	FilterBy(notUsing(stats.DomainExtFilter("org", "io"))). | 	FilterBy(notUsing(report.DomainExtFilter("com", "io"))). | ||||||
| 	GroupBy(stats.DomainGrouper). | 	GroupBy(report.DomainGrouper). | ||||||
| 	WriteTo(stats.TextWriter). | 	Start() | ||||||
| 	Run() |  | ||||||
| */ | */ | ||||||
|   | |||||||
| @@ -1,19 +1,15 @@ | |||||||
| package main | package main | ||||||
|  |  | ||||||
| import "io" |  | ||||||
|  |  | ||||||
| type ( | type ( | ||||||
| 	retrieveFunc func(io.Reader) ([]result, error) | 	inputFunc  func() ([]result, error) | ||||||
| 	writeFunc    func(io.Writer, []result) error | 	outputFunc func([]result) error | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type report struct { | type report struct { | ||||||
| 	input    io.Reader | 	input  inputFunc | ||||||
| 	output   io.Writer | 	filter filterFunc | ||||||
| 	retrieve retrieveFunc | 	group  groupFunc | ||||||
| 	filter   filterFunc | 	output outputFunc | ||||||
| 	group    groupFunc |  | ||||||
| 	write    writeFunc |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func newReport() *report { | func newReport() *report { | ||||||
| @@ -22,18 +18,13 @@ func newReport() *report { | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (r *report) from(reader io.Reader) *report { | func (r *report) from(fn inputFunc) *report { | ||||||
| 	r.input = reader | 	r.input = fn | ||||||
| 	return r | 	return r | ||||||
| } | } | ||||||
|  |  | ||||||
| func (r *report) to(writer io.Writer) *report { | func (r *report) to(fn outputFunc) *report { | ||||||
| 	r.output = writer | 	r.output = fn | ||||||
| 	return r |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func (r *report) retrieveFrom(fn retrieveFunc) *report { |  | ||||||
| 	r.retrieve = fn |  | ||||||
| 	return r | 	return r | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -47,17 +38,12 @@ func (r *report) groupBy(fn groupFunc) *report { | |||||||
| 	return r | 	return r | ||||||
| } | } | ||||||
|  |  | ||||||
| func (r *report) writeTo(fn writeFunc) *report { | func (r *report) start() ([]result, error) { | ||||||
| 	r.write = fn | 	if r.input == nil { | ||||||
| 	return r | 		panic("report input cannot be nil") | ||||||
| } |  | ||||||
|  |  | ||||||
| func (r *report) run() ([]result, error) { |  | ||||||
| 	if r.retrieve == nil { |  | ||||||
| 		panic("report retrieve cannot be nil") |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	results, err := r.retrieve(r.input) | 	results, err := r.input() | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
| 	} | 	} | ||||||
| @@ -72,8 +58,8 @@ func (r *report) run() ([]result, error) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// TODO: prefer: noop writer | 	// TODO: prefer: noop writer | ||||||
| 	if r.write != nil { | 	if r.output != nil { | ||||||
| 		if err := r.write(r.output, results); err != nil { | 		if err := r.output(results); err != nil { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -14,9 +14,11 @@ import ( | |||||||
| 	"strings" | 	"strings" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func textReader(r io.Reader) ([]result, error) { | func textReader(r io.Reader) inputFunc { | ||||||
| 	in := bufio.NewScanner(r) | 	return func() ([]result, error) { | ||||||
| 	return parseText(in) | 		in := bufio.NewScanner(r) | ||||||
|  | 		return parseText(in) | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func parseText(in *bufio.Scanner) ([]result, error) { | func parseText(in *bufio.Scanner) ([]result, error) { | ||||||
|   | |||||||
| @@ -19,17 +19,19 @@ const ( | |||||||
| 	dashLength = 58 | 	dashLength = 58 | ||||||
| ) | ) | ||||||
|  |  | ||||||
| func textWriter(w io.Writer, results []result) error { | func textWriter(w io.Writer) outputFunc { | ||||||
| 	fmt.Fprintf(w, header, "DOMAINS", "PAGES", "VISITS", "UNIQUES") | 	return func(results []result) error { | ||||||
| 	fmt.Fprintln(w, strings.Repeat("-", dashLength)) | 		fmt.Fprintf(w, header, "DOMAINS", "PAGES", "VISITS", "UNIQUES") | ||||||
|  | 		fmt.Fprintln(w, strings.Repeat("-", dashLength)) | ||||||
|  |  | ||||||
| 	var total result | 		var total result | ||||||
| 	for _, r := range results { | 		for _, r := range results { | ||||||
| 		total = total.add(r) | 			total = total.add(r) | ||||||
| 		fmt.Fprintf(w, line, r.domain, r.page, r.visits, r.uniques) | 			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 |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user