delorean_lang 0.3.29 → 0.3.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 96287421d2dcd9466e66523240bc23ec575de758
4
- data.tar.gz: 8f4aa577c92a71eee2f86b1e683dcd7ca35aa7a4
3
+ metadata.gz: 6533974257ae71867de5f7237d671a74c5df653c
4
+ data.tar.gz: 0be5b0053ac67c03e22b4d79f8ff6ca6699edbfc
5
5
  SHA512:
6
- metadata.gz: 79f25ccee7e831ea7efaca0b947dd0749f120d150e9aa9177e9b9437a659874d423feaa82911423ac2d317c8db5a185baa6d259eb42dee318b5296f407dff47e
7
- data.tar.gz: 0be39ffa9bd46e0aa48a6c97887a27bd225e4d5771c33c25a9f132cfd2fd571ecdfe3a06679a3123ce8dff50d18fe5fdcb729e4a2b9e9c9100c059fce6d7d4ef
6
+ metadata.gz: 61f051c79ce4219de27151c228ef8f997f6caffe5a30af7f53e7e3ace82e92803b6221a34bd5eb13677a697d63d7ff7e5b12df8da96c32e9979709b02042cb8b
7
+ data.tar.gz: 6e1e789f69566b2c526b6a7f84da419588963e419664ead313a5cfcad8c9bd8edaf5e56417df46dc6f988e743b83adcd1f6c00401cc623f52dbba1d022565f3c
data/README.md CHANGED
@@ -29,7 +29,7 @@ Or add it to your `Gemfile`, etc.
29
29
 
30
30
  engine.parse my_code
31
31
 
32
- engine.evaluate_attrs("NodeB", %w{attr1 attr2 attr3})
32
+ engine.evaluate("NodeB", %w{attr1 attr2 attr3})
33
33
 
34
34
  ## The Delorean Language
35
35
 
@@ -346,18 +346,9 @@ module Delorean
346
346
  # Runtime
347
347
  ######################################################################
348
348
 
349
- def evaluate(node, attr, params={})
350
- evaluate_attrs(node, [attr], params)[0]
351
- end
352
-
353
- def eval_to_hash(node, attrs, params={})
354
- res = evaluate_attrs(node, attrs, params)
355
- Hash[* attrs.zip(res).flatten(1)]
356
- end
357
-
358
- def evaluate_attrs(node, attrs, params={})
349
+ def evaluate(node, attrs, params={})
359
350
  raise "bad params" unless params.is_a?(Hash)
360
-
351
+
361
352
  if node.is_a?(Class)
362
353
  klass = node
363
354
  else
@@ -372,10 +363,19 @@ module Delorean
372
363
 
373
364
  params[:_engine] = self
374
365
 
375
- attrs.map { |attr|
366
+ type_arr = attrs.is_a?(Array)
367
+ attrs = [attrs] unless type_arr
368
+
369
+ res = attrs.map { |attr|
376
370
  raise "bad attribute '#{attr}'" unless attr =~ /^[a-z][A-Za-z0-9_]*$/
377
371
  klass.send("#{attr}#{POST}".to_sym, params)
378
372
  }
373
+ type_arr ? res : res[0]
374
+ end
375
+
376
+ def eval_to_hash(node, attrs, params={})
377
+ res = evaluate(node, attrs, params)
378
+ Hash[* attrs.zip(res).flatten(1)]
379
379
  end
380
380
 
381
381
  def self.grok_runtime_exception(exc)
@@ -1,3 +1,3 @@
1
1
  module Delorean
2
- VERSION = "0.3.29"
2
+ VERSION = "0.3.30"
3
3
  end
data/spec/eval_spec.rb CHANGED
@@ -25,9 +25,9 @@ describe "Delorean" do
25
25
  " d = a ** 3 - 10*0.2",
26
26
  )
27
27
 
28
- engine.evaluate_attrs("A", ["a"]).should == [123]
28
+ engine.evaluate("A", ["a"]).should == [123]
29
29
 
30
- r = engine.evaluate_attrs("A", ["x", "b"])
30
+ r = engine.evaluate("A", ["x", "b"])
31
31
  r.should == [-246, -124]
32
32
 
33
33
  expect(engine.evaluate("A", "d")).to eq 1860865.0
@@ -57,7 +57,7 @@ describe "Delorean" do
57
57
  " a = {'x':123, 'y':456, 'z':789}",
58
58
  " b = A.a.x * A.a.y - A.a.z",
