github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/cf/api/featureflags/feature_flags.go (about)

     1  package featureflags
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
     8  	"code.cloudfoundry.org/cli/cf/models"
     9  	"code.cloudfoundry.org/cli/cf/net"
    10  )
    11  
    12  //go:generate counterfeiter . FeatureFlagRepository
    13  
    14  type FeatureFlagRepository interface {
    15  	List() ([]models.FeatureFlag, error)
    16  	FindByName(string) (models.FeatureFlag, error)
    17  	Update(string, bool) error
    18  }
    19  
    20  type CloudControllerFeatureFlagRepository struct {
    21  	config  coreconfig.Reader
    22  	gateway net.Gateway
    23  }
    24  
    25  func NewCloudControllerFeatureFlagRepository(config coreconfig.Reader, gateway net.Gateway) CloudControllerFeatureFlagRepository {
    26  	return CloudControllerFeatureFlagRepository{
    27  		config:  config,
    28  		gateway: gateway,
    29  	}
    30  }
    31  
    32  func (repo CloudControllerFeatureFlagRepository) List() ([]models.FeatureFlag, error) {
    33  	flags := []models.FeatureFlag{}
    34  	apiError := repo.gateway.GetResource(
    35  		fmt.Sprintf("%s/v2/config/feature_flags", repo.config.APIEndpoint()),
    36  		&flags)
    37  
    38  	if apiError != nil {
    39  		return nil, apiError
    40  	}
    41  
    42  	return flags, nil
    43  }
    44  
    45  func (repo CloudControllerFeatureFlagRepository) FindByName(name string) (models.FeatureFlag, error) {
    46  	flag := models.FeatureFlag{}
    47  	apiError := repo.gateway.GetResource(
    48  		fmt.Sprintf("%s/v2/config/feature_flags/%s", repo.config.APIEndpoint(), name),
    49  		&flag)
    50  
    51  	if apiError != nil {
    52  		return models.FeatureFlag{}, apiError
    53  	}
    54  
    55  	return flag, nil
    56  }
    57  
    58  func (repo CloudControllerFeatureFlagRepository) Update(flag string, set bool) error {
    59  	url := fmt.Sprintf("/v2/config/feature_flags/%s", flag)
    60  	body := fmt.Sprintf(`{"enabled": %v}`, set)
    61  
    62  	return repo.gateway.UpdateResource(repo.config.APIEndpoint(), url, strings.NewReader(body))
    63  }