Skip to content

Commit 7681c98

Browse files
committed
0.0.8 release
1 parent 5afc87e commit 7681c98

77 files changed

Lines changed: 1315 additions & 1220 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ script:
3939
- cd ../cmd/dfl
4040
- go fmt
4141
- go build
42-
- cd ../../cmd/dfljs
42+
- cd ../../cmd/dfl.js
4343
- go fmt
4444
- go build

cmd/dfl/main.go

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ package main
2828
import (
2929
"flag"
3030
"fmt"
31+
"log"
3132
"os"
33+
"reflect"
3234
"strings"
3335
"time"
3436
)
@@ -54,6 +56,7 @@ func main() {
5456
var verbose bool
5557
var version bool
5658
var pretty bool
59+
var dry_run bool
5760
var help bool
5861

5962
flag.StringVar(&filter_text, "f", "", "The DFL expression to evaulate")
@@ -62,6 +65,7 @@ func main() {
6265
flag.BoolVar(&load_env, "env", false, "Load environment variables")
6366
flag.BoolVar(&verbose, "verbose", false, "Provide verbose output")
6467
flag.BoolVar(&version, "version", false, "Prints version to stdout")
68+
flag.BoolVar(&dry_run, "dry_run", false, "Do a dry run (parse and compile expression but do not evaluate)")
6569
flag.BoolVar(&help, "help", false, "Print help")
6670

6771
flag.Parse()
@@ -96,31 +100,37 @@ func main() {
96100
}
97101
}
98102

103+
funcs := dfl.NewFuntionMapWithDefaults()
104+
99105
for _, a := range flag.Args() {
100106
if !strings.Contains(a, "=") {
101-
fmt.Println("Context attribute \"" + a + "\" does not contain \"=\".")
102-
os.Exit(1)
107+
log.Fatal(errors.New("Context attribute \"" + a + "\" does not contain \"=\"."))
103108
}
104109
pair := strings.SplitN(a, "=", 2)
105110
value, err := dfl.Parse(strings.TrimSpace(pair[1]))
106111
if err != nil {
107-
fmt.Println(errors.Wrap(err, "Could not parse context variable"))
108-
os.Exit(1)
112+
log.Fatal(errors.Wrap(err, "Could not parse context variable"))
109113
}
110114
value = value.Compile()
111115
switch value.(type) {
116+
case dfl.Array:
117+
_, arr, err := value.(dfl.Array).Evaluate(map[string]interface{}{}, map[string]interface{}{}, funcs, GO_DFL_DEFAULT_QUOTES[1:])
118+
if err != nil {
119+
log.Fatal(errors.Wrap(err, "error evaluating context expression for "+strings.TrimSpace(pair[0])))
120+
}
121+
ctx[strings.TrimSpace(pair[0])] = arr
112122
case dfl.Literal:
113123
ctx[strings.TrimSpace(pair[0])] = value.(dfl.Literal).Value
124+
case *dfl.Literal:
125+
ctx[strings.TrimSpace(pair[0])] = value.(*dfl.Literal).Value
114126
default:
115127
ctx[strings.TrimSpace(pair[0])] = dfl.TryConvertString(pair[1])
116128
}
117129
}
118130

119131
root, err := dfl.Parse(filter_text)
120132
if err != nil {
121-
fmt.Println("Error parsing filter expression.")
122-
fmt.Println(err)
123-
os.Exit(1)
133+
log.Fatal(errors.Wrap(err, "error parsing filter expression"))
124134
}
125135

126136
if pretty {
@@ -164,34 +174,36 @@ func main() {
164174
fmt.Println(GO_DFL_DEFAULT_QUOTES[0] + root.Dfl(GO_DFL_DEFAULT_QUOTES[1:], false, 0) + GO_DFL_DEFAULT_QUOTES[0])
165175
}
166176

167-
result, err := root.Evaluate(ctx, dfl.NewFuntionMapWithDefaults(), GO_DFL_DEFAULT_QUOTES[1:])
177+
if dry_run {
178+
os.Exit(0)
179+
}
180+
181+
_, result, err := root.Evaluate(map[string]interface{}{}, ctx, funcs, GO_DFL_DEFAULT_QUOTES[1:])
168182
if err != nil {
169-
fmt.Println("Error evaluating expression.")
170-
fmt.Println(err)
171-
os.Exit(1)
183+
log.Fatal(errors.Wrap(err, "error evaluating expression"))
172184
}
173185

174186
switch result.(type) {
175187
case bool:
176188
result_bool := result.(bool)
177189
if verbose {
178190
fmt.Println("******************* Result *******************")
179-
if result_bool {
180-
fmt.Println("true")
181-
} else {
182-
fmt.Println("false")
183-
}
184-
191+
fmt.Println(dfl.TryFormatLiteral(result, GO_DFL_DEFAULT_QUOTES[1:], false, 0))
185192
elapsed := time.Since(start)
186193
fmt.Println("Done in " + elapsed.String())
187194
}
188-
189195
if result_bool {
190196
os.Exit(0)
191197
} else {
192198
os.Exit(1)
193199
}
194200
default:
195-
os.Exit(1)
201+
if verbose {
202+
fmt.Println("******************* Result *******************")
203+
fmt.Println("Type:", reflect.TypeOf(result))
204+
fmt.Println("Value:", dfl.TryFormatLiteral(result, GO_DFL_DEFAULT_QUOTES[1:], false, 0))
205+
elapsed := time.Since(start)
206+
fmt.Println("Done in " + elapsed.String())
207+
}
196208
}
197209
}

dfl/Add.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,17 @@ func (a Add) Compile() Node {
4747
}
4848

4949
// Evaluate returns the value of this node given Context ctx, and an error if any.
50-
func (a Add) Evaluate(ctx interface{}, funcs FunctionMap, quotes []string) (interface{}, error) {
50+
func (a Add) Evaluate(vars map[string]interface{}, ctx interface{}, funcs FunctionMap, quotes []string) (map[string]interface{}, interface{}, error) {
5151

52-
lv, rv, err := a.EvaluateLeftAndRight(ctx, funcs, quotes)
52+
vars, lv, rv, err := a.EvaluateLeftAndRight(vars, ctx, funcs, quotes)
5353
if err != nil {
54-
return 0, err
54+
return vars, 0, err
5555
}
5656

5757
v, err := AddValues(lv, rv)
5858
if err != nil {
59-
return 0, err
59+
return vars, 0, err
6060
}
6161

62-
return v, err
62+
return vars, v, err
6363
}

dfl/Add_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestAdd(t *testing.T) {
3434
continue
3535
}
3636
node = node.Compile()
37-
got, err := node.Evaluate(testCase.Context, NewFuntionMapWithDefaults(), DefaultQuotes)
37+
_, got, err := node.Evaluate(map[string]interface{}{}, testCase.Context, NewFuntionMapWithDefaults(), DefaultQuotes)
3838
if err != nil {
3939
t.Errorf(errors.Wrap(err, "Error evaluating expression \""+testCase.Expression+"\"").Error())
4040
} else if got != testCase.Result {

dfl/After.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ func (a After) Compile() Node {
4242
return After{&TemporalBinaryOperator{&BinaryOperator{Left: left, Right: right}}}
4343
}
4444

45-
func (a After) Evaluate(ctx interface{}, funcs FunctionMap, quotes []string) (interface{}, error) {
45+
func (a After) Evaluate(vars map[string]interface{}, ctx interface{}, funcs FunctionMap, quotes []string) (map[string]interface{}, interface{}, error) {
4646

47-
v, err := a.EvaluateAndCompare(ctx, funcs, quotes)
47+
vars, v, err := a.EvaluateAndCompare(vars, ctx, funcs, quotes)
4848
if err != nil {
49-
return false, err
49+
return vars, false, err
5050
}
5151

52-
return v > 0, nil
52+
return vars, v > 0, nil
5353
}

dfl/After_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func TestAfter(t *testing.T) {
3838
continue
3939
}
4040
node = node.Compile()
41-
got, err := node.Evaluate(testCase.Context, NewFuntionMapWithDefaults(), DefaultQuotes)
41+
_, got, err := node.Evaluate(map[string]interface{}{}, testCase.Context, NewFuntionMapWithDefaults(), DefaultQuotes)
4242
if err != nil {
4343
t.Errorf(errors.Wrap(err, "Error evaluating expression \""+testCase.Expression+"\"").Error())
4444
} else if got != testCase.Result {

dfl/And.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,24 @@ func (a And) Compile() Node {
5050
return And{&BinaryOperator{Left: left, Right: right}}
5151
}
5252

53-
func (a And) Evaluate(ctx interface{}, funcs FunctionMap, quotes []string) (interface{}, error) {
54-
lv, err := a.Left.Evaluate(ctx, funcs, quotes)
53+
func (a And) Evaluate(vars map[string]interface{}, ctx interface{}, funcs FunctionMap, quotes []string) (map[string]interface{}, interface{}, error) {
54+
vars, lv, err := a.Left.Evaluate(vars, ctx, funcs, quotes)
5555
if err != nil {
56-
return false, err
56+
return vars, false, err
5757
}
5858
switch lv.(type) {
5959
case bool:
6060
if !lv.(bool) {
61-
return false, nil
61+
return vars, false, nil
6262
}
63-
rv, err := a.Right.Evaluate(ctx, funcs, quotes)
63+
vars, rv, err := a.Right.Evaluate(vars, ctx, funcs, quotes)
6464
if err != nil {
65-
return false, err
65+
return vars, false, err
6666
}
6767
switch rv.(type) {
6868
case bool:
69-
return rv.(bool), nil
69+
return vars, rv.(bool), nil
7070
}
7171
}
72-
return false, errors.New("Error evaluating expression " + a.Dfl(quotes, false, 0))
72+
return vars, false, errors.New("Error evaluating expression " + a.Dfl(quotes, false, 0))
7373
}

dfl/And_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ func TestAnd(t *testing.T) {
3434
continue
3535
}
3636
node = node.Compile()
37-
got, err := node.Evaluate(testCase.Context, NewFuntionMapWithDefaults(), DefaultQuotes)
37+
_, got, err := node.Evaluate(map[string]interface{}{}, testCase.Context, NewFuntionMapWithDefaults(), DefaultQuotes)
3838
if err != nil {
3939
t.Errorf(errors.Wrap(err, "Error evaluating expression \""+testCase.Expression+"\"").Error())
4040
} else if got != testCase.Result {

dfl/Array.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,16 @@ func (a Array) Compile() Node {
5252
return Literal{Value: TryConvertArray(values)}
5353
}
5454

55-
func (a Array) Evaluate(ctx interface{}, funcs FunctionMap, quotes []string) (interface{}, error) {
56-
values := make([]interface{}, len(a.Nodes))
57-
for i, n := range a.Nodes {
58-
v, err := n.Evaluate(ctx, funcs, quotes)
55+
func (a Array) Evaluate(vars map[string]interface{}, ctx interface{}, funcs FunctionMap, quotes []string) (map[string]interface{}, interface{}, error) {
56+
values := make([]interface{}, 0, len(a.Nodes))
57+
for _, n := range a.Nodes {
58+
vars, v, err := n.Evaluate(vars, ctx, funcs, quotes)
5959
if err != nil {
60-
return values, err
60+
return vars, values, err
6161
}
62-
values[i] = v
62+
values = append(values, v)
6363
}
64-
return TryConvertArray(values), nil
64+
return vars, TryConvertArray(values), nil
6565
}
6666

6767
func (a Array) Attributes() []string {

dfl/AttachLeft.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
// AttachLeft attaches the left Node as the left child node to the parent root Node.
1515
func AttachLeft(root Node, left Node) error {
1616
switch root.(type) {
17+
case *Declare:
18+
root.(*Declare).Left = left
1719
case *Pipe:
1820
root.(*Pipe).Left = left
1921
case *And:
@@ -46,6 +48,8 @@ func AttachLeft(root Node, left Node) error {
4648
root.(*Add).Left = left
4749
case *Subtract:
4850
root.(*Subtract).Left = left
51+
case *Divide:
52+
root.(*Divide).Left = left
4953
case *Before:
5054
root.(*Before).Left = left
5155
case *After:

0 commit comments

Comments
 (0)