59
59
  )
60
- engine.evaluate_attrs("A", ["b"]).should == [123*456-789]
60
+ engine.evaluate("A", ["b"]).should == [123*456-789]
61
61
  end
62
62
 
63
63
  it "should handle numeric getattr" do
@@ -65,7 +65,7 @@ describe "Delorean" do
65
65
  " a = {1:123, 0:456, 'z':789, 2: {'a':444}}",
66
66
  " b = A.a.1 * A.a.0 - A.a.z - A.a.2.a",
67
67
  )
68
- engine.evaluate_attrs("A", ["b"]).should == [123*456-789-444]
68
+ engine.evaluate("A", ["b"]).should == [123*456-789-444]
69
69
  end
70
70
 
71
71
  it "should be able to evaluate multiple node attrs" do
@@ -76,7 +76,7 @@ describe "Delorean" do
76
76
  )
77
77
 
78
78
  h = {"a" => 16}
79
- r = engine.evaluate_attrs("A", ["c", "b"], h)
79
+ r = engine.evaluate("A", ["c", "b"], h)
80
80
  r.should == [4, 5]
81
81
  end
82
82
 
@@ -117,8 +117,8 @@ describe "Delorean" do
117
117
  " a =? 2",
118
118
  " c = A.a",
119
119
  )
120
- engine.evaluate_attrs("B", %w{c a}).should == [1, 2]
121
- engine.evaluate_attrs("B", %w{a c}).should == [2, 1]
120
+ engine.evaluate("B", %w{c a}).should == [1, 2]
121
+ engine.evaluate("B", %w{a c}).should == [2, 1]
122
122
  end
123
123
 
124
124
  it "params should behave properly with inheritance" do
@@ -131,9 +131,9 @@ describe "Delorean" do
131
131
  " b = B.a",
132
132
  " c = A.a",
133
133
  )
134
- engine.evaluate_attrs("C", %w{a b c}).should == [3, 2, 1]
135
- engine.evaluate_attrs("C", %w{a b c}, {"a" => 4}).should == [4, 4, 4]
136
- engine.evaluate_attrs("C", %w{c b a}).should == [1, 2, 3]
134
+ engine.evaluate("C", %w{a b c}).should == [3, 2, 1]
135
+ engine.evaluate("C", %w{a b c}, {"a" => 4}).should == [4, 4, 4]
136
+ engine.evaluate("C", %w{c b a}).should == [1, 2, 3]
137
137
  end
138
138
 
139
139
  it "should give error when param is undefined for eval" do
@@ -273,7 +273,7 @@ describe "Delorean" do
273
273
  " c = Dummy.call_me_maybe()",
274
274
  " d = Dummy.call_me_maybe(5) + b + c",
275
275
  )
276
- r = engine.evaluate_attrs("A", ["b", "c", "d"])
276
+ r = engine.evaluate("A", ["b", "c", "d"])
277
277
  r.should == [10, 0, 15]
278
278
  end
279
279
 
@@ -326,7 +326,7 @@ describe "Delorean" do
326
326
  " d = b.b",
327
327
  " e = b.this_is_crazy",
328
328
  )
329
- engine.evaluate_attrs("A", %w{c d e}).should == [456, 789, nil]
329
+ engine.evaluate("A", %w{c d e}).should == [456, 789, nil]
330
330
  end
331
331
 
332
332
  it "get attr on nil should return nil" do
@@ -335,7 +335,7 @@ describe "Delorean" do
335
335
  ' c = b.gaga',
336
336
  ' d = b.gaga || 55',
337
337
  )
338
- r = engine.evaluate_attrs("A", ["b", "c", "d"])
338
+ r = engine.evaluate("A", ["b", "c", "d"])
339
339
  r.should == [nil, nil, 55]
340
340
  end
341
341
 
@@ -354,7 +354,7 @@ describe "Delorean" do
354
354
  " b = A",
355
355
  " c = b.a * 2",
356
356
  )
357
- engine.evaluate_attrs("A", %w{a c}).should == [123, 123*2]
357
+ engine.evaluate("A", %w{a c}).should == [123, 123*2]
358
358
  end
359
359
 
360
360
  getattr_code = <<eoc
@@ -496,11 +496,11 @@ eof
496
496
  " d = 111",
497
497
  )
498
498
 
