1package v2 2 3import ( 4 "errors" 5 "net/url" 6 "path" 7) 8 9const ( 10 // ExtensionsResource is the name of this resource type 11 ExtensionsResource = "extensions" 12) 13 14// StorePrefix returns the path prefix to this resource in the store 15func (e *Extension) StorePrefix() string { 16 return ExtensionsResource 17} 18 19// URIPath returns the path component of an extension URI. 20func (e *Extension) URIPath() string { 21 return path.Join(URLPrefix, "namespaces", url.PathEscape(e.Namespace), ExtensionsResource, url.PathEscape(e.Name)) 22} 23 24// Validate validates the extension. 25func (e *Extension) Validate() error { 26 if err := ValidateName(e.Name); err != nil { 27 return err 28 } 29 if e.URL == "" { 30 return errors.New("empty URL") 31 } 32 if e.Namespace == "" { 33 return errors.New("empty namespace") 34 } 35 return nil 36} 37 38// FixtureExtension given a name returns a valid extension for use in tests 39func FixtureExtension(name string) *Extension { 40 return &Extension{ 41 URL: "https://localhost:8080", 42 ObjectMeta: NewObjectMeta(name, "default"), 43 } 44} 45 46// NewExtension intializes an extension with the given object meta 47func NewExtension(meta ObjectMeta) *Extension { 48 return &Extension{ObjectMeta: meta} 49} 50 51// ExtensionFields returns a set of fields that represent that resource 52func ExtensionFields(r Resource) map[string]string { 53 resource := r.(*Extension) 54 return map[string]string{ 55 "extension.name": resource.ObjectMeta.Name, 56 "extension.namespace": resource.ObjectMeta.Namespace, 57 } 58} 59 60// SetNamespace sets the namespace of the resource. 61func (e *Extension) SetNamespace(namespace string) { 62 e.Namespace = namespace 63} 64