Fix record-value setting
This commit is contained in:
parent
cf95d42b5b
commit
6903ecfcf2
@ -388,10 +388,6 @@ func (t *ComposeRecord) Assign(val interface{}) error {
|
||||
}
|
||||
}
|
||||
|
||||
func (t *ComposeRecord) AssignFieldValue(key string, val interface{}) error {
|
||||
return assignToComposeRecord(t.value, key, val)
|
||||
}
|
||||
|
||||
// Select is field accessor for *types.Record
|
||||
//
|
||||
// Similar to SelectGVal but returns typed values
|
||||
|
||||
@ -3,6 +3,7 @@ package automation
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/PaesslerAG/gval"
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
"github.com/cortezaproject/corteza-server/pkg/expr"
|
||||
"github.com/spf13/cast"
|
||||
@ -60,6 +61,24 @@ func CastToComposeRecord(val interface{}) (out *types.Record, err error) {
|
||||
}
|
||||
}
|
||||
|
||||
var _ expr.DeepFieldAssigner = &ComposeRecord{}
|
||||
|
||||
// AssignFieldValue implements expr.DeepFieldAssigner
|
||||
//
|
||||
// We need to reroute value assigning for record-value-sets because
|
||||
// we loose the reference to record-value slice
|
||||
func (t *ComposeRecord) AssignFieldValue(kk []string, val interface{}) error {
|
||||
switch kk[0] {
|
||||
case "values":
|
||||
return assignToComposeRecordValues(&t.value.Values, kk[1:], val)
|
||||
// @todo deep setting labels
|
||||
default:
|
||||
return assignToComposeRecord(t.value, kk[0], val)
|
||||
}
|
||||
}
|
||||
|
||||
var _ gval.Selector = &ComposeRecord{}
|
||||
|
||||
// SelectGVal implements gval.Selector requirements
|
||||
//
|
||||
// It allows gval lib to access Record's underlying value (*types.Record)
|
||||
|
||||
@ -41,10 +41,10 @@ types:
|
||||
- { name: 'deletedAt', exprType: 'DateTime', goType: '*time.Time', mode: ro }
|
||||
- { name: 'deletedBy', exprType: 'ID', goType: 'uint64', mode: ro }
|
||||
customGValSelector: true
|
||||
customFieldAssigner: true
|
||||
|
||||
ComposeRecordValues:
|
||||
as: 'types.RecordValueSet'
|
||||
castFn: 'castComposeRecordValueSet'
|
||||
|
||||
ComposeRecordValueErrorSet:
|
||||
as: '*types.RecordValueErrorSet'
|
||||
|
||||
@ -13,7 +13,7 @@ func TestSetRecordValuesWithPath(t *testing.T) {
|
||||
|
||||
var (
|
||||
r = require.New(t)
|
||||
rvs = &RecordValues{types.RecordValueSet{}}
|
||||
rvs = &ComposeRecordValues{types.RecordValueSet{}}
|
||||
)
|
||||
|
||||
r.NoError(expr.Assign(rvs, "field1", "a"))
|
||||
@ -26,7 +26,7 @@ func TestSetRecordValuesWithPath(t *testing.T) {
|
||||
|
||||
var (
|
||||
r = require.New(t)
|
||||
rvs, err = CastToRecordValues(map[string]string{"field2": "b"})
|
||||
rvs, err = CastToComposeRecordValues(map[string]string{"field2": "b"})
|
||||
)
|
||||
|
||||
r.NoError(err)
|
||||
@ -37,7 +37,7 @@ func TestSetRecordValuesWithPath(t *testing.T) {
|
||||
|
||||
var (
|
||||
r = require.New(t)
|
||||
rvs, err = CastToRecordValues(map[string][]string{"field2": []string{"a", "b"}})
|
||||
rvs, err = CastToComposeRecordValues(map[string][]string{"field2": []string{"a", "b"}})
|
||||
)
|
||||
|
||||
r.NoError(err)
|
||||
@ -66,7 +66,7 @@ func TestRecordFieldValuesAccess(t *testing.T) {
|
||||
&types.RecordValue{Name: "m2", Value: "mVal2.0"},
|
||||
}}
|
||||
|
||||
tval = &Record{value: raw}
|
||||
tval = &ComposeRecord{value: raw}
|
||||
scope = expr.RVars{"rec": tval}.Vars()
|
||||
)
|
||||
|
||||
|
||||
@ -68,9 +68,11 @@ func (t *{{ $exprType }}) Assign(val interface{}) (error) {
|
||||
|
||||
|
||||
{{ if $def.Struct }}
|
||||
{{ if not $def.CustomFieldAssigner }}
|
||||
func (t *{{ $exprType }}) AssignFieldValue(key string, val interface{}) error {
|
||||
return {{ $def.AssignerFn }}(t.value, key, val)
|
||||
}
|
||||
{{ end }}
|
||||
|
||||
{{ if not $def.CustomGValSelector }}
|
||||
// SelectGVal implements gval.Selector requirements
|
||||
|
||||
@ -23,13 +23,14 @@ type (
|
||||
}
|
||||
|
||||
exprTypeDef struct {
|
||||
As string
|
||||
RawDefault string `yaml:"default"`
|
||||
AssignerFn string `yaml:"assignerFn"`
|
||||
BuiltInCastFn bool
|
||||
BuiltInAssignerFn bool
|
||||
CustomGValSelector bool `yaml:"customGValSelector"`
|
||||
Struct []*exprTypeStructDef
|
||||
As string
|
||||
RawDefault string `yaml:"default"`
|
||||
AssignerFn string `yaml:"assignerFn"`
|
||||
BuiltInCastFn bool
|
||||
BuiltInAssignerFn bool
|
||||
CustomGValSelector bool `yaml:"customGValSelector"`
|
||||
CustomFieldAssigner bool `yaml:"customFieldAssigner"`
|
||||
Struct []*exprTypeStructDef
|
||||
|
||||
// @todo custom setters
|
||||
// @todo custom getters
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user