-
Notifications
You must be signed in to change notification settings - Fork 0
/
example_test.go
96 lines (82 loc) · 2.85 KB
/
example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package globber_test
import (
"flag"
"fmt"
"strings"
"github.com/gentlemanautomaton/globber"
)
type Matcher interface {
Match(string) bool
}
type Book struct {
Title string
Authors []string
}
type BookSet []Book
func (books BookSet) ByTitle(matcher Matcher) (matched BookSet) {
for _, book := range books {
if matcher.Match(book.Title) {
matched = append(matched, book)
}
}
return
}
func (books BookSet) ByAuthor(matcher Matcher) (matched BookSet) {
for _, book := range books {
for _, author := range book.Authors {
if matcher.Match(author) {
matched = append(matched, book)
break
}
}
}
return
}
var books = BookSet{
// Freshman year
{"Marmots 100: Orientation to marmotology", []string{"John Bramble", "T. Jones"}},
{"Marmots 101: Native habitats and habits", []string{"John Bramble", "Grandpa George"}},
{"Marmots 102: Typical predators in lakes", []string{"John Bramble", "T. Jones"}},
// Sophomore year
{"Marmots 200: Basic principals + methods", []string{"Smith", "Wesson", "McCloud"}},
{"Marmots 201: Five 21st century policies", []string{"Don Juan the Iconoclast", "The Queen"}},
{"Marmots 205: Marmot mascots and beyond?", []string{"Franky Frank Frankness", "Koala McGoo"}},
// Comics
{"No one messes with Marmotron or friends", []string{"John Dooey"}},
{"How to spar with marmots, and feel okay", []string{"John Dooey", "Franky Dooey"}},
}
func Example() {
// Defaults
var (
title = globber.New("Marmots*")
author = globber.NewSet("John Bramble", "T. Jones", "*Queen*")
)
// Inputs
args := []string{"-title", "Marmots 20*", "-author", "*Bramble,*Franky*"}
// Flag processing
fs := flag.NewFlagSet("", flag.ContinueOnError)
fs.Var(&title, "title", "title search")
fs.Var(&author, "author", "author search (separated by commas)")
fs.Parse(args)
// Title match by glob
fmt.Printf("Books matching \"%s\" in the title:\n", title)
for _, book := range books.ByTitle(title) {
fmt.Printf("%s: %s\n", book.Title, strings.Join(book.Authors, ", "))
}
// Author match by glob set
fmt.Printf("Books written by %s:\n", author)
for _, book := range books.ByAuthor(author) {
fmt.Printf("%s: %s\n", book.Title, strings.Join(book.Authors, ", "))
}
// Output:
// Books matching "Marmots 20*" in the title:
// Marmots 200: Basic principals + methods: Smith, Wesson, McCloud
// Marmots 201: Five 21st century policies: Don Juan the Iconoclast, The Queen
// Marmots 205: Marmot mascots and beyond?: Franky Frank Frankness, Koala McGoo
// Books written by *Bramble,*Franky*:
// Marmots 100: Orientation to marmotology: John Bramble, T. Jones
// Marmots 101: Native habitats and habits: John Bramble, Grandpa George
// Marmots 102: Typical predators in lakes: John Bramble, T. Jones
// Marmots 205: Marmot mascots and beyond?: Franky Frank Frankness, Koala McGoo
// How to spar with marmots, and feel okay: John Dooey, Franky Dooey
}