499
- engine.evaluate_attrs("A", ["a", "b"]).should == [123, 123*3]
500
- engin2.evaluate_attrs("A", ["a", "b"]).should == [222.0, 222.0/5]
499
+ engine.evaluate("A", ["a", "b"]).should == [123, 123*3]
500
+ engin2.evaluate("A", ["a", "b"]).should == [222.0, 222.0/5]
501
501
 
502
- engine.evaluate_attrs("B", ["a", "b", "c"]).should == [123, 123*3, 123*3*2]
503
- engin2.evaluate_attrs("B", ["a", "b", "c"]).should ==
502
+ engine.evaluate("B", ["a", "b", "c"]).should == [123, 123*3, 123*3*2]
503
+ engin2.evaluate("B", ["a", "b", "c"]).should ==
504
504
  [222.0, 222.0/5, 222.0/5*3]
505
505
 
506
506
  engin2.evaluate("C", "d").should == 111
@@ -523,7 +523,7 @@ eof
523
523
  " e = [1, 1+1, 1+1+1, 1*2*4]",
524
524
  )
525
525
 
526
- engine.evaluate_attrs("A", %w{b c d e}).should ==
526
+ engine.evaluate("A", %w{b c d e}).should ==
527
527
  [[],
528
528
  [1, 2, 3],
529
529
  [[], [1, 2, 3], [], [1, 2, 3], 1, 2, "123", 1.1, -1.23],
@@ -538,7 +538,7 @@ eof
538
538
  " d = c*2",
539
539
  )
540
540
 
541
- engine.evaluate_attrs("A", %w{b c d}).should ==
541
+ engine.evaluate("A", %w{b c d}).should ==
542
542
  [[],
543
543
  [1, 2, 3],
544
544
  [1, 2, 3]*2,
@@ -551,7 +551,7 @@ eof
551
551
  " b = {i*5 for i in {1,2,3}}",
552
552
  " c = {1,2,3} | {4,5}",
553
553
  )
554
- engine.evaluate_attrs("A", ["a", "b", "c"]).should ==
554
+ engine.evaluate("A", ["a", "b", "c"]).should ==
555
555
  [Set[], Set[5,10,15], Set[1,2,3,4,5]]
556
556
  end
557
557
 
@@ -621,7 +621,7 @@ eof
621
621
  " g = {b:b, [b]:[1,23], []:345}",
622
622
  )
623
623
 
624
- engine.evaluate_attrs("A", %w{b c d e f g}).should ==
624
+ engine.evaluate("A", %w{b c d e f g}).should ==
625
625
  [{},
626
626
  {"a"=>1, "b"=>2, "c"=>3},
627
627
  {123*2=>-123, "b_b"=>2},
@@ -682,7 +682,7 @@ eof
682
682
  " f = e.d / e.a",
683
683
  )
684
684
 
685
- engine.evaluate_attrs("A", ["d", "f"]).should == [26, 2]
685
+ engine.evaluate("A", ["d", "f"]).should == [26, 2]
686
686
  end
687
687
 
688
688
  it "should eval multi-var hash comprehension" do
@@ -706,7 +706,7 @@ eof
706
706
  " j = d(a=6).aa",
707
707
  )
708
708
 
709
- engine.evaluate_attrs("A", ["g", "h", "j"]).should ==
709
+ engine.evaluate("A", ["g", "h", "j"]).should ==
710
710
  [3*2 + 4*2, 5*2, 6*2]
711
711
  end
712
712
 
@@ -717,7 +717,7 @@ eof
717
717
  " e = [d.a, d(a=4).a]",
718
718
  )
719
719
 
720
- engine.evaluate_attrs("A", ["e"]).should == [[3,4]]
720
+ engine.evaluate("A", ["e"]).should == [[3,4]]
721
721
  end
722
722
 
723
723
  it "should eval module calls 1" do
@@ -727,7 +727,7 @@ eof
727
727
  " d = n().a",
728
728
  )
729
729
 
730
- engine.evaluate_attrs("A", %w{d}).should == [123]
730
+ engine.evaluate("A", %w{d}).should == [123]
731
731
  end
732
732
 
733
733
  it "should eval module calls 2" do
@@ -740,7 +740,7 @@ eof
740
740
  " e = nil() % ['b']",
741
741
  )
742
742
 
743
- engine.evaluate_attrs("A", %w{n c d e}).should ==
743
+ engine.evaluate("A", %w{n c d e}).should ==
744
744
  ["A", {"a"=>123, "b"=>579}, {"a"=>123, "b"=>579}, {"b"=>579}]
