mirror of
				https://github.com/MontFerret/ferret.git
				synced 2025-10-30 23:37:40 +02:00 
			
		
		
		
	Refactored types lib
This commit is contained in:
		| @@ -1774,21 +1774,21 @@ func TestParam(t *testing.T) { | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestHtml(t *testing.T) { | ||||
| 	Convey("Should load a document", t, func() { | ||||
| 		c := compiler.New() | ||||
|  | ||||
| 		out, err := c.MustCompile(` | ||||
| LET doc = DOCUMENT("http://getbootstrap.com/docs/4.1/components/collapse/", true) | ||||
|  | ||||
| CLICK(doc, "#headingTwo > h5 > button") | ||||
| WAIT_CLASS(doc, "#collapseTwo", "bar") | ||||
|  | ||||
| RETURN TRUE | ||||
| 			`).Run(context.Background()) | ||||
|  | ||||
| 		So(err, ShouldBeNil) | ||||
|  | ||||
| 		So(string(out), ShouldEqual, `"int"`) | ||||
| 	}) | ||||
| } | ||||
| //func TestHtml(t *testing.T) { | ||||
| //	Convey("Should load a document", t, func() { | ||||
| //		c := compiler.New() | ||||
| // | ||||
| //		out, err := c.MustCompile(` | ||||
| //LET doc = DOCUMENT("http://getbootstrap.com/docs/4.1/components/collapse/", true) | ||||
| // | ||||
| //CLICK(doc, "#headingTwo > h5 > button") | ||||
| //WAIT_CLASS(doc, "#collapseTwo", "bar") | ||||
| // | ||||
| //RETURN TRUE | ||||
| //			`).Run(context.Background()) | ||||
| // | ||||
| //		So(err, ShouldBeNil) | ||||
| // | ||||
| //		So(string(out), ShouldEqual, `"int"`) | ||||
| //	}) | ||||
| //} | ||||
|   | ||||
| @@ -12,6 +12,10 @@ type DateTime struct { | ||||
| 	time.Time | ||||
| } | ||||
|  | ||||
| var ZeroDateTime = DateTime{ | ||||
| 	time.Time{}, | ||||
| } | ||||
|  | ||||
| func NewCurrentDateTime() DateTime { | ||||
| 	return DateTime{time.Now()} | ||||
| } | ||||
|   | ||||
| @@ -1,73 +0,0 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/collections" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| func ToBool(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return values.ParseBoolean(inputs[0].Unwrap()) | ||||
| } | ||||
|  | ||||
| func ToInt(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return values.ParseInt(inputs[0].Unwrap()) | ||||
| } | ||||
|  | ||||
| func ToFloat(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return values.ParseFloat(inputs[0].Unwrap()) | ||||
| } | ||||
|  | ||||
| func ToString(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return values.NewString(inputs[0].String()), nil | ||||
| } | ||||
|  | ||||
| func ToDateTime(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return values.ParseDateTime(inputs[0].String()) | ||||
| } | ||||
|  | ||||
| func ToArray(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	value := inputs[0] | ||||
|  | ||||
| 	switch value.Type() { | ||||
| 	case core.BooleanType, | ||||
| 		core.IntType, | ||||
| 		core.FloatType, | ||||
| 		core.StringType, | ||||
| 		core.DateTimeType, | ||||
| 		core.HTMLElementType, | ||||
| 		core.HTMLDocumentType: | ||||
| 		return values.NewArrayWith(value), nil | ||||
| 	case core.ArrayType: | ||||
| 		return value, nil | ||||
| 	case core.ObjectType: | ||||
| 		return collections.ToArray(collections.NewObjectIterator(value.(*values.Object))) | ||||
| 	default: | ||||
| 		return values.NewArray(0), nil | ||||
| 	} | ||||
| } | ||||
| @@ -1,107 +0,0 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| func isTypeof(value core.Value, ctype core.Type) core.Value { | ||||
| 	return values.NewBoolean(value.Type() == ctype) | ||||
| } | ||||
|  | ||||
| func IsNone(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.NoneType), nil | ||||
| } | ||||
|  | ||||
| func IsBool(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.BooleanType), nil | ||||
| } | ||||
|  | ||||
| func IsInt(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.IntType), nil | ||||
| } | ||||
|  | ||||
| func IsFloat(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.FloatType), nil | ||||
| } | ||||
|  | ||||
| func IsString(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.StringType), nil | ||||
| } | ||||
|  | ||||
| func IsDateTime(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.DateTimeType), nil | ||||
| } | ||||
|  | ||||
| func IsArray(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.ArrayType), nil | ||||
| } | ||||
|  | ||||
| func IsObject(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.ObjectType), nil | ||||
| } | ||||
|  | ||||
| func IsHTMLElement(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.HTMLElementType), nil | ||||
| } | ||||
|  | ||||
| func IsHTMLDocument(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.HTMLDocumentType), nil | ||||
| } | ||||
|  | ||||
| func IsBinary(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(inputs[0], core.BinaryType), nil | ||||
| } | ||||
|  | ||||
| func TypeName(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	if len(inputs) == 0 { | ||||
| 		return values.None, core.ErrMissedArgument | ||||
| 	} | ||||
|  | ||||
| 	return values.NewString(inputs[0].Type().String()), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_array.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_array.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is an array value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is array, otherwise false. | ||||
|  */ | ||||
| func IsArray(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.ArrayType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_binary.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_binary.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a binary value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is binary, otherwise false. | ||||
|  */ | ||||
| func IsBinary(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.BinaryType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_boolean.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_boolean.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a boolean value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is boolean, otherwise false. | ||||
|  */ | ||||
| func IsBool(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.BooleanType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_date_time.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_date_time.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a date time value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is date time, otherwise false. | ||||
|  */ | ||||
| func IsDateTime(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.DateTimeType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_float.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_float.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a float value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is float, otherwise false. | ||||
|  */ | ||||
| func IsFloat(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.FloatType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_html_document.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_html_document.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a HTMLDocument value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is HTMLDocument, otherwise false. | ||||
|  */ | ||||
| func IsHTMLDocument(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.HTMLDocumentType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_html_element.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_html_element.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a HTMLElement value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is HTMLElement, otherwise false. | ||||
|  */ | ||||
| func IsHTMLElement(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.HTMLElementType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_int.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_int.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a int value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is int, otherwise false. | ||||
|  */ | ||||
| func IsInt(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.IntType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_none.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_none.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a none value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is none, otherwise false. | ||||
|  */ | ||||
| func IsNone(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.NoneType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_object.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_object.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is an object value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is object, otherwise false. | ||||
|  */ | ||||
| func IsObject(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.ObjectType), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/is_string.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/is_string.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Checks whether value is a string value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns true if value is string, otherwise false. | ||||
|  */ | ||||
| func IsString(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return isTypeof(args[0], core.StringType), nil | ||||
| } | ||||
| @@ -1,6 +1,9 @@ | ||||
| package types | ||||
|  | ||||
| import "github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| import ( | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| func NewLib() map[string]core.Function { | ||||
| 	return map[string]core.Function{ | ||||
| @@ -24,3 +27,7 @@ func NewLib() map[string]core.Function { | ||||
| 		"TYPENAME":         TypeName, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func isTypeof(value core.Value, ctype core.Type) core.Value { | ||||
| 	return values.NewBoolean(core.IsTypeOf(value, ctype)) | ||||
| } | ||||
|   | ||||
							
								
								
									
										54
									
								
								pkg/stdlib/types/to_array.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								pkg/stdlib/types/to_array.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/collections" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Takes an input value of any type and convert it into an array value. | ||||
|  * @param (Value) - Input value of arbitrary type. | ||||
|  * @returns (Array) | ||||
|  * None is converted to an empty array | ||||
|  * Boolean values, numbers and strings are converted to an array containing the original value as its single element | ||||
|  * Arrays keep their original value | ||||
|  * Objects / HTML nodes are converted to an array containing their attribute values as array elements. | ||||
|  */ | ||||
| func ToArray(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	arg := args[0] | ||||
|  | ||||
| 	switch arg.Type() { | ||||
| 	case core.BooleanType, | ||||
| 		core.IntType, | ||||
| 		core.FloatType, | ||||
| 		core.StringType, | ||||
| 		core.DateTimeType: | ||||
| 		return values.NewArrayWith(arg), nil | ||||
| 	case core.HTMLElementType, | ||||
| 		core.HTMLDocumentType: | ||||
| 		val := arg.(values.HTMLNode) | ||||
| 		attrs := val.GetAttributes() | ||||
|  | ||||
| 		obj, ok := attrs.(*values.Object) | ||||
|  | ||||
| 		if !ok { | ||||
| 			return values.NewArray(0), nil | ||||
| 		} | ||||
|  | ||||
| 		return collections.ToArray(collections.NewObjectIterator(obj)) | ||||
| 	case core.ArrayType: | ||||
| 		return arg, nil | ||||
| 	case core.ObjectType: | ||||
| 		return collections.ToArray(collections.NewObjectIterator(arg.(*values.Object))) | ||||
| 	default: | ||||
| 		return values.NewArray(0), nil | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										67
									
								
								pkg/stdlib/types/to_boolean.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								pkg/stdlib/types/to_boolean.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Takes an input value of any type and converts it into the appropriate boolean value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - | ||||
|  * None is converted to false | ||||
|  * Numbers are converted to true, except for 0, which is converted to false | ||||
|  * Strings are converted to true if they are non-empty, and to false otherwise | ||||
|  * Dates are converted to true if they are not zero, and to false otherwise | ||||
|  * Arrays are always converted to true (even if empty) | ||||
|  * Objects / HtmlNodes / Binary are always converted to true | ||||
|  */ | ||||
| func ToBool(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	arg := args[0] | ||||
|  | ||||
| 	switch arg.Type() { | ||||
| 	case core.BooleanType: | ||||
| 		return arg, nil | ||||
| 	case core.IntType: | ||||
| 		val := arg.(values.Int) | ||||
|  | ||||
| 		if val != 0 { | ||||
| 			return values.True, nil | ||||
| 		} | ||||
|  | ||||
| 		return values.False, nil | ||||
| 	case core.FloatType: | ||||
| 		val := arg.(values.Float) | ||||
|  | ||||
| 		if val != 0 { | ||||
| 			return values.True, nil | ||||
| 		} | ||||
|  | ||||
| 		return values.False, nil | ||||
| 	case core.StringType: | ||||
| 		if arg.String() != "" { | ||||
| 			return values.True, nil | ||||
| 		} | ||||
|  | ||||
| 		return values.False, nil | ||||
| 	case core.DateTimeType: | ||||
| 		val := arg.(values.DateTime) | ||||
|  | ||||
| 		if !val.IsZero() { | ||||
| 			return values.True, nil | ||||
| 		} | ||||
|  | ||||
| 		return values.False, nil | ||||
| 	case core.NoneType: | ||||
| 		return values.False, nil | ||||
| 	default: | ||||
| 		return values.True, nil | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										177
									
								
								pkg/stdlib/types/to_boolean_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								pkg/stdlib/types/to_boolean_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,177 @@ | ||||
| package types_test | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| 	"github.com/MontFerret/ferret/pkg/stdlib/types" | ||||
| 	. "github.com/smartystreets/goconvey/convey" | ||||
| 	"testing" | ||||
| ) | ||||
|  | ||||
| func TestToBool(t *testing.T) { | ||||
| 	Convey("Bool", t, func() { | ||||
| 		Convey("When true should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.True, | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
|  | ||||
| 		Convey("When false should return false", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.False, | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.False) | ||||
| 		}) | ||||
| 	}) | ||||
|  | ||||
| 	Convey("Int", t, func() { | ||||
| 		Convey("When > 0 should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewInt(1), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
|  | ||||
| 		Convey("When < 0 should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewInt(-1), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
|  | ||||
| 		Convey("When 0 should return false", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.ZeroInt, | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.False) | ||||
| 		}) | ||||
| 	}) | ||||
|  | ||||
| 	Convey("Float", t, func() { | ||||
| 		Convey("When > 0 should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewFloat(1.1), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
|  | ||||
| 		Convey("When < 0 should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewFloat(-1.1), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
|  | ||||
| 		Convey("When 0 should return false", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.ZeroFloat, | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.False) | ||||
| 		}) | ||||
| 	}) | ||||
|  | ||||
| 	Convey("String", t, func() { | ||||
| 		Convey("When != '' should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewString("foobar"), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
|  | ||||
| 		Convey("When == '' should return false", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewString(""), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.False) | ||||
| 		}) | ||||
| 	}) | ||||
|  | ||||
| 	Convey("DateTime", t, func() { | ||||
| 		Convey("When > 0  should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewCurrentDateTime(), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
|  | ||||
| 		Convey("When == 0 should return false", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.ZeroDateTime, | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.False) | ||||
| 		}) | ||||
| 	}) | ||||
|  | ||||
| 	Convey("None", t, func() { | ||||
| 		Convey("Should return false", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.None, | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.False) | ||||
| 		}) | ||||
| 	}) | ||||
|  | ||||
| 	Convey("Array", t, func() { | ||||
| 		Convey("Should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewArray(0), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
| 	}) | ||||
|  | ||||
| 	Convey("Object", t, func() { | ||||
| 		Convey("Should return true", func() { | ||||
| 			out, err := types.ToBool( | ||||
| 				context.Background(), | ||||
| 				values.NewObject(), | ||||
| 			) | ||||
|  | ||||
| 			So(err, ShouldBeNil) | ||||
| 			So(out, ShouldEqual, values.True) | ||||
| 		}) | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/to_date_time.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/to_date_time.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Takes an input value of any type and converts it into the appropriate date time value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (DateTime) - Parsed date time. | ||||
|  */ | ||||
| func ToDateTime(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return values.ParseDateTime(args[0].String()) | ||||
| } | ||||
							
								
								
									
										86
									
								
								pkg/stdlib/types/to_float.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								pkg/stdlib/types/to_float.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Takes an input value of any type and convert it into a float value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Float) - | ||||
|  * None and false are converted to the value 0 | ||||
|  * true is converted to 1 | ||||
|  * Numbers keep their original value | ||||
|  * Strings are converted to their numeric equivalent if the string contains a valid representation of a number. | ||||
|  * String values that do not contain any valid representation of a number will be converted to the number 0. | ||||
|  * An empty array is converted to 0, an array with one member is converted into the result of TO_NUMBER() for its sole member. | ||||
|  * An array with two or more members is converted to the number 0. | ||||
|  * An object / HTML node is converted to the number 0. | ||||
|  */ | ||||
| func ToFloat(ctx context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	arg := args[0] | ||||
|  | ||||
| 	switch arg.Type() { | ||||
| 	case core.BooleanType: | ||||
| 		val := arg.(values.Boolean) | ||||
|  | ||||
| 		if val { | ||||
| 			return values.NewFloat(1), nil | ||||
| 		} | ||||
|  | ||||
| 		return values.ZeroFloat, nil | ||||
| 	case core.IntType: | ||||
| 		val := arg.(values.Int) | ||||
|  | ||||
| 		return values.Float(val), nil | ||||
| 	case core.FloatType: | ||||
| 		return arg, nil | ||||
| 	case core.StringType: | ||||
| 		str := arg.String() | ||||
|  | ||||
| 		if str == "" { | ||||
| 			return values.ZeroFloat, nil | ||||
| 		} | ||||
|  | ||||
| 		num, err := strconv.ParseFloat(str, 64) | ||||
|  | ||||
| 		if err != nil { | ||||
| 			return values.ZeroFloat, nil | ||||
| 		} | ||||
|  | ||||
| 		return values.NewFloat(num), nil | ||||
| 	case core.DateTimeType: | ||||
| 		val := arg.(values.DateTime) | ||||
|  | ||||
| 		if val.IsZero() { | ||||
| 			return values.ZeroFloat, nil | ||||
| 		} | ||||
|  | ||||
| 		return values.NewFloat(float64(val.Unix())), nil | ||||
| 	case core.NoneType: | ||||
| 		return values.ZeroFloat, nil | ||||
| 	case core.ArrayType: | ||||
| 		val := arg.(*values.Array) | ||||
|  | ||||
| 		if val.Length() == 0 { | ||||
| 			return values.ZeroFloat, nil | ||||
| 		} | ||||
|  | ||||
| 		if val.Length() == 1 { | ||||
| 			return ToFloat(ctx, val.Get(0)) | ||||
| 		} | ||||
|  | ||||
| 		return values.ZeroFloat, nil | ||||
| 	default: | ||||
| 		return values.ZeroFloat, nil | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										86
									
								
								pkg/stdlib/types/to_int.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								pkg/stdlib/types/to_int.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Takes an input value of any type and convert it into an integer value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Int) - | ||||
|  * None and false are converted to the value 0 | ||||
|  * true is converted to 1 | ||||
|  * Numbers keep their original value | ||||
|  * Strings are converted to their numeric equivalent if the string contains a valid representation of a number. | ||||
|  * String values that do not contain any valid representation of a number will be converted to the number 0. | ||||
|  * An empty array is converted to 0, an array with one member is converted into the result of TO_NUMBER() for its sole member. | ||||
|  * An array with two or more members is converted to the number 0. | ||||
|  * An object / HTML node is converted to the number 0. | ||||
|  */ | ||||
| func ToInt(ctx context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	arg := args[0] | ||||
|  | ||||
| 	switch arg.Type() { | ||||
| 	case core.BooleanType: | ||||
| 		val := arg.(values.Boolean) | ||||
|  | ||||
| 		if val { | ||||
| 			return values.NewInt(1), nil | ||||
| 		} | ||||
|  | ||||
| 		return values.ZeroInt, nil | ||||
| 	case core.IntType: | ||||
| 		return arg, nil | ||||
| 	case core.FloatType: | ||||
| 		val := arg.(values.Float) | ||||
|  | ||||
| 		return values.Int(val), nil | ||||
| 	case core.StringType: | ||||
| 		str := arg.String() | ||||
|  | ||||
| 		if str == "" { | ||||
| 			return values.ZeroInt, nil | ||||
| 		} | ||||
|  | ||||
| 		num, err := strconv.Atoi(str) | ||||
|  | ||||
| 		if err != nil { | ||||
| 			return values.ZeroInt, nil | ||||
| 		} | ||||
|  | ||||
| 		return values.NewInt(num), nil | ||||
| 	case core.DateTimeType: | ||||
| 		val := arg.(values.DateTime) | ||||
|  | ||||
| 		if val.IsZero() { | ||||
| 			return values.ZeroInt, nil | ||||
| 		} | ||||
|  | ||||
| 		return values.NewInt(int(val.Unix())), nil | ||||
| 	case core.NoneType: | ||||
| 		return values.ZeroInt, nil | ||||
| 	case core.ArrayType: | ||||
| 		val := arg.(*values.Array) | ||||
|  | ||||
| 		if val.Length() == 0 { | ||||
| 			return values.ZeroInt, nil | ||||
| 		} | ||||
|  | ||||
| 		if val.Length() == 1 { | ||||
| 			return ToInt(ctx, val.Get(0)) | ||||
| 		} | ||||
|  | ||||
| 		return values.ZeroInt, nil | ||||
| 	default: | ||||
| 		return values.ZeroInt, nil | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/to_string.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/to_string.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Takes an input value of any type and convert it into a string value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @return (String) - String representation of a given value. | ||||
|  */ | ||||
| func ToString(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return values.NewString(args[0].String()), nil | ||||
| } | ||||
							
								
								
									
										22
									
								
								pkg/stdlib/types/type_name.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkg/stdlib/types/type_name.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| package types | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Returns the data type name of value. | ||||
|  * @param value (Value) - Input value of arbitrary type. | ||||
|  * @returns (Boolean) - Returns string representation of a type. | ||||
|  */ | ||||
| func TypeName(_ context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, 1) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	return values.NewString(args[0].Type().String()), nil | ||||
| } | ||||
							
								
								
									
										31
									
								
								pkg/stdlib/utils/log.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								pkg/stdlib/utils/log.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| package utils | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/logging" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| ) | ||||
|  | ||||
| /* | ||||
|  * Writes messages into the system log. | ||||
|  */ | ||||
| func Log(ctx context.Context, args ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(args, 1, core.MaxArgs) | ||||
|  | ||||
| 	if err != nil { | ||||
| 		return values.None, err | ||||
| 	} | ||||
|  | ||||
| 	messages := make([]interface{}, 0, len(args)) | ||||
|  | ||||
| 	for _, input := range args { | ||||
| 		messages = append(messages, input) | ||||
| 	} | ||||
|  | ||||
| 	logger := logging.FromContext(ctx) | ||||
|  | ||||
| 	logger.Print(messages...) | ||||
|  | ||||
| 	return values.None, nil | ||||
| } | ||||
| @@ -3,11 +3,14 @@ package utils | ||||
| import ( | ||||
| 	"context" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/core" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/logging" | ||||
| 	"github.com/MontFerret/ferret/pkg/runtime/values" | ||||
| 	"time" | ||||
| ) | ||||
| 
 | ||||
| /* | ||||
|  * Pauses the execution for a given period. | ||||
|  * @param timeout (Int) - Integer value indication for how long to pause. | ||||
|  */ | ||||
| func Wait(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	err := core.ValidateArgs(inputs, 1, 1) | ||||
| 
 | ||||
| @@ -29,17 +32,3 @@ func Wait(_ context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 
 | ||||
| 	return values.None, nil | ||||
| } | ||||
| 
 | ||||
| func Log(ctx context.Context, inputs ...core.Value) (core.Value, error) { | ||||
| 	args := make([]interface{}, 0, len(inputs)+1) | ||||
| 
 | ||||
| 	for _, input := range inputs { | ||||
| 		args = append(args, input) | ||||
| 	} | ||||
| 
 | ||||
| 	logger := logging.FromContext(ctx) | ||||
| 
 | ||||
| 	logger.Print(args...) | ||||
| 
 | ||||
| 	return values.None, nil | ||||
| } | ||||
		Reference in New Issue
	
	Block a user