Skip to content

Commit 6e029d0

Browse files
committed
add Filter() function
1 parent 59c4524 commit 6e029d0

File tree

4 files changed

+41
-40
lines changed

4 files changed

+41
-40
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
GOCMD=go
2-
VERSION=v0.1.6
2+
VERSION=v0.2.0
33

44
# First target for travis ci
55
test:

README.md

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -113,32 +113,11 @@ fmt.Println(string(json))
113113
#### Get news about a specific product
114114

115115
```go
116-
package main
117-
118-
import (
119-
"fmt"
120-
"strings"
121-
122-
"github.com/circa10a/go-aws-news"
123-
)
124-
125-
func getEKSAnnouncements(n awsnews.Announcements) awsnews.Announcements {
126-
var myEKSAnnouncements awsnews.Announcements
127-
for _, v := range n {
128-
if strings.Contains(v.Title, "EKS") {
129-
myEKSAnnouncements = append(myEKSAnnouncements, v)
130-
}
131-
}
132-
return myEKSAnnouncements
133-
}
134-
135-
func main() {
136-
news, err := awsnews.Fetch(2019, 12)
137-
if err != nil {
138-
fmt.Println(err)
139-
} else {
140-
getEKSAnnouncements(news).Print()
141-
}
116+
news, err := awsnews.Fetch(2019, 12)
117+
if err != nil {
118+
fmt.Println(err)
119+
} else {
120+
news.Filter([]string{"EKS", "ECS"}).Print()
142121
}
143122
```
144123

announcements.go

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"os"
77
"regexp"
8+
"strings"
89
"time"
910

1011
"github.com/PuerkitoBio/goquery"
@@ -26,24 +27,27 @@ type newsDoc struct {
2627
*goquery.Document
2728
}
2829

29-
// Fetch Fetches all of the announcements for the specified year/month that was input.
30-
func Fetch(year int, month int) (Announcements, error) {
30+
func (n newsDoc) GetAnnouncements() (Announcements, error) {
3131
// Create []Announcement
3232
var announcements Announcements
33-
doc, err := getNewsDoc(year, month)
34-
if err != nil {
35-
return announcements, err
36-
}
37-
news := newsDoc{doc}
38-
news.getSelectionItems().Each(func(i int, s *goquery.Selection) {
39-
title := news.getSelectionTitle(s)
40-
link := fmt.Sprintf("https:%v", news.getSelectionItemLink(s))
41-
date := parseDate(news.getSelectionItemDate(s))
33+
n.getSelectionItems().Each(func(i int, s *goquery.Selection) {
34+
title := n.getSelectionTitle(s)
35+
link := fmt.Sprintf("https:%v", n.getSelectionItemLink(s))
36+
date := parseDate(n.getSelectionItemDate(s))
4237
announcements = append(announcements, Announcement{Title: title, Link: link, PostDate: date})
4338
})
4439
return announcements, nil
4540
}
4641

42+
// Fetch Fetches all of the announcements for the specified year/month that was input.
43+
func Fetch(year int, month int) (Announcements, error) {
44+
doc, err := getNewsDoc(year, month)
45+
if err != nil {
46+
return Announcements{}, err
47+
}
48+
return newsDoc{doc}.GetAnnouncements()
49+
}
50+
4751
// Extract date from amazon's format
4852
// Input: Posted on: Jan 7, 2020
4953
// Output: Jan 7, 2020
@@ -122,3 +126,16 @@ func (a Announcements) JSON() ([]byte, error) {
122126
}
123127
return json, nil
124128
}
129+
130+
// Filter accepts a slice of products/terms to only return announcments you care about
131+
func (a Announcements) Filter(p []string) Announcements {
132+
var filteredAnnouncements Announcements
133+
for _, v := range a {
134+
for _, product := range p {
135+
if strings.Contains(strings.ToLower(v.Title), strings.ToLower(product)) {
136+
filteredAnnouncements = append(filteredAnnouncements, v)
137+
}
138+
}
139+
}
140+
return filteredAnnouncements
141+
}

announcements_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,15 @@ func TestYesterday(t *testing.T) {
5252
}
5353
}
5454

55-
// Integration test
5655
func TestJSON(t *testing.T) {
57-
news, err := Fetch(2019, 12)
56+
news, err := newsDoc{testDoc}.GetAnnouncements()
5857
assert.NoError(t, err)
5958
_, jsonErr := news.JSON()
6059
assert.NoError(t, jsonErr)
6160
}
61+
62+
func TestFilter(t *testing.T) {
63+
news, _ := newsDoc{testDoc}.GetAnnouncements()
64+
filteredNews := news.Filter([]string{"EKS", "ECS"})
65+
assert.Equal(t, len(filteredNews), 6)
66+
}

0 commit comments

Comments
 (0)