745
745
  end
746
746
 
@@ -752,7 +752,7 @@ eof
752
752
  " d = n().a",
753
753
  )
754
754
 
755
- engine.evaluate_attrs("B", %w{d}).should == [123]
755
+ engine.evaluate("B", %w{d}).should == [123]
756
756
  end
757
757
 
758
758
  it "should be possible to implement recursive calls" do
@@ -796,7 +796,7 @@ eof
796
796
  " ) % ['b']",
797
797
  )
798
798
 
799
- engine.evaluate_attrs("A", %w{n c d e}).should ==
799
+ engine.evaluate("A", %w{n c d e}).should ==
800
800
  ["A", {"a"=>123, "b"=>579}, {"a"=>123, "b"=>579}, {"b"=>579}]
801
801
  end
802
802
 
@@ -809,7 +809,7 @@ eof
809
809
  " d = [i*2 for i in s if i in a]",
810
810
  )
811
811
 
812
- engine.evaluate_attrs("A", %w{b c d}).should ==
812
+ engine.evaluate("A", %w{b c d}).should ==
813
813
  [false, true, [66, 88]]
814
814
  end
815
815
 
@@ -821,7 +821,7 @@ eof
821
821
  " a = 111",
822
822
  " c = AAA::X(a=456).b",
823
823
  )
824
- engine.evaluate_attrs("B", ["a", "b", "c"], {}).should ==
824
+ engine.evaluate("B", ["a", "b", "c"], {}).should ==
825
825
  [111, 222, 456*2]
826
826
  end
827
827
 
@@ -846,7 +846,7 @@ eof
846
846
 
847
847
  e2 = sset.get_engine("BBB")
848
848
 
849
- e2.evaluate_attrs("B", ["a", "b", "c", "d"]).should ==
849
+ e2.evaluate("B", ["a", "b", "c", "d"]).should ==
850
850
  [111, 222, -2, 222]
851
851
 
852
852
  engine.parse defn("import BBB",
@@ -854,15 +854,15 @@ eof
854
854
  " e = d + 3",
855
855
  )
856
856
 
857
- engine.evaluate_attrs("B", ["a", "b", "c", "d", "e"]).should ==
857
+ engine.evaluate("B", ["a", "b", "c", "d", "e"]).should ==
858
858
  [111, 222, -2, 222, 225]
859
859
 
860
860
  e4 = sset.get_engine("CCC")
861
861
 
862
- e4.evaluate_attrs("B", ["a", "b", "c", "d", "e"]).should ==
862
+ e4.evaluate("B", ["a", "b", "c", "d", "e"]).should ==
863
863
  [111, 222, -2, 222, 666]
864
864
 
865
- e4.evaluate_attrs("C", ["a", "b", "d"]).should == [123, 123*2, 123*3*2]
865
+ e4.evaluate("C", ["a", "b", "d"]).should == [123, 123*2, 123*3*2]
866
866
  end
867
867
 
868
868
  it "should eval imports (3)" do
@@ -890,7 +890,7 @@ eof
890
890
  " e = d['b']",
891
891
  " f = a[1,2]",
892
892
  )
893
- r = engine.evaluate_attrs("A", ["b", "c", "e", "f"])
893
+ r = engine.evaluate("A", ["b", "c", "e", "f"])
894
894
  r.should == [2, 3, 456, [2,3]]
895
895
  end
896
896
 
@@ -901,7 +901,7 @@ eof
901
901
  " c = A() % ['a', 'b']",
902
902
  " d = c['b'].x * c['a'] - c['b'].y",
903
903
  )
904
- r = engine.evaluate_attrs("A", ["a", "b", "c", "d"])
904
+ r = engine.evaluate("A", ["a", "b", "c", "d"])
905
905
  r.should ==
906
906
  [1, {"x"=>123, "y"=>456}, {"a"=>1, "b"=>{"x"=>123, "y"=>456}}, -333]
907
907
  end
@@ -915,15 +915,15 @@ eof
915
915
  " d = A() / ['a', 'e']",
916
916
  " f = A() / 'a'",
917
917
  )
918
- r = engine.evaluate_attrs("A", ["a", "b", "c"])
918
+ r = engine.evaluate("A", ["a", "b", "c"])
919
919
  r.should ==
920
920
  [1, {"x"=>123, "y"=>456}, {"a"=>1, "b"=>{"x"=>123, "y"=>456}}]
921
921
 
