Allow resource.Builder to modify requests per client

Gives the builder a hook point to add settings to each request. These
settings are applied before the request is created and so are unable to
view the request. Intended to set controls on a per request basis.
This commit is contained in:
Clayton Coleman
2017-11-15 21:00:32 -05:00
parent cb91e2d9b1
commit a972c6bb00
4 changed files with 70 additions and 0 deletions

View File

@@ -58,6 +58,7 @@ type Builder struct {
selectAll bool
includeUninitialized bool
limitChunks int64
requestTransforms []RequestTransform
resources []string
@@ -354,6 +355,13 @@ func (b *Builder) RequestChunksOf(chunkSize int64) *Builder {
return b
}
// TransformRequests alters API calls made by clients requested from this builder. Pass
// an empty list to clear modifiers.
func (b *Builder) TransformRequests(opts ...RequestTransform) *Builder {
b.requestTransforms = opts
return b
}
// SelectEverythingParam
func (b *Builder) SelectAllParam(selectAll bool) *Builder {
if selectAll && (b.labelSelector != nil || b.fieldSelector != nil) {
@@ -656,6 +664,7 @@ func (b *Builder) visitBySelector() *Result {
result.err = err
return result
}
client = NewClientWithOptions(client, b.requestTransforms...)
selectorNamespace := b.namespace
if mapping.Scope.Name() != meta.RESTScopeNameNamespace {
selectorNamespace = ""
@@ -705,6 +714,7 @@ func (b *Builder) visitByResource() *Result {
result.err = err
return result
}
client = NewClientWithOptions(client, b.requestTransforms...)
clients[s] = client
}