From c61bcaf6c0e6e3ebe49212d0873978af2746ba42 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Fri, 29 Dec 2017 15:09:30 -0700 Subject: [PATCH] Random mapper fixes --- types/mapper.go | 5 +++-- types/mapper/changetype.go | 27 +++++++++++++++++++++++++++ types/mapper/display_name.go | 3 ++- types/mapper/metadata.go | 1 + types/mapper/slice_to_map.go | 4 +++- types/types.go | 4 ++-- types/values/values.go | 4 ++++ 7 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 types/mapper/changetype.go diff --git a/types/mapper.go b/types/mapper.go index 7baf6d8c..a8913418 100644 --- a/types/mapper.go +++ b/types/mapper.go @@ -3,6 +3,7 @@ package types import ( "fmt" + "github.com/rancher/norman/types/convert" "github.com/rancher/norman/types/definition" ) @@ -92,9 +93,9 @@ func (t *typeMapper) ToInternal(data map[string]interface{}) { if schema.Mapper == nil { continue } - datas, _ := data[fieldName].([]map[string]interface{}) + datas, _ := data[fieldName].([]interface{}) for _, fieldData := range datas { - schema.Mapper.ToInternal(fieldData) + schema.Mapper.ToInternal(convert.ToMapInterface(fieldData)) } } diff --git a/types/mapper/changetype.go b/types/mapper/changetype.go new file mode 100644 index 00000000..a2e09c9c --- /dev/null +++ b/types/mapper/changetype.go @@ -0,0 +1,27 @@ +package mapper + +import ( + "github.com/rancher/norman/types" +) + +type ChangeType struct { + Field string + Type string +} + +func (c ChangeType) FromInternal(data map[string]interface{}) { +} + +func (c ChangeType) ToInternal(data map[string]interface{}) { +} + +func (c ChangeType) ModifySchema(schema *types.Schema, schemas *types.Schemas) error { + if err := ValidateField(c.Field, schema); err != nil { + return err + } + + f := schema.ResourceFields[c.Field] + f.Type = c.Type + schema.ResourceFields[c.Field] = f + return nil +} diff --git a/types/mapper/display_name.go b/types/mapper/display_name.go index 506aff16..d1a04183 100644 --- a/types/mapper/display_name.go +++ b/types/mapper/display_name.go @@ -8,7 +8,8 @@ var displayNameMappers = types.Mappers{ &Move{From: "name", To: "id"}, &Move{From: "displayName", To: "name"}, Access{Fields: map[string]string{ - "id": "", + "id": "", + "name": "cru", }}, } diff --git a/types/mapper/metadata.go b/types/mapper/metadata.go index c857047c..47b31338 100644 --- a/types/mapper/metadata.go +++ b/types/mapper/metadata.go @@ -6,6 +6,7 @@ import ( func NewMetadataMapper() types.Mapper { return types.Mappers{ + ChangeType{Field: "name", Type: "dnsLabel"}, Drop{"generateName"}, //Move{From: "selfLink", To: "resourcePath"}, Drop{"selfLink"}, diff --git a/types/mapper/slice_to_map.go b/types/mapper/slice_to_map.go index 78c47cd3..9ba47e41 100644 --- a/types/mapper/slice_to_map.go +++ b/types/mapper/slice_to_map.go @@ -31,7 +31,7 @@ func (s SliceToMap) FromInternal(data map[string]interface{}) { func (s SliceToMap) ToInternal(data map[string]interface{}) { datas, _ := data[s.Field].(map[string]interface{}) - var result []map[string]interface{} + var result []interface{} for name, item := range datas { mapItem, _ := item.(map[string]interface{}) @@ -43,6 +43,8 @@ func (s SliceToMap) ToInternal(data map[string]interface{}) { if len(result) > 0 { data[s.Field] = result + } else if datas != nil { + data[s.Field] = result } } diff --git a/types/types.go b/types/types.go index 3c028017..a1421d6f 100644 --- a/types/types.go +++ b/types/types.go @@ -117,10 +117,10 @@ type Field struct { Type string `json:"type,omitempty"` Default interface{} `json:"default,omitempty"` Nullable bool `json:"nullable,omitempty"` - Create bool `json:"create,omitempty"` + Create bool `json:"create"` WriteOnly bool `json:"writeOnly,omitempty"` Required bool `json:"required,omitempty"` - Update bool `json:"update,omitempty"` + Update bool `json:"update"` MinLength *int64 `json:"minLength,omitempty"` MaxLength *int64 `json:"maxLength,omitempty"` Min *int64 `json:"min,omitempty"` diff --git a/types/values/values.go b/types/values/values.go index 0b325435..0ec04457 100644 --- a/types/values/values.go +++ b/types/values/values.go @@ -84,6 +84,10 @@ func GetValue(data map[string]interface{}, keys ...string) (interface{}, bool) { } func PutValue(data map[string]interface{}, val interface{}, keys ...string) { + if data == nil { + return + } + // This is so ugly for i, key := range keys { if i == len(keys)-1 {