Merge pull request #2 from 178inaba/empty_parse
Fix to return nil if parse empty string
This commit is contained in:
commit
ee06f2596c
10
.travis.yml
10
.travis.yml
|
@ -1,14 +1,6 @@
|
||||||
language: go
|
language: go
|
||||||
|
|
||||||
go:
|
go:
|
||||||
- 1.5
|
|
||||||
- 1.6
|
- 1.6
|
||||||
|
- 1.7
|
||||||
- tip
|
- tip
|
||||||
|
|
||||||
install:
|
|
||||||
- ./script/bootstrap
|
|
||||||
|
|
||||||
script:
|
|
||||||
- ./script/test
|
|
||||||
# - ./script/lint
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Golang Link Header Parser
|
# Golang Link Header Parser
|
||||||
|
|
||||||
Library for parsing HTTP Link headers. Requires Go 1.2 or higher.
|
Library for parsing HTTP Link headers. Requires Go 1.6 or higher.
|
||||||
|
|
||||||
Docs can be found on [the GoDoc page](https://godoc.org/github.com/tomnomnom/linkheader).
|
Docs can be found on [the GoDoc page](https://godoc.org/github.com/tomnomnom/linkheader).
|
||||||
|
|
||||||
|
|
10
main.go
10
main.go
|
@ -63,6 +63,10 @@ func (l Links) FilterByRel(r string) Links {
|
||||||
// String returns the string representation of multiple Links
|
// String returns the string representation of multiple Links
|
||||||
// for use in HTTP responses etc
|
// for use in HTTP responses etc
|
||||||
func (l Links) String() string {
|
func (l Links) String() string {
|
||||||
|
if l == nil {
|
||||||
|
return fmt.Sprint(nil)
|
||||||
|
}
|
||||||
|
|
||||||
var strs []string
|
var strs []string
|
||||||
for _, link := range l {
|
for _, link := range l {
|
||||||
strs = append(strs, link.String())
|
strs = append(strs, link.String())
|
||||||
|
@ -74,7 +78,7 @@ func (l Links) String() string {
|
||||||
// <url>; rel="foo", <url>; rel="bar"; wat="dis"
|
// <url>; rel="foo", <url>; rel="bar"; wat="dis"
|
||||||
// returning a slice of Link structs
|
// returning a slice of Link structs
|
||||||
func Parse(raw string) Links {
|
func Parse(raw string) Links {
|
||||||
links := make(Links, 0)
|
var links Links
|
||||||
|
|
||||||
// One chunk: <url>; rel="foo"
|
// One chunk: <url>; rel="foo"
|
||||||
for _, chunk := range strings.Split(raw, ",") {
|
for _, chunk := range strings.Split(raw, ",") {
|
||||||
|
@ -110,7 +114,9 @@ func Parse(raw string) Links {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
links = append(links, link)
|
if link.URL != "" {
|
||||||
|
links = append(links, link)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return links
|
return links
|
||||||
|
|
21
main_test.go
21
main_test.go
|
@ -38,6 +38,27 @@ func TestSimple(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestEmpty(t *testing.T) {
|
||||||
|
links := Parse("")
|
||||||
|
if links != nil {
|
||||||
|
t.Errorf("Return value should be nil, but was %s", len(links))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Although not often seen in the wild, the grammar in RFC 5988 suggests that it's
|
||||||
|
// valid for a link header to have nothing but a URL.
|
||||||
|
func TestNoRel(t *testing.T) {
|
||||||
|
links := Parse("<http://example.com>")
|
||||||
|
|
||||||
|
if len(links) != 1 {
|
||||||
|
t.Fatalf("Length of links should be 1, but was %d", len(links))
|
||||||
|
}
|
||||||
|
|
||||||
|
if links[0].URL != "http://example.com" {
|
||||||
|
t.Errorf("URL should be http://example.com, but was %s", links[0].URL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestLinkMethods(t *testing.T) {
|
func TestLinkMethods(t *testing.T) {
|
||||||
header := "<https://api.github.com/user/9287/repos?page=1&per_page=100>; rel=\"prev\"; pet=\"cat\""
|
header := "<https://api.github.com/user/9287/repos?page=1&per_page=100>; rel=\"prev\"; pet=\"cat\""
|
||||||
links := Parse(header)
|
links := Parse(header)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user