Skip to content

Commit f38f164

Browse files
committed
callback resolver to allow fast implementations
1 parent e9e7de4 commit f38f164

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

resolver.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,29 @@
11
package api2go
22

3+
import "net/http"
4+
5+
type callbackResolver struct {
6+
callback func(r http.Request) string
7+
r http.Request
8+
}
9+
10+
//NewCallbackResolver handles each resolve via
11+
//your provided callback func
12+
func NewCallbackResolver(callback func(http.Request) string) URLResolver {
13+
return &callbackResolver{callback: callback}
14+
}
15+
16+
//GetBaseURL calls the callback given in the constructor method
17+
//to implement `URLResolver`
18+
func (c callbackResolver) GetBaseURL() string {
19+
return c.callback(c.r)
20+
}
21+
22+
//SetRequest to implement `RequestAwareURLResolver`
23+
func (c *callbackResolver) SetRequest(r http.Request) {
24+
c.r = r
25+
}
26+
327
//staticResolver is only used
428
//for backwards compatible reasons
529
//and might be removed in the future

resolver_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package api2go
2+
3+
import (
4+
"net/http"
5+
6+
. "github.com/onsi/ginkgo"
7+
. "github.com/onsi/gomega"
8+
)
9+
10+
var _ = Describe("Resolver test", func() {
11+
Context("basic function of callback resolver", func() {
12+
It("works", func() {
13+
callback := func(r http.Request) string {
14+
if r.Header.Get("lol") != "" {
15+
return "funny"
16+
}
17+
18+
return "unfunny"
19+
}
20+
21+
resolver := NewCallbackResolver(callback)
22+
Expect(resolver.GetBaseURL()).To(Equal("unfunny"))
23+
req, err := http.NewRequest("GET", "/v1/posts", nil)
24+
req.Header.Set("lol", "lol")
25+
Expect(err).To(BeNil())
26+
requestResolver, ok := resolver.(RequestAwareURLResolver)
27+
Expect(ok).To(Equal(true), "does not implement interface")
28+
Expect(requestResolver.GetBaseURL()).To(Equal("unfunny"))
29+
requestResolver.SetRequest(*req)
30+
Expect(requestResolver.GetBaseURL()).To(Equal("funny"))
31+
})
32+
})
33+
})

0 commit comments

Comments
 (0)