Tweaks
This commit is contained in:
@@ -120,7 +120,6 @@ func (t *automationTrigger) MarshalYAML() (interface{}, error) {
|
||||
"eventType", t.res.EventType,
|
||||
"constraints", t.res.Constraints,
|
||||
"enabled", t.res.Enabled,
|
||||
"workflowID", t.res.WorkflowID,
|
||||
|
||||
"stepID", t.res.StepID,
|
||||
"input", t.res.Input,
|
||||
|
||||
@@ -18,136 +18,6 @@ import (
|
||||
var _ = context.Background
|
||||
var _ = fmt.Errorf
|
||||
|
||||
// Document is an expression type, wrapper for *RenderedDocument type
|
||||
type Document struct{ value *RenderedDocument }
|
||||
|
||||
// NewDocument creates new instance of Document expression type
|
||||
func NewDocument(val interface{}) (*Document, error) {
|
||||
if c, err := CastToDocument(val); err != nil {
|
||||
return nil, fmt.Errorf("unable to create Document: %w", err)
|
||||
} else {
|
||||
return &Document{value: c}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// Return underlying value on Document
|
||||
func (t Document) Get() interface{} { return t.value }
|
||||
|
||||
// Return underlying value on Document
|
||||
func (t Document) GetValue() *RenderedDocument { return t.value }
|
||||
|
||||
// Return type name
|
||||
func (Document) Type() string { return "Document" }
|
||||
|
||||
// Convert value to *RenderedDocument
|
||||
func (Document) Cast(val interface{}) (TypedValue, error) {
|
||||
return NewDocument(val)
|
||||
}
|
||||
|
||||
// Assign new value to Document
|
||||
//
|
||||
// value is first passed through CastToDocument
|
||||
func (t *Document) Assign(val interface{}) error {
|
||||
if c, err := CastToDocument(val); err != nil {
|
||||
return err
|
||||
} else {
|
||||
t.value = c
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (t *Document) AssignFieldValue(key string, val TypedValue) error {
|
||||
return assignToDocument(t.value, key, val)
|
||||
}
|
||||
|
||||
// SelectGVal implements gval.Selector requirements
|
||||
//
|
||||
// It allows gval lib to access Document's underlying value (*RenderedDocument)
|
||||
// and it's fields
|
||||
//
|
||||
func (t Document) SelectGVal(ctx context.Context, k string) (interface{}, error) {
|
||||
return documentGValSelector(t.value, k)
|
||||
}
|
||||
|
||||
// Select is field accessor for *RenderedDocument
|
||||
//
|
||||
// Similar to SelectGVal but returns typed values
|
||||
func (t Document) Select(k string) (TypedValue, error) {
|
||||
return documentTypedValueSelector(t.value, k)
|
||||
}
|
||||
|
||||
func (t Document) Has(k string) bool {
|
||||
switch k {
|
||||
case "document":
|
||||
return true
|
||||
case "name":
|
||||
return true
|
||||
case "type":
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// documentGValSelector is field accessor for *RenderedDocument
|
||||
func documentGValSelector(res *RenderedDocument, k string) (interface{}, error) {
|
||||
switch k {
|
||||
case "document":
|
||||
return res.Document, nil
|
||||
case "name":
|
||||
return res.Name, nil
|
||||
case "type":
|
||||
return res.Type, nil
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("unknown field '%s'", k)
|
||||
}
|
||||
|
||||
// documentTypedValueSelector is field accessor for *RenderedDocument
|
||||
func documentTypedValueSelector(res *RenderedDocument, k string) (TypedValue, error) {
|
||||
switch k {
|
||||
case "document":
|
||||
return NewReader(res.Document)
|
||||
case "name":
|
||||
return NewString(res.Name)
|
||||
case "type":
|
||||
return NewString(res.Type)
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("unknown field '%s'", k)
|
||||
}
|
||||
|
||||
// assignToDocument is field value setter for *RenderedDocument
|
||||
func assignToDocument(res *RenderedDocument, k string, val interface{}) error {
|
||||
switch k {
|
||||
case "document":
|
||||
aux, err := CastToReader(val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
res.Document = aux
|
||||
return nil
|
||||
case "name":
|
||||
aux, err := CastToString(val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
res.Name = aux
|
||||
return nil
|
||||
case "type":
|
||||
aux, err := CastToString(val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
res.Type = aux
|
||||
return nil
|
||||
}
|
||||
|
||||
return fmt.Errorf("unknown field '%s'", k)
|
||||
}
|
||||
|
||||
// DocumentType is an expression type, wrapper for types.DocumentType type
|
||||
type DocumentType struct{ value types.DocumentType }
|
||||
|
||||
@@ -224,6 +94,136 @@ func (t *RenderOptions) Assign(val interface{}) error {
|
||||
}
|
||||
}
|
||||
|
||||
// RenderedDocument is an expression type, wrapper for *renderedDocument type
|
||||
type RenderedDocument struct{ value *renderedDocument }
|
||||
|
||||
// NewRenderedDocument creates new instance of RenderedDocument expression type
|
||||
func NewRenderedDocument(val interface{}) (*RenderedDocument, error) {
|
||||
if c, err := CastToRenderedDocument(val); err != nil {
|
||||
return nil, fmt.Errorf("unable to create RenderedDocument: %w", err)
|
||||
} else {
|
||||
return &RenderedDocument{value: c}, nil
|
||||
}
|
||||
}
|
||||
|
||||
// Return underlying value on RenderedDocument
|
||||
func (t RenderedDocument) Get() interface{} { return t.value }
|
||||
|
||||
// Return underlying value on RenderedDocument
|
||||
func (t RenderedDocument) GetValue() *renderedDocument { return t.value }
|
||||
|
||||
// Return type name
|
||||
func (RenderedDocument) Type() string { return "RenderedDocument" }
|
||||
|
||||
// Convert value to *renderedDocument
|
||||
func (RenderedDocument) Cast(val interface{}) (TypedValue, error) {
|
||||
return NewRenderedDocument(val)
|
||||
}
|
||||
|
||||
// Assign new value to RenderedDocument
|
||||
//
|
||||
// value is first passed through CastToRenderedDocument
|
||||
func (t *RenderedDocument) Assign(val interface{}) error {
|
||||
if c, err := CastToRenderedDocument(val); err != nil {
|
||||
return err
|
||||
} else {
|
||||
t.value = c
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func (t *RenderedDocument) AssignFieldValue(key string, val TypedValue) error {
|
||||
return assignToRenderedDocument(t.value, key, val)
|
||||
}
|
||||
|
||||
// SelectGVal implements gval.Selector requirements
|
||||
//
|
||||
// It allows gval lib to access RenderedDocument's underlying value (*renderedDocument)
|
||||
// and it's fields
|
||||
//
|
||||
func (t RenderedDocument) SelectGVal(ctx context.Context, k string) (interface{}, error) {
|
||||
return renderedDocumentGValSelector(t.value, k)
|
||||
}
|
||||
|
||||
// Select is field accessor for *renderedDocument
|
||||
//
|
||||
// Similar to SelectGVal but returns typed values
|
||||
func (t RenderedDocument) Select(k string) (TypedValue, error) {
|
||||
return renderedDocumentTypedValueSelector(t.value, k)
|
||||
}
|
||||
|
||||
func (t RenderedDocument) Has(k string) bool {
|
||||
switch k {
|
||||
case "document":
|
||||
return true
|
||||
case "name":
|
||||
return true
|
||||
case "type":
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// renderedDocumentGValSelector is field accessor for *renderedDocument
|
||||
func renderedDocumentGValSelector(res *renderedDocument, k string) (interface{}, error) {
|
||||
switch k {
|
||||
case "document":
|
||||
return res.Document, nil
|
||||
case "name":
|
||||
return res.Name, nil
|
||||
case "type":
|
||||
return res.Type, nil
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("unknown field '%s'", k)
|
||||
}
|
||||
|
||||
// renderedDocumentTypedValueSelector is field accessor for *renderedDocument
|
||||
func renderedDocumentTypedValueSelector(res *renderedDocument, k string) (TypedValue, error) {
|
||||
switch k {
|
||||
case "document":
|
||||
return NewReader(res.Document)
|
||||
case "name":
|
||||
return NewString(res.Name)
|
||||
case "type":
|
||||
return NewString(res.Type)
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("unknown field '%s'", k)
|
||||
}
|
||||
|
||||
// assignToRenderedDocument is field value setter for *renderedDocument
|
||||
func assignToRenderedDocument(res *renderedDocument, k string, val interface{}) error {
|
||||
switch k {
|
||||
case "document":
|
||||
aux, err := CastToReader(val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
res.Document = aux
|
||||
return nil
|
||||
case "name":
|
||||
aux, err := CastToString(val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
res.Name = aux
|
||||
return nil
|
||||
case "type":
|
||||
aux, err := CastToString(val)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
res.Type = aux
|
||||
return nil
|
||||
}
|
||||
|
||||
return fmt.Errorf("unknown field '%s'", k)
|
||||
}
|
||||
|
||||
// Role is an expression type, wrapper for *types.Role type
|
||||
type Role struct{ value *types.Role }
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
)
|
||||
|
||||
type (
|
||||
RenderedDocument struct {
|
||||
renderedDocument struct {
|
||||
Document io.Reader
|
||||
Name string
|
||||
Type string
|
||||
@@ -87,17 +87,17 @@ func CastToTemplateMeta(val interface{}) (out types.TemplateMeta, err error) {
|
||||
}
|
||||
}
|
||||
|
||||
func CastToDocument(val interface{}) (out *RenderedDocument, err error) {
|
||||
func CastToRenderedDocument(val interface{}) (out *renderedDocument, err error) {
|
||||
switch val := val.(type) {
|
||||
case expr.Iterator:
|
||||
out = &RenderedDocument{}
|
||||
out = &renderedDocument{}
|
||||
return out, val.Each(func(k string, v expr.TypedValue) error {
|
||||
return assignToDocument(out, k, v)
|
||||
return assignToRenderedDocument(out, k, v)
|
||||
})
|
||||
}
|
||||
|
||||
switch val := expr.UntypedValue(val).(type) {
|
||||
case *RenderedDocument:
|
||||
case *renderedDocument:
|
||||
return val, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unable to cast type %T to %T", val, out)
|
||||
|
||||
@@ -55,8 +55,8 @@ types:
|
||||
struct:
|
||||
- { name: 'short', exprType: 'String', goType: 'string'}
|
||||
- { name: 'description', exprType: 'String', goType: 'string'}
|
||||
Document:
|
||||
as: '*RenderedDocument'
|
||||
RenderedDocument:
|
||||
as: '*renderedDocument'
|
||||
struct:
|
||||
- { name: 'document', exprType: 'Reader', goType: 'io.Reader' }
|
||||
- { name: 'name', exprType: 'string', goType: 'string' }
|
||||
|
||||
@@ -753,7 +753,7 @@ type (
|
||||
}
|
||||
|
||||
templatesRenderResults struct {
|
||||
Document *RenderedDocument
|
||||
Document *renderedDocument
|
||||
}
|
||||
)
|
||||
|
||||
@@ -803,7 +803,7 @@ func (h templatesHandler) Render() *atypes.Function {
|
||||
|
||||
{
|
||||
Name: "document",
|
||||
Types: []string{"Document"},
|
||||
Types: []string{"RenderedDocument"},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -843,12 +843,12 @@ func (h templatesHandler) Render() *atypes.Function {
|
||||
out = &expr.Vars{}
|
||||
|
||||
{
|
||||
// converting results.Document (*RenderedDocument) to Document
|
||||
// converting results.Document (*renderedDocument) to RenderedDocument
|
||||
var (
|
||||
tval expr.TypedValue
|
||||
)
|
||||
|
||||
if tval, err = h.reg.Type("Document").Cast(results.Document); err != nil {
|
||||
if tval, err = h.reg.Type("RenderedDocument").Cast(results.Document); err != nil {
|
||||
return
|
||||
} else if err = expr.Assign(out, "document", tval); err != nil {
|
||||
return
|
||||
|
||||
@@ -187,7 +187,7 @@ func (h templatesHandler) render(ctx context.Context, args *templatesRenderArgs)
|
||||
}
|
||||
|
||||
rr := &templatesRenderResults{
|
||||
Document: &RenderedDocument{
|
||||
Document: &renderedDocument{
|
||||
Document: doc,
|
||||
Name: args.DocumentName,
|
||||
Type: args.DocumentType,
|
||||
|
||||
@@ -16,8 +16,8 @@ snippets:
|
||||
rvTemplate: &rvTemplate
|
||||
wf: Template
|
||||
|
||||
rvDocument: &rvDocument
|
||||
wf: Document
|
||||
rvRenderedDocument: &rvRenderedDocument
|
||||
wf: RenderedDocument
|
||||
|
||||
rvTotal: &rvTotal
|
||||
wf: UnsignedInteger
|
||||
@@ -158,4 +158,4 @@ functions:
|
||||
types:
|
||||
- { wf: RenderOptions }
|
||||
results:
|
||||
document: *rvDocument
|
||||
document: *rvRenderedDocument
|
||||
|
||||
@@ -175,7 +175,7 @@ func Initialize(ctx context.Context, log *zap.Logger, s store.Storer, c Config)
|
||||
automation.Role{},
|
||||
automation.Template{},
|
||||
automation.RenderOptions{},
|
||||
automation.Document{},
|
||||
automation.RenderedDocument{},
|
||||
)
|
||||
|
||||
automation.UsersHandler(
|
||||
|
||||
Reference in New Issue
Block a user