delorean_lang 0.3.29 → 0.3.30

Sign up to get free protection for your applications and to get access to all the features.
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