with regex
This commit is contained in:
parent
d484d44981
commit
dd225fc130
6
pkg/schema/schema.go
Normal file
6
pkg/schema/schema.go
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package schema
|
||||||
|
|
||||||
|
type CharSchema struct {
|
||||||
|
Registry string `json:"registry" yaml:"registry"`
|
||||||
|
Plugins CharSchemaPlugins `json:"plugins" yaml:"plugins"`
|
||||||
|
}
|
52
pkg/schema/schema_plugin.go
Normal file
52
pkg/schema/schema_plugin.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package schema
|
||||||
|
|
||||||
|
import (
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CharSchemaPluginName string
|
||||||
|
|
||||||
|
type PluginOps struct {
|
||||||
|
Org string
|
||||||
|
RepositoryName string
|
||||||
|
Path string
|
||||||
|
Version string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cspn CharSchemaPluginName) Get() *PluginOps {
|
||||||
|
po := &PluginOps{}
|
||||||
|
reg := regexp.MustCompile(
|
||||||
|
`(?P<org>[\d\w\-_\.]+)\/(?P<repo>[\d\w\-_\.]+)(?P<path>#[\d\w\-_\.\/]+)?(?P<version>@[\d\w\-_\.\/]+)?(?P<path>#[\d\w\-_\.\/]+)?`,
|
||||||
|
)
|
||||||
|
matches := reg.FindStringSubmatch(string(cspn))
|
||||||
|
tags := reg.SubexpNames()
|
||||||
|
|
||||||
|
matchTags := make(map[string]string, len(matches))
|
||||||
|
for i, match := range matches {
|
||||||
|
tag := tags[i]
|
||||||
|
if existingTag, ok := matchTags[tag]; !ok || existingTag == "" {
|
||||||
|
matchTags[tag] = match
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if org, ok := matchTags["org"]; ok {
|
||||||
|
po.Org = org
|
||||||
|
}
|
||||||
|
if repo, ok := matchTags["repo"]; ok {
|
||||||
|
po.RepositoryName = repo
|
||||||
|
}
|
||||||
|
if path, ok := matchTags["path"]; ok {
|
||||||
|
po.Path = strings.TrimLeft(path, "#")
|
||||||
|
}
|
||||||
|
if version, ok := matchTags["version"]; ok {
|
||||||
|
po.Version = strings.TrimLeft(version, "@")
|
||||||
|
}
|
||||||
|
|
||||||
|
return po
|
||||||
|
}
|
||||||
|
|
||||||
|
type CharSchemaPlugins map[CharSchemaPluginName]CharSchemaPlugin
|
||||||
|
|
||||||
|
type CharSchemaPlugin struct {
|
||||||
|
}
|
72
pkg/schema/schema_plugin_test.go
Normal file
72
pkg/schema/schema_plugin_test.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package schema_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"git.front.kjuulh.io/kjuulh/char/pkg/schema"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSchemaNameCanParse(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
tt := []struct {
|
||||||
|
name string
|
||||||
|
inputString schema.CharSchemaPluginName
|
||||||
|
expected schema.PluginOps
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "default string",
|
||||||
|
inputString: `kju123K_-ulh/someRepo-._123`,
|
||||||
|
expected: schema.PluginOps{
|
||||||
|
Org: "kju123K_-ulh",
|
||||||
|
RepositoryName: "someRepo-._123",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "default string with path",
|
||||||
|
inputString: `kju123K_-ulh/someRepo-._123#somepath/sometoherpath/somethridpath`,
|
||||||
|
expected: schema.PluginOps{
|
||||||
|
Org: "kju123K_-ulh",
|
||||||
|
RepositoryName: "someRepo-._123",
|
||||||
|
Path: "somepath/sometoherpath/somethridpath",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "default string with version",
|
||||||
|
inputString: `kju123K_-ulh/someRepo-._123@12l3.jk1lj`,
|
||||||
|
expected: schema.PluginOps{
|
||||||
|
Org: "kju123K_-ulh",
|
||||||
|
RepositoryName: "someRepo-._123",
|
||||||
|
Version: "12l3.jk1lj",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "default string with version and path",
|
||||||
|
inputString: `kju123K_-ulh/someRepo-._123@12l3.jk1lj#somepath/sometoherpath/somethridpath`,
|
||||||
|
expected: schema.PluginOps{
|
||||||
|
Org: "kju123K_-ulh",
|
||||||
|
RepositoryName: "someRepo-._123",
|
||||||
|
Version: "12l3.jk1lj",
|
||||||
|
Path: "somepath/sometoherpath/somethridpath",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "default string with path and version",
|
||||||
|
inputString: `kju123K_-ulh/someRepo-._123#somepath/sometoherpath/somethridpath@12l3.jk1lj`,
|
||||||
|
expected: schema.PluginOps{
|
||||||
|
Org: "kju123K_-ulh",
|
||||||
|
RepositoryName: "someRepo-._123",
|
||||||
|
Version: "12l3.jk1lj",
|
||||||
|
Path: "somepath/sometoherpath/somethridpath",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range tt {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
actual := tc.inputString.Get()
|
||||||
|
require.Equal(t, tc.expected, *actual)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user