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