mirror of
https://github.com/rancher/norman.git
synced 2025-08-01 07:21:07 +00:00
More mappers
This commit is contained in:
parent
ef95950ff9
commit
ee25c89cfd
46
types/mapper/batchmove.go
Normal file
46
types/mapper/batchmove.go
Normal file
@ -0,0 +1,46 @@
|
||||
package mapper
|
||||
|
||||
import (
|
||||
"path"
|
||||
|
||||
"github.com/rancher/norman/types"
|
||||
)
|
||||
|
||||
type BatchMove struct {
|
||||
From []string
|
||||
To string
|
||||
DestDefined bool
|
||||
NoDeleteFromField bool
|
||||
moves []Move
|
||||
}
|
||||
|
||||
func (b *BatchMove) FromInternal(data map[string]interface{}) {
|
||||
for _, m := range b.moves {
|
||||
m.FromInternal(data)
|
||||
}
|
||||
}
|
||||
|
||||
func (b *BatchMove) ToInternal(data map[string]interface{}) {
|
||||
for i := len(b.moves) - 1; i >= 0; i++ {
|
||||
b.moves[i].ToInternal(data)
|
||||
}
|
||||
}
|
||||
|
||||
func (b *BatchMove) ModifySchema(s *types.Schema, schemas *types.Schemas) error {
|
||||
for _, from := range b.From {
|
||||
b.moves = append(b.moves, Move{
|
||||
From: from,
|
||||
To: path.Join(b.To, from),
|
||||
DestDefined: b.DestDefined,
|
||||
NoDeleteFromField: b.NoDeleteFromField,
|
||||
})
|
||||
}
|
||||
|
||||
for _, m := range b.moves {
|
||||
if err := m.ModifySchema(s, schemas); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
@ -59,6 +59,7 @@ func (e *Embed) ModifySchema(schema *types.Schema, schemas *types.Schemas) error
|
||||
return fmt.Errorf("failed to find schema %s for embedding", embeddedSchemaID)
|
||||
}
|
||||
|
||||
deleteField := true
|
||||
for name, field := range embeddedSchema.ResourceFields {
|
||||
for _, ignore := range e.Ignore {
|
||||
if ignore == name {
|
||||
@ -66,20 +67,29 @@ func (e *Embed) ModifySchema(schema *types.Schema, schemas *types.Schemas) error
|
||||
}
|
||||
}
|
||||
|
||||
if !e.ignoreOverride {
|
||||
if _, ok := schema.ResourceFields[name]; ok {
|
||||
return fmt.Errorf("embedding field %s on %s will overwrite the field %s",
|
||||
e.Field, schema.ID, name)
|
||||
if name == e.Field {
|
||||
deleteField = false
|
||||
} else {
|
||||
if !e.ignoreOverride {
|
||||
if _, ok := schema.ResourceFields[name]; ok {
|
||||
return fmt.Errorf("embedding field %s on %s will overwrite the field %s",
|
||||
e.Field, schema.ID, name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if e.ReadOnly {
|
||||
field.Create = false
|
||||
field.Update = false
|
||||
}
|
||||
|
||||
schema.ResourceFields[name] = field
|
||||
e.embeddedFields = append(e.embeddedFields, name)
|
||||
}
|
||||
|
||||
delete(schema.ResourceFields, e.Field)
|
||||
if deleteField {
|
||||
delete(schema.ResourceFields, e.Field)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
@ -2,47 +2,27 @@ package mapper
|
||||
|
||||
import (
|
||||
"github.com/rancher/norman/types"
|
||||
"github.com/rancher/norman/types/convert"
|
||||
)
|
||||
|
||||
type Enum struct {
|
||||
Field string
|
||||
Values map[string][]string
|
||||
Field string
|
||||
Options []string
|
||||
}
|
||||
|
||||
func (e Enum) FromInternal(data map[string]interface{}) {
|
||||
v, ok := data[e.Field]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
str := convert.ToString(v)
|
||||
|
||||
mapping, ok := e.Values[str]
|
||||
if ok {
|
||||
data[e.Field] = mapping[0]
|
||||
} else {
|
||||
data[e.Field] = v
|
||||
}
|
||||
}
|
||||
|
||||
func (e Enum) ToInternal(data map[string]interface{}) {
|
||||
v, ok := data[e.Field]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
|
||||
str := convert.ToString(v)
|
||||
for newValue, values := range e.Values {
|
||||
for _, value := range values {
|
||||
if str == value {
|
||||
data[e.Field] = newValue
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (e Enum) ModifySchema(schema *types.Schema, schemas *types.Schemas) error {
|
||||
return ValidateField(e.Field, schema)
|
||||
if err := ValidateField(e.Field, schema); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
f := schema.ResourceFields[e.Field]
|
||||
f.Type = "enum"
|
||||
f.Options = e.Options
|
||||
schema.ResourceFields[e.Field] = f
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user