delorean_lang 2.0.0 → 2.1.0

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
  SHA256:
3
- metadata.gz: e0116cc5a84f3c0e7c2efc68c31862529ce3172f7bc7a8f1ee61c8804de3d6da
4
- data.tar.gz: d29819d73fd26cd4057b6badd1eb831c2c86c095683f14039b61d1165f13fd8b
3
+ metadata.gz: 4c38ab0abe7bac9f36adbc22664d1efc5a01216d032fa8b8a079ecc640a560b7
4
+ data.tar.gz: c990d13bfae100045288a5139614ff72e3af2a0a9e89ff87790e8b717b19f39c
5
5
  SHA512:
6
- metadata.gz: c448503aec6a6929311129849be0223d5ab0dbed702c22e67ab72fd5ad6c40cb71f60b169299e57795a61731505d458b474a040995790fc948ee50ef183dd318
7
- data.tar.gz: 56f0224391bc1d1401033c0301297ccb8fb993180196d827c07b5a5f986d19c5f5cf1d051f42af8206e280a6fb0840ee8c434b5fcfe21d3f0fcf26581837f555
6
+ metadata.gz: 64ff3320a7722c5017eb2f0a366d21a1fa5b20173e4675cd1316dae14790676442787e164ea4e01c4ce2ae7f91a06eb9716e3ddecf8c0801e5e33801d105919a
7
+ data.tar.gz: a020a58b04d8d067b44c977fce93927c2fed8e5bb6454c18cb01c72edbeb58321a00395d1bb258fd556023b309d0b8aedcfaeded789c43cda1cd72ea1b541138
data/README.md CHANGED
@@ -199,7 +199,7 @@ Use `extend Delorean::Functions` or `include Delorean::Model` in your module or
199
199
  class Dummy < ActiveRecord::Base
200
200
  include Delorean::Model
201
201
 
202
- delorean_fn(:heres_my_number, sig: [0, Float::INFINITY]) do |*a|
202
+ delorean_fn(:heres_my_number) do |*a|
203
203
  a.inject(0, :+)
204
204
  end
205
205
 
@@ -211,7 +211,7 @@ end
211
211
  module DummyModule
212
212
  extend Delorean::Functions
213
213
 
214
- delorean_fn(:heres_my_number, sig: [0, Float::INFINITY]) do |*a|
214
+ delorean_fn(:heres_my_number) do |*a|
215
215
  a.inject(0, :+)
216
216
  end
217
217
  end
@@ -14,6 +14,8 @@ module Delorean
14
14
  size_per_class: 1000
15
15
  )
16
16
 
17
+ ::Delorean::Ruby.error_handler = ::Delorean::Ruby::DEFAULT_ERROR_HANDLER
18
+
17
19
  module BaseModule
18
20
  # _e is used by Marty promise_jobs to pass promise-related
19
21
  # information
@@ -154,8 +156,7 @@ module Delorean
154
156
  ######################################################################
155
157
 
156
158
  def self._err(*args)
157
- str = args.map(&:to_s).join(', ')
158
- raise str
159
+ ::Delorean::Ruby.error_handler.call(*args)
159
160
  end
160
161
 
161
162
  def self._node_call(node, _e, params)
@@ -4,6 +4,11 @@ require 'delorean/ruby/whitelists'
4
4
 
5
5
  module Delorean
6
6
  module Ruby
7
+ DEFAULT_ERROR_HANDLER = lambda do |*args|
8
+ str = args.map(&:to_s).join(', ')
9
+ raise str
10
+ end
11
+
7
12
  def self.whitelist=(new_whitelist)
8
13
  @whitelist = new_whitelist
9
14
  end
@@ -11,5 +16,13 @@ module Delorean
11
16
  def self.whitelist
12
17
  @whitelist
13
18
  end
19
+
20
+ def self.error_handler=(new_handler)
21
+ @error_handler = new_handler
22
+ end
23
+
24
+ def self.error_handler
25
+ @error_handler
26
+ end
14
27
  end
15
28
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Delorean
4
- VERSION = '2.0.0'
4
+ VERSION = '2.1.0'
5
5
  end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../spec_helper'
4
+
5
+ describe 'Delorean Ruby error handling' do
6
+ after do
7
+ ::Delorean::Ruby.error_handler = ::Delorean::Ruby::DEFAULT_ERROR_HANDLER
8
+ end
9
+
10
+ let(:sset) do
11
+ TestContainer.new(
12
+ 'AAA' =>
13
+ defn('X:',
14
+ ' a =? 123',
15
+ ' b = a*2',
16
+ )
17
+ )
18
+ end
19
+
20
+ let(:engine) do
21
+ Delorean::Engine.new('XXX', sset).tap do |eng|
22
+ eng.parse defn('A:',
23
+ ' b = ERR("test", 1, 2, 3)'
24
+ )
25
+ end
26
+ end
27
+
28
+ it 'raises error' do
29
+ expect { engine.evaluate('A', 'b') }.to raise_error(
30
+ RuntimeError, 'test, 1, 2, 3'
31
+ )
32
+ end
33
+
34
+ it 'allows to override handler' do
35
+ ::Delorean::Ruby.error_handler = lambda do |*_args|
36
+ raise StandardError, 'Overriden Error'
37
+ end
38
+
39
+ expect { engine.evaluate('A', 'b') }.to raise_error(
40
+ StandardError, 'Overriden Error'
41
+ )
42
+ end
43
+ end
@@ -51,7 +51,7 @@ class Dummy < ActiveRecord::Base
51
51
  Dummy.new(name: 'jello', number: 456, dummy: d)