922
- r = engine.evaluate_attrs("A", ["a", "d"])
922
+ r = engine.evaluate("A", ["a", "d"])
923
923
  r.should ==
924
924
  [1, {"error"=>"hello", "backtrace"=>[["XXX", 4, "e"], ["XXX", 6, "d"]]}]
925
925
 
926
- r = engine.evaluate_attrs("A", ["f"])
926
+ r = engine.evaluate("A", ["f"])
927
927
  r.should == [1]
928
928
  end
929
929
 
@@ -977,7 +977,7 @@ eof
977
977
  " z = B(10, 20, a=3, b=7).x",
978
978
  " y = B('x', 'y').y",
979
979
  )
980
- engine.evaluate_attrs("A", ["a", "z", "y"], {0 => 123, 1 => 456}).should ==
980
+ engine.evaluate("A", ["a", "z", "y"], {0 => 123, 1 => 456}).should ==
981
981
  [123-456, 40, ["x", "y", nil]]
982
982
  end
983
983
 
data/spec/func_spec.rb CHANGED
@@ -31,7 +31,7 @@ describe "Delorean" do
31
31
  " c = 12.3456.round()",
32
32
  )
33
33
 
34
- r = engine.evaluate_attrs("A", ["a", "b", "c"])
34
+ r = engine.evaluate("A", ["a", "b", "c"])
35
35
  r.should == [12.35, 12.3, 12]
36
36
  end
37
37
 
@@ -42,7 +42,7 @@ describe "Delorean" do
42
42
  " c = '12'.to_f()",
43
43
  )
44
44
 
45
- r = engine.evaluate_attrs("A", ["a", "b", "c"])
45
+ r = engine.evaluate("A", ["a", "b", "c"])
46
46
  r.should == [12.3456, 12.3456, 12]
47
47
  end
48
48
 
@@ -54,7 +54,7 @@ describe "Delorean" do
54
54
  " d = 0.abs()",
55
55
  )
56
56
 
57
- r = engine.evaluate_attrs("A", ["a", "b", "c", "d"])
57
+ r = engine.evaluate("A", ["a", "b", "c", "d"])
58
58
  r.should == [123, 1.1, 2.3, 0]
59
59
  end
60
60
 
@@ -65,7 +65,7 @@ describe "Delorean" do
65
65
  " c = [1,2,3].to_s()",
66
66
  )
67
67
 
68
- r = engine.evaluate_attrs("A", ["a", "b", "c"])
68
+ r = engine.evaluate("A", ["a", "b", "c"])
69
69
  r.should == ["hello", '12.3456', [1,2,3].to_s]
70
70
  end
71
71
 
@@ -81,11 +81,11 @@ describe "Delorean" do
81
81
 
82
82
  p = Time.now
83
83
  params = {"p" => p}
84
- r = engine.evaluate_attrs("A", %w{h m s d e}, params)
84
+ r = engine.evaluate("A", %w{h m s d e}, params)
85
85
  r.should == [p.hour, p.min, p.sec, p.to_date, p.to_date]
86
86
 
87
87
  # Non time argument should raise an error
88
- expect { engine.evaluate_attrs("A", ["m"], {"p" => 123}) }.to raise_error
88
+ expect { engine.evaluate("A", ["m"], {"p" => 123}) }.to raise_error
89
89
 
90
90
  end
91
91
 
@@ -98,12 +98,12 @@ describe "Delorean" do
98
98
  )
99
99
 
100
100
  p = Date.today
101
- r = engine.evaluate_attrs("A", ["y", "d", "m"], {"p" => p})
101
+ r = engine.evaluate("A", ["y", "d", "m"], {"p" => p})
102
102
  r.should == [p.year, p.day, p.month]
103
103
 
104
104
  # Non date argument should raise an error
105
105
  expect {
106
- engine.evaluate_attrs("A", ["y", "d", "m"], {"p" => 123})
106
+ engine.evaluate("A", ["y", "d", "m"], {"p" => 123})
107
107
  }.to raise_error
108
108
  end
109
109
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delorean_lang
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.29
4
+ version: 0.3.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arman Bostani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-31 00:00:00.000000000 Z
11
+ date: 2017-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop
@@ -118,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  version: '0'
119
119
  requirements: []
120
120
  rubyforge_project:
121
- rubygems_version: 2.5.2
121
+ rubygems_version: 2.6.13
122
122
  signing_key:
123
123
  specification_version: 4
124
124
  summary: Delorean compiler