Skip to content

Commit 7e80e53

Browse files
committed
Merge pull request #4 from ceocoder/added_parse_response_method
Added ParseResponse and ParseResponseBytes methods
2 parents ad2f6c0 + a229607 commit 7e80e53

File tree

3 files changed

+71
-1
lines changed

3 files changed

+71
-1
lines changed

fixtures_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package openrtb
33
var testFixtures = struct {
44
simpleBanner []byte
55
expandableCreative []byte
6+
simpleResponse []byte
67
}{
78
simpleBanner: []byte(`
89
{
@@ -134,4 +135,29 @@ var testFixtures = struct {
134135
]
135136
}
136137
}`),
138+
simpleResponse: []byte(`
139+
{
140+
"id": "BID-4-ZIMP-4b309eae-504a-4252-a8a8-4c8ceee9791a",
141+
"seatbid": [
142+
{
143+
"bid": [
144+
{
145+
"id": "32a69c6ba388f110487f9d1e63f77b22d86e916b",
146+
"impid": "32a69c6ba388f110487f9d1e63f77b22d86e916b",
147+
"price": 0.065445,
148+
"adid": "529833ce55314b19e8796116",
149+
"nurl": "http://ads.com/win/529833ce55314b19e8796116?won=${auction_price}",
150+
"adm": "<iframe src=\"foo.bar\"/>" ,
151+
"adomain": [],
152+
"cid": "529833ce55314b19e8796116",
153+
"crid": "529833ce55314b19e8796116_1385706446",
154+
"attr": []
155+
}
156+
],
157+
"seat": "772"
158+
}
159+
],
160+
"cur": "USD"
161+
}
162+
`),
137163
}

response.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package openrtb
22

3-
import "errors"
3+
import (
4+
"encoding/json"
5+
"errors"
6+
"io"
7+
)
48

59
// ID and at least one “seatbid” object is required, which contains a bid on at least one impression.
610
// Other attributes are optional since an exchange may establish default values.
@@ -21,6 +25,23 @@ var (
2125
ErrInvalidResSeatbid = errors.New("openrtb response: missing seatbids")
2226
)
2327

28+
//Parses an OpenRTB Response from an io.Reader
29+
func ParseResponse(reader io.Reader) (resp *Response, err error) {
30+
dec := json.NewDecoder(reader)
31+
if err = dec.Decode(&resp); err != nil {
32+
return nil, err
33+
}
34+
return resp, nil
35+
}
36+
37+
//Parses an OpenRTB Response from bytes
38+
func ParseResponseBytes(data []byte) (resp *Response, err error) {
39+
if err = json.Unmarshal(data, &resp); err != nil {
40+
return nil, err
41+
}
42+
return resp, nil
43+
}
44+
2445
// Validate Response required attributes
2546
// @return [Boolean,Error] true if response,seatbid,bid required attrs present
2647
func (res *Response) Valid() (bool, error) {

response_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package openrtb
22

33
import (
4+
"bytes"
45
. "github.com/onsi/ginkgo"
56
. "github.com/onsi/gomega"
67
)
78

89
var _ = Describe("Response", func() {
910
var subject *Response
11+
var sptr = func(s string) *string { return &s }
12+
var fptr = func(f float32) *float32 { return &f }
1013

1114
BeforeEach(func() {
1215
subject = new(Response)
@@ -28,4 +31,24 @@ var _ = Describe("Response", func() {
2831
Expect(err).NotTo(HaveOccurred())
2932
Expect(ok).To(BeTrue())
3033
})
34+
35+
It("should parse responses", func() {
36+
resp, err := ParseResponse(bytes.NewBuffer(testFixtures.simpleResponse))
37+
Expect(err).NotTo(HaveOccurred())
38+
39+
bid := Bid{
40+
Id: sptr("32a69c6ba388f110487f9d1e63f77b22d86e916b"),
41+
Impid: sptr("32a69c6ba388f110487f9d1e63f77b22d86e916b"),
42+
Price: fptr(0.065445),
43+
Adid: sptr("529833ce55314b19e8796116"),
44+
Nurl: sptr("http://ads.com/win/529833ce55314b19e8796116?won=${auction_price}"),
45+
Adm: sptr("<iframe src=\"foo.bar\"/>"),
46+
Adomain: []string{},
47+
Attr: []int{},
48+
Cid: sptr("529833ce55314b19e8796116"),
49+
Crid: sptr("529833ce55314b19e8796116_1385706446"),
50+
}
51+
52+
Expect(resp.Seatbid[0].Bid[0]).To(Equal(bid))
53+
})
3154
})

0 commit comments

Comments
 (0)