Skip to content

Commit 7934a3b

Browse files
authored
Include support to headers in URL Resource (#282)
* feat: include support to headers in url resource * fix lint
1 parent 19ca461 commit 7934a3b

File tree

6 files changed

+77
-10
lines changed

6 files changed

+77
-10
lines changed

docs/cn/Tutorial_cn.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,18 @@ if err != nil {
232232
}
233233
```
234234

235+
#### 帶標題
236+
237+
```go
238+
headers := make(http.Header)
239+
headers.Set("Authorization", "Basic YWxhZGRpbjpvcGVuc2VzYW1l")
240+
urlRes := pkg.NewURLResourceWithHeaders("http://host.com/path/to/rule.grl", headers)
241+
err := ruleBuilder.BuildRuleFromResource("TutorialRules", "0.0.1", urlRes)
242+
if err != nil {
243+
panic(err)
244+
}
245+
```
246+
235247
### 从Git获取
236248

237249
```go

docs/de/Tutorial_de.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,18 @@ if err != nil {
276276
}
277277
```
278278

279+
#### With Headers
280+
281+
```go
282+
headers := make(http.Header)
283+
headers.Set("Authorization", "Basic YWxhZGRpbjpvcGVuc2VzYW1l")
284+
urlRes := pkg.NewURLResourceWithHeaders("http://host.com/path/to/rule.grl", headers)
285+
err := ruleBuilder.BuildRuleFromResource("TutorialRules", "0.0.1", urlRes)
286+
if err != nil {
287+
panic(err)
288+
}
289+
```
290+
279291
### From GIT
280292

281293
```go

docs/en/Tutorial_en.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,18 @@ if err != nil {
263263
}
264264
```
265265

266+
#### With Headers
267+
268+
```go
269+
headers := make(http.Header)
270+
headers.Set("Authorization", "Basic YWxhZGRpbjpvcGVuc2VzYW1l")
271+
urlRes := pkg.NewURLResourceWithHeaders("http://host.com/path/to/rule.grl", headers)
272+
err := ruleBuilder.BuildRuleFromResource("TutorialRules", "0.0.1", urlRes)
273+
if err != nil {
274+
panic(err)
275+
}
276+
```
277+
266278
### From GIT
267279

268280
```go

docs/id/Tutorial_id.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,18 @@ if err != nil {
298298
}
299299
```
300300

301+
#### With Headers
302+
303+
```go
304+
headers := make(http.Header)
305+
headers.Set("Authorization", "Basic YWxhZGRpbjpvcGVuc2VzYW1l")
306+
urlRes := pkg.NewURLResourceWithHeaders("http://host.com/path/to/rule.grl", headers)
307+
err := ruleBuilder.BuildRuleFromResource("TutorialRules", "0.0.1", urlRes)
308+
if err != nil {
309+
panic(err)
310+
}
311+
```
312+
301313
### From GIT
302314

303315
```go

examples/EvaluateMissingDataContext_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@ package examples
22

33
import (
44
"fmt"
5+
"testing"
6+
57
"github.com/hyperjumptech/grule-rule-engine/ast"
68
"github.com/hyperjumptech/grule-rule-engine/builder"
79
"github.com/hyperjumptech/grule-rule-engine/engine"
810
"github.com/hyperjumptech/grule-rule-engine/pkg"
9-
"testing"
1011
)
1112

1213
const (
13-
input_rule = `
14+
inputRule = `
1415
rule TestRule "" {
1516
when
1617
R.Result == 'NoResult' &&
@@ -22,7 +23,6 @@ const (
2223
`
2324
)
2425

25-
2626
func TestDataContextMissingFact(t *testing.T) {
2727

2828
oresult := &ObjectResult{
@@ -32,7 +32,7 @@ func TestDataContextMissingFact(t *testing.T) {
3232
// build rules
3333
lib := ast.NewKnowledgeLibrary()
3434
rb := builder.NewRuleBuilder(lib)
35-
err := rb.BuildRuleFromResource("Test", "0.0.1", pkg.NewBytesResource([]byte(input_rule)))
35+
err := rb.BuildRuleFromResource("Test", "0.0.1", pkg.NewBytesResource([]byte(inputRule)))
3636

3737
// add JSON fact
3838
json := []byte(`{"blabla":"bla","name":{"first":"john","last":"doe"}}`)
@@ -48,4 +48,4 @@ func TestDataContextMissingFact(t *testing.T) {
4848
// results in panic
4949
engine.NewGruleEngine().Execute(dcx, kb)
5050

51-
}
51+
}

pkg/resource.go

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,13 @@ package pkg
1616

1717
import (
1818
"fmt"
19-
"github.com/hyperjumptech/grule-rule-engine/logger"
2019
"io"
2120
"io/ioutil"
2221
"net/http"
2322
"path/filepath"
2423

24+
"github.com/hyperjumptech/grule-rule-engine/logger"
25+
2526
"github.com/bmatcuk/doublestar"
2627
"gopkg.in/src-d/go-billy.v4"
2728
)
@@ -201,14 +202,24 @@ func (res *BytesResource) String() string {
201202
// NewURLResource will create a new Resource using a resource as located in the url
202203
func NewURLResource(url string) Resource {
203204
return &URLResource{
204-
URL: url,
205+
URL: url,
206+
Header: make(http.Header),
207+
}
208+
}
209+
210+
// NewURLResourceWithHeaders will create a new Resource using a resource as located in the url with headers
211+
func NewURLResourceWithHeaders(url string, Header http.Header) Resource {
212+
return &URLResource{
213+
URL: url,
214+
Header: Header,
205215
}
206216
}
207217

208218
// URLResource is a struct that will hold the byte array data and URL source
209219
type URLResource struct {
210-
URL string
211-
Bytes []byte
220+
URL string
221+
Header http.Header
222+
Bytes []byte
212223
}
213224

214225
// String will state the resource url.
@@ -224,7 +235,15 @@ func (res *URLResource) Load() ([]byte, error) {
224235
if res.Bytes != nil {
225236
return res.Bytes, nil
226237
}
227-
resp, err := http.Get(res.URL)
238+
client := &http.Client{}
239+
req, err := http.NewRequest("GET", res.URL, nil)
240+
if len(res.Header) > 0 {
241+
req.Header = res.Header
242+
}
243+
if err != nil {
244+
return nil, err
245+
}
246+
resp, err := client.Do(req)
228247
if err != nil {
229248
return nil, err
230249
}

0 commit comments

Comments
 (0)