Skip to content

Commit 574af9c

Browse files
authored
Merge pull request #22 from sidhant92/develop
Release 2.0.0
2 parents 1f0f8a3 + 433510a commit 574af9c

16 files changed

+216
-56
lines changed

internal/operator/abstract_operator.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package operator
22

3-
import "github.com/sidhant92/bool-parser-go/pkg/constant"
3+
import (
4+
"github.com/sidhant92/bool-parser-go/pkg/constant"
5+
"github.com/sidhant92/bool-parser-go/pkg/domain"
6+
)
47

58
type AbstractOperator interface {
6-
Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error)
9+
Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error)
710

811
GetSymbol() string
912

internal/operator/contains_all_operator.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,26 @@ package operator
22

33
import (
44
"github.com/sidhant92/bool-parser-go/pkg/constant"
5+
"github.com/sidhant92/bool-parser-go/pkg/domain"
56
"reflect"
67
)
78

89
type ContainsAllOperator struct {
910
}
1011

11-
func (e *ContainsAllOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
12-
var leftArray []interface{}
13-
rv := reflect.ValueOf(left)
12+
func (e *ContainsAllOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
13+
var leftArray []domain.EvaluatedNode
14+
rv := reflect.ValueOf(leftOperand)
1415
if rv.Kind() == reflect.Slice {
1516
for i := 0; i < rv.Len(); i++ {
16-
leftArray = append(leftArray, rv.Index(i).Interface())
17+
leftArray = append(leftArray, domain.EvaluatedNode{
18+
Value: rv.Index(i).Interface(),
19+
DataType: leftOperandDataType,
20+
})
1721
}
1822
}
19-
for _, value := range right {
20-
res, err := GetOperator(constant.IN).Evaluate(constant.PRIMITIVE, dataType, validated, value, leftArray...)
23+
for _, rightOperand := range rightOperands {
24+
res, err := GetOperator(constant.IN).Evaluate(constant.PRIMITIVE, rightOperand.Value, rightOperand.DataType, leftArray)
2125
if err != nil {
2226
return false, err
2327
}

internal/operator/contains_any_operator.go

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,26 @@ package operator
22

33
import (
44
"github.com/sidhant92/bool-parser-go/pkg/constant"
5+
"github.com/sidhant92/bool-parser-go/pkg/domain"
56
"reflect"
67
)
78

89
type ContainsAnyOperator struct {
910
}
1011

11-
func (e *ContainsAnyOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
12-
var leftArray []interface{}
13-
rv := reflect.ValueOf(left)
12+
func (e *ContainsAnyOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
13+
var leftArray []domain.EvaluatedNode
14+
rv := reflect.ValueOf(leftOperand)
1415
if rv.Kind() == reflect.Slice {
1516
for i := 0; i < rv.Len(); i++ {
16-
leftArray = append(leftArray, rv.Index(i).Interface())
17+
leftArray = append(leftArray, domain.EvaluatedNode{
18+
Value: rv.Index(i).Interface(),
19+
DataType: leftOperandDataType,
20+
})
1721
}
1822
}
19-
for _, value := range right {
20-
res, err := GetOperator(constant.IN).Evaluate(constant.PRIMITIVE, dataType, validated, value, leftArray...)
23+
for _, rightOperand := range rightOperands {
24+
res, err := GetOperator(constant.IN).Evaluate(constant.PRIMITIVE, rightOperand.Value, rightOperand.DataType, leftArray)
2125
if err != nil {
2226
return false, err
2327
}

internal/operator/equals_operator.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,29 @@ package operator
33
import (
44
"github.com/sidhant92/bool-parser-go/internal/datatype"
55
"github.com/sidhant92/bool-parser-go/pkg/constant"
6+
"github.com/sidhant92/bool-parser-go/pkg/domain"
67
)
78

89
type EqualsOperator struct {
910
}
1011

11-
func (e *EqualsOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
12-
dt := datatype.GetDataType(dataType)
13-
res, err := dt.Compare(left, right[0], validated)
12+
func (e *EqualsOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
13+
comparableDataType := getComparableDataType(leftOperandDataType, rightOperands[0].DataType)
14+
dt := datatype.GetDataType(comparableDataType)
15+
res, err := dt.Compare(leftOperand, rightOperands[0].Value, true)
1416
if err != nil {
1517
return false, err
1618
}
1719
return res == 0, nil
1820
}
1921

22+
func getComparableDataType(leftOperandDataType constant.DataType, rightOperandDataType constant.DataType) constant.DataType {
23+
if constant.DataTypeAttributes[leftOperandDataType].Priority > constant.DataTypeAttributes[rightOperandDataType].Priority {
24+
return leftOperandDataType
25+
}
26+
return rightOperandDataType
27+
}
28+
2029
func (e *EqualsOperator) GetSymbol() string {
2130
return "="
2231
}

internal/operator/greater_than_equal_operator.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@ package operator
33
import (
44
"github.com/sidhant92/bool-parser-go/internal/datatype"
55
"github.com/sidhant92/bool-parser-go/pkg/constant"
6+
"github.com/sidhant92/bool-parser-go/pkg/domain"
67
)
78

89
type GreaterThanEqualOperator struct {
910
}
1011

11-
func (e *GreaterThanEqualOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
12-
dt := datatype.GetDataType(dataType)
13-
res, err := dt.Compare(left, right[0], validated)
12+
func (e *GreaterThanEqualOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
13+
err := Validate(leftOperand, leftOperandDataType, rightOperands[0].Value, rightOperands[0].DataType)
14+
if err != nil {
15+
return false, err
16+
}
17+
comparableDataType := GetComparableDataType(leftOperandDataType, rightOperands[0].DataType)
18+
dt := datatype.GetDataType(comparableDataType)
19+
res, err := dt.Compare(leftOperand, rightOperands[0].Value, true)
1420
if err != nil {
1521
return false, err
1622
}

internal/operator/greater_than_operator.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@ package operator
33
import (
44
"github.com/sidhant92/bool-parser-go/internal/datatype"
55
"github.com/sidhant92/bool-parser-go/pkg/constant"
6+
"github.com/sidhant92/bool-parser-go/pkg/domain"
67
)
78

89
type GreaterThanOperator struct {
910
}
1011

11-
func (e *GreaterThanOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
12-
dt := datatype.GetDataType(dataType)
13-
res, err := dt.Compare(left, right[0], validated)
12+
func (e *GreaterThanOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
13+
err := Validate(leftOperand, leftOperandDataType, rightOperands[0].Value, rightOperands[0].DataType)
14+
if err != nil {
15+
return false, err
16+
}
17+
comparableDataType := GetComparableDataType(leftOperandDataType, rightOperands[0].DataType)
18+
dt := datatype.GetDataType(comparableDataType)
19+
res, err := dt.Compare(leftOperand, rightOperands[0].Value, true)
1420
if err != nil {
1521
return false, err
1622
}

internal/operator/in_operator.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package operator
22

33
import (
44
"github.com/sidhant92/bool-parser-go/pkg/constant"
5+
"github.com/sidhant92/bool-parser-go/pkg/domain"
56
)
67

78
type InOperator struct {
89
}
910

10-
func (e *InOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
11-
for _, value := range right {
12-
res, err := GetOperator(constant.EQUALS).Evaluate(containerDataType, dataType, validated, left, value)
11+
func (e *InOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
12+
for _, value := range rightOperands {
13+
res, err := GetOperator(constant.EQUALS).Evaluate(containerDataType, leftOperand, leftOperandDataType, []domain.EvaluatedNode{value})
1314
if err != nil {
1415
return false, err
1516
}

internal/operator/less_than_equal_operator.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@ package operator
33
import (
44
"github.com/sidhant92/bool-parser-go/internal/datatype"
55
"github.com/sidhant92/bool-parser-go/pkg/constant"
6+
"github.com/sidhant92/bool-parser-go/pkg/domain"
67
)
78

89
type LessThanEqualOperator struct {
910
}
1011

11-
func (e *LessThanEqualOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
12-
dt := datatype.GetDataType(dataType)
13-
res, err := dt.Compare(left, right[0], validated)
12+
func (e *LessThanEqualOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
13+
err := Validate(leftOperand, leftOperandDataType, rightOperands[0].Value, rightOperands[0].DataType)
14+
if err != nil {
15+
return false, err
16+
}
17+
comparableDataType := GetComparableDataType(leftOperandDataType, rightOperands[0].DataType)
18+
dt := datatype.GetDataType(comparableDataType)
19+
res, err := dt.Compare(leftOperand, rightOperands[0].Value, true)
1420
if err != nil {
1521
return false, err
1622
}

internal/operator/less_than_operator.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@ package operator
33
import (
44
"github.com/sidhant92/bool-parser-go/internal/datatype"
55
"github.com/sidhant92/bool-parser-go/pkg/constant"
6+
"github.com/sidhant92/bool-parser-go/pkg/domain"
67
)
78

89
type LessThanOperator struct {
910
}
1011

11-
func (e *LessThanOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
12-
dt := datatype.GetDataType(dataType)
13-
res, err := dt.Compare(left, right[0], validated)
12+
func (e *LessThanOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
13+
err := Validate(leftOperand, leftOperandDataType, rightOperands[0].Value, rightOperands[0].DataType)
14+
if err != nil {
15+
return false, err
16+
}
17+
comparableDataType := GetComparableDataType(leftOperandDataType, rightOperands[0].DataType)
18+
dt := datatype.GetDataType(comparableDataType)
19+
res, err := dt.Compare(leftOperand, rightOperands[0].Value, true)
1420
if err != nil {
1521
return false, err
1622
}

internal/operator/not_equals_operator.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package operator
22

33
import (
44
"github.com/sidhant92/bool-parser-go/pkg/constant"
5+
"github.com/sidhant92/bool-parser-go/pkg/domain"
56
)
67

78
type NotEqualsOperator struct {
89
}
910

10-
func (e *NotEqualsOperator) Evaluate(containerDataType constant.ContainerDataType, dataType constant.DataType, validated bool, left interface{}, right ...interface{}) (bool, error) {
11+
func (e *NotEqualsOperator) Evaluate(containerDataType constant.ContainerDataType, leftOperand interface{}, leftOperandDataType constant.DataType, rightOperands []domain.EvaluatedNode) (bool, error) {
1112
eq := GetOperator(constant.EQUALS)
12-
res, err := eq.Evaluate(containerDataType, dataType, validated, left, right[0])
13+
res, err := eq.Evaluate(containerDataType, leftOperand, leftOperandDataType, rightOperands)
1314
if err != nil {
1415
return false, err
1516
}

0 commit comments

Comments
 (0)