1// Copyright (c) 2015 Ableton AG, Berlin. All rights reserved. 2// 3// Use of this source code is governed by a BSD-style 4// license that can be found in the LICENSE file. 5 6package travis 7 8import ( 9 "context" 10 "fmt" 11 "net/http" 12) 13 14// BetaFeaturesService handles communication with the 15// beta feature related methods of the Travis CI API. 16type BetaFeaturesService struct { 17 client *Client 18} 19 20// BetaFeature is a standard representation of an individual beta feature 21// 22// Travis CI API docs: https://developer.travis-ci.com/resource/beta_feature#attributes 23type BetaFeature struct { 24 // Value uniquely identifying the beta feature 25 Id uint `json:"id,omitempty"` 26 // The name of the feature 27 Name string `json:"name,omitempty"` 28 // Longer description of the feature 29 Description string `json:"description,omitempty"` 30 // Indicates if the user has this feature turned on 31 Enabled bool `json:"enabled,omitempty"` 32 // Url for users to leave Travis CI feedback on this feature 33 FeedbackUrl string `json:"feedback_url,omitempty"` 34 *Metadata 35} 36 37// betaFeaturesResponse represents a response 38// from organizations endpoints 39type betaFeaturesResponse struct { 40 BetaFeatures []*BetaFeature `json:"beta_features,omitempty"` 41} 42 43// List fetches a list of beta features available to a user 44// 45// Travis CI API docs: https://developer.travis-ci.com/resource/beta_features#find 46func (bs *BetaFeaturesService) List(ctx context.Context, userId uint) ([]*BetaFeature, *http.Response, error) { 47 u, err := urlWithOptions(fmt.Sprintf("/user/%d/beta_features", userId), nil) 48 if err != nil { 49 return nil, nil, err 50 } 51 52 req, err := bs.client.NewRequest(http.MethodGet, u, nil, nil) 53 if err != nil { 54 return nil, nil, err 55 } 56 57 var br betaFeaturesResponse 58 resp, err := bs.client.Do(ctx, req, &br) 59 if err != nil { 60 return nil, resp, err 61 } 62 63 return br.BetaFeatures, resp, err 64} 65 66// Update updates a user's beta_feature 67// 68// Travis CI API docs: https://developer.travis-ci.com/resource/beta_feature#update 69func (bs *BetaFeaturesService) Update(ctx context.Context, userId uint, id uint, enabled bool) (*BetaFeature, *http.Response, error) { 70 u, err := urlWithOptions(fmt.Sprintf("/user/%d/beta_feature/%d", userId, id), nil) 71 if err != nil { 72 return nil, nil, err 73 } 74 75 req, err := bs.client.NewRequest(http.MethodPatch, u, map[string]bool{"enabled": enabled}, nil) 76 if err != nil { 77 return nil, nil, err 78 } 79 80 var feature BetaFeature 81 resp, err := bs.client.Do(ctx, req, &feature) 82 if err != nil { 83 return nil, resp, err 84 } 85 86 return &feature, resp, err 87} 88 89// Delete delete a user's beta feature 90// 91// Travis CI API docs: https://developer.travis-ci.com/resource/beta_feature#delete 92func (bs *BetaFeaturesService) Delete(ctx context.Context, userId uint, id uint) (*BetaFeature, *http.Response, error) { 93 u, err := urlWithOptions(fmt.Sprintf("/user/%d/beta_feature/%d", userId, id), nil) 94 if err != nil { 95 return nil, nil, err 96 } 97 98 req, err := bs.client.NewRequest(http.MethodDelete, u, nil, nil) 99 if err != nil { 100 return nil, nil, err 101 } 102 103 var feature BetaFeature 104 resp, err := bs.client.Do(ctx, req, &feature) 105 if err != nil { 106 return nil, resp, err 107 } 108 109 return &feature, resp, err 110} 111