Skip to content

Commit 19bd0c7

Browse files
committed
Read username from ENV var as a default option
1 parent 55e7d43 commit 19bd0c7

5 files changed

+47
-12
lines changed

README.md

+16-3
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,26 @@ import github.com/qba73/geonames
2222

2323
## Creating a client
2424

25-
Export ENV Var or read the username from your app config
25+
Export ENV Var ```GEONAMES_USER```
26+
```go
27+
client, err := geonames.NewClient()
28+
if err != nil {
29+
// handle error
30+
}
31+
```
2632

33+
Provide username :
2734
```go
28-
user := os.Getenv("GEO_USER")
29-
client := geonames.NewClient(user)
35+
client, err := geonames.NewClient(
36+
geonames.WithUserName("dummy_user")
37+
)
38+
if err != nil {
39+
// handle error
40+
}
3041
```
3142

43+
44+
3245
## Bugs and feature request
3346

3447
If you find a bug in the ```geonames``` client library, please [open an issue](https://github.com/qba73/geonames/issues). If you'd like a feature added or improved, let me know via an issue.

geonames.go

+15-5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"net/http"
77
"net/url"
8+
"os"
89
"time"
910
)
1011

@@ -45,9 +46,18 @@ func WithHTTPHeaders(header http.Header) option {
4546
}
4647
}
4748

49+
func WithUserName(username string) option {
50+
return func(c *Client) error {
51+
if username == "" {
52+
return errors.New("nil username")
53+
}
54+
c.userName = username
55+
return nil
56+
}
57+
}
58+
4859
// Client is a client used for communicating with GeoNames web service.
4960
type Client struct {
50-
// UserName is a user name chosen when registered for GeoNames.org
5161
userName string
5262
userAgent string
5363
baseURL string
@@ -58,11 +68,11 @@ type Client struct {
5868
}
5969

6070
// NewClient knows how to create a client for GeoNames Web service.
61-
// The user name has to be registered at the GeoNames.org website.
62-
// HTTP requests without a valid username param will return 403 HTTP errors.
63-
func NewClient(username string, options ...option) (*Client, error) {
71+
// The username has to be registered at the GeoNames.org website.
72+
// HTTP requests without a valid username will return 403 HTTP errors.
73+
func NewClient(options ...option) (*Client, error) {
6474
c := Client{
65-
userName: username,
75+
userName: os.Getenv("GEONAMES_USER"),
6676
userAgent: userAgent,
6777
baseURL: "http://api.geonames.org",
6878
httpClient: &http.Client{

geonames_test.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ func TestWikipediaResolvesGeoNameOnValidInput(t *testing.T) {
6969
defer ts.Close()
7070

7171
name, country := "Castlebar", "IE"
72-
client, err := geonames.NewClient("DummyUser", geonames.WithBaseURL(ts.URL))
72+
client, err := geonames.NewClient(
73+
geonames.WithUserName("DummyUser"),
74+
geonames.WithBaseURL(ts.URL),
75+
)
7376
if err != nil {
7477
t.Fatal(err)
7578
}

postal_test.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ func TestGetPostalCodes_ReturnsSingleValueOnValidInput(t *testing.T) {
1818
)
1919
defer ts.Close()
2020

21-
client, err := geonames.NewClient("DummyUser", geonames.WithBaseURL(ts.URL))
21+
client, err := geonames.NewClient(
22+
geonames.WithUserName("DummyUser"),
23+
geonames.WithBaseURL(ts.URL),
24+
)
2225
if err != nil {
2326
t.Fatal(err)
2427
}
@@ -61,7 +64,10 @@ func TestGetPostalCodes_ReturnsMultipleValuesOnValidInput(t *testing.T) {
6164
)
6265
defer ts.Close()
6366

64-
client, err := geonames.NewClient("DummyUser", geonames.WithBaseURL(ts.URL))
67+
client, err := geonames.NewClient(
68+
geonames.WithUserName("DummyUser"),
69+
geonames.WithBaseURL(ts.URL),
70+
)
6571
if err != nil {
6672
t.Fatal(err)
6773
}

wikipedia_test.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ func TestGetPlace_RetrievesSingleGeoNameOnValidInput(t *testing.T) {
1515
ts := newTestServer(testFile, wantReqURI, t)
1616
defer ts.Close()
1717

18-
client, err := geonames.NewClient("DummyUser", geonames.WithBaseURL(ts.URL))
18+
client, err := geonames.NewClient(
19+
geonames.WithUserName("DummyUser"),
20+
geonames.WithBaseURL(ts.URL),
21+
)
1922
if err != nil {
2023
t.Fatal(err)
2124
}

0 commit comments

Comments
 (0)