diff --git a/modules/circleci/client.go b/modules/circleci/client.go index 4f66f082..9465331c 100644 --- a/modules/circleci/client.go +++ b/modules/circleci/client.go @@ -8,17 +8,24 @@ import ( "io/ioutil" "net/http" "net/url" - "os" - - "github.com/wtfutil/wtf/wtf" ) -const APIEnvKey = "WTF_CIRCLE_API_KEY" +type Client struct { + apiKey string +} -func BuildsFor() ([]*Build, error) { +func NewClient(apiKey string) *Client { + client := Client{ + apiKey: apiKey, + } + + return &client +} + +func (client *Client) BuildsFor() ([]*Build, error) { builds := []*Build{} - resp, err := circleRequest("recent-builds") + resp, err := client.circleRequest("recent-builds") if err != nil { return builds, err } @@ -34,9 +41,9 @@ var ( circleAPIURL = &url.URL{Scheme: "https", Host: "circleci.com", Path: "/api/v1/"} ) -func circleRequest(path string) (*http.Response, error) { +func (client *Client) circleRequest(path string) (*http.Response, error) { params := url.Values{} - params.Add("circle-token", apiKey()) + params.Add("circle-token", client.apiKey) url := circleAPIURL.ResolveReference(&url.URL{Path: path, RawQuery: params.Encode()}) @@ -60,13 +67,6 @@ func circleRequest(path string) (*http.Response, error) { return resp, nil } -func apiKey() string { - return wtf.Config.UString( - "wtf.mods.circleci.apiKey", - os.Getenv(APIEnvKey), - ) -} - func parseJson(obj interface{}, text io.Reader) { jsonStream, err := ioutil.ReadAll(text) if err != nil { diff --git a/modules/circleci/widget.go b/modules/circleci/widget.go index 932340e9..62c4210e 100644 --- a/modules/circleci/widget.go +++ b/modules/circleci/widget.go @@ -2,6 +2,7 @@ package circleci import ( "fmt" + "os" "github.com/rivo/tview" "github.com/wtfutil/wtf/wtf" @@ -9,11 +10,20 @@ import ( type Widget struct { wtf.TextWidget + *Client } +const apiEnvKey = "WTF_CIRCLE_API_KEY" + func NewWidget(app *tview.Application) *Widget { + apiKey := wtf.Config.UString( + "wtf.mods.circleci.apiKey", + os.Getenv(apiEnvKey), + ) + widget := Widget{ TextWidget: wtf.NewTextWidget(app, "CircleCI", "circleci", false), + Client: NewClient(apiKey), } return &widget @@ -26,7 +36,7 @@ func (widget *Widget) Refresh() { return } - builds, err := BuildsFor() + builds, err := widget.Client.BuildsFor() widget.View.SetTitle(fmt.Sprintf("%s - Builds", widget.Name))