52
52
  end
53
53
 
54
- delorean_fn :all_of_me, sig: 0 do
54
+ delorean_fn :all_of_me do
55
55
  [{ 'name' => 'hello', 'foo' => 'bar' }]
56
56
  end
57
57
 
@@ -63,20 +63,20 @@ class Dummy < ActiveRecord::Base
63
63
  "#{name}-#{number.round(4)}"
64
64
  end
65
65
 
66
- delorean_fn :one_or_two, sig: [1, 2] do |a, b = nil|
66
+ delorean_fn :one_or_two do |a, b = nil|
67
67
  [a, b]
68
68
  end
69
69
 
70
70
  @@foo = 0
71
- delorean_fn :side_effect, sig: 0 do
71
+ delorean_fn :side_effect do
72
72
  @@foo += 1
73
73
  end
74
74
 
75
- delorean_fn :returns_openstruct, sig: 0 do
75
+ delorean_fn :returns_openstruct do
76
76
  OpenStruct.new('abc' => 'def')
77
77
  end
78
78
 
79
- delorean_fn :returns_cached_openstruct, cache: true, sig: 2 do |first, last|
79
+ delorean_fn :returns_cached_openstruct, cache: true do |first, last|
80
80
  OpenStruct.new(first.to_s => last)
81
81
  end
82
82
  end
@@ -91,7 +91,7 @@ module M
91
91
  class LittleDummy
92
92
  include Delorean::Model
93
93
 
94
- delorean_fn(:heres_my_number, sig: [0, Float::INFINITY]) do |*a|
94
+ delorean_fn(:heres_my_number) do |*a|
95
95
  a.inject(0, :+)
96
96
  end
97
97
 
@@ -113,7 +113,7 @@ end
113
113
  module DummyModule
114
114
  extend Delorean::Functions
115
115
 
116
- delorean_fn(:heres_my_number, sig: [0, Float::INFINITY]) do |*a|
116
+ delorean_fn(:heres_my_number) do |*a|
117
117
  a.inject(0, :+)
118
118
  end
119
119
  end
@@ -125,7 +125,7 @@ end
125
125
  class DeloreanFunctionsClass
126
126
  extend Delorean::Functions
127
127
 
128
- delorean_fn :test_fn, sig: 0 do
128
+ delorean_fn :test_fn do
129
129
  :test_fn_result
130
130
  end
131
131
 
@@ -134,7 +134,7 @@ class DeloreanFunctionsClass
134
134
  end
135
135
 
136
136
  class DeloreanFunctionsChildClass < DeloreanFunctionsClass
137
- delorean_fn :test_fn2, sig: 0 do
137
+ delorean_fn :test_fn2 do
138
138
  :test_fn2_result
139
139
  end
140
140
 
@@ -144,11 +144,11 @@ end
144
144
  class DifferentClassSameMethod
145
145
  extend Delorean::Functions
146
146
 
147
- delorean_fn :test_fn2, sig: 0 do
147
+ delorean_fn :test_fn2 do
148
148
  :test_fn2_result_different
149
149
  end
150
150
 
151
- delorean_fn :test_fn3, sig: 0 do |a, b, c, d = :default, e = nil, *args|
151
+ delorean_fn :test_fn3 do |a, b, c, d = :default, e = nil, *args|
152
152
  {
153
153
  a: a,
154
154
  b: b,
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: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Arman Bostani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-07 00:00:00.000000000 Z
11
+ date: 2019-10-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -172,6 +172,7 @@ files:
172
172
  - spec/func_spec.rb
173
173
  - spec/parse_spec.rb
174
174
  - spec/perf_spec.rb
175
+ - spec/ruby/error_handling_spec.rb
175
176
  - spec/ruby/whitelist_spec.rb
176
177
  - spec/spec_helper.rb
177
178
  homepage: https://github.com/arman000/delorean_lang
@@ -204,5 +205,6 @@ test_files:
204
205
  - spec/func_spec.rb
205
206
  - spec/parse_spec.rb
206
207
  - spec/perf_spec.rb
208
+ - spec/ruby/error_handling_spec.rb
207
209
  - spec/ruby/whitelist_spec.rb
208
210
  - spec/spec_helper.rb