computable 1.0.0 → 1.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/computable/version.rb +1 -1
- data/lib/computable.rb +23 -12
- data/test/test_backtrace.rb +33 -0
- data/test/test_parallel.rb +4 -4
- data.tar.gz.sig +0 -0
- metadata +13 -11
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13fb18bf83a5d205517573213cc3bcc657d6352b3f5a5edd64d204459bec2f97
|
4
|
+
data.tar.gz: 4306e9149b11afe479bf5611270c5176001c54eae0ded32220eb6352beb0a2bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d6a66fbb762e2f49f04ac44ead89a0d022faa984de4330220833fdfe85d8bb70aef82c69e5827c3ce02e71efa57717798abcd2423f829ab500ba12db9fb2d35
|
7
|
+
data.tar.gz: '097c6dcf414d402457fa2035265e8c6694aecd6ddf70cc81b90aefd5eda4f9f17f13a27beedf124dba0cb13786b8e2885fa8e3d6ef4e5af3c0477e65fdeb5a8d'
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/computable/version.rb
CHANGED
data/lib/computable.rb
CHANGED
@@ -274,24 +274,35 @@ class Computable
|
|
274
274
|
end
|
275
275
|
end
|
276
276
|
|
277
|
+
private def improve_backtrace(err, block, text)
|
278
|
+
fpath, lineno = block.source_location
|
279
|
+
bt = err.backtrace
|
280
|
+
myloc = err.backtrace_locations.select.with_index{|loc, i| loc.path == fpath && loc.lineno >= lineno && !bt[i].include?("#") }.min{|a,b| a.lineno <=> b.lineno }
|
281
|
+
idx = err.backtrace_locations.index(myloc)
|
282
|
+
bt[idx] += " ##{text}"
|
283
|
+
raise err
|
284
|
+
end
|
285
|
+
|
277
286
|
def self.calc_value name, format=nil, freeze: true, &block
|
278
287
|
calc_method_id = "calc_#{name}".intern
|
279
|
-
define_method(calc_method_id
|
288
|
+
define_method(calc_method_id) do
|
289
|
+
instance_eval(&block)
|
290
|
+
rescue Exception => err
|
291
|
+
improve_backtrace(err, block, name)
|
292
|
+
end
|
280
293
|
|
281
294
|
calc_method2_id = "calc_#{name}_with_tracking".intern
|
282
295
|
define_method(calc_method2_id) do |v|
|
296
|
+
old_caller = Thread.current.thread_variable_get("Computable #{object_id}")
|
297
|
+
Thread.current.thread_variable_set("Computable #{self.object_id}", v)
|
283
298
|
begin
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
res
|
292
|
-
ensure
|
293
|
-
Thread.current.thread_variable_set("Computable #{self.object_id}", old_caller)
|
294
|
-
end
|
299
|
+
puts "do calc #{v.inspect}" if @computable_debug
|
300
|
+
res = send(calc_method_id)
|
301
|
+
Computable.verify_format(name, res, format)
|
302
|
+
res.freeze if freeze
|
303
|
+
res
|
304
|
+
ensure
|
305
|
+
Thread.current.thread_variable_set("Computable #{self.object_id}", old_caller)
|
295
306
|
end
|
296
307
|
end
|
297
308
|
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
class TestBacktrace < Minitest::Test
|
4
|
+
class MyBuilder < Computable
|
5
|
+
calc_value :a do
|
6
|
+
b
|
7
|
+
end
|
8
|
+
|
9
|
+
calc_value :b do
|
10
|
+
raise "my error"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def setup
|
15
|
+
@b = MyBuilder.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def teardown
|
19
|
+
# @b.computable_display_dot
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_backtrace_decoration
|
23
|
+
err = assert_raises(StandardError){ @b.a }
|
24
|
+
bt = err.backtrace.join("\n")
|
25
|
+
assert_match(/my error/, err.to_s)
|
26
|
+
assert_match(/test_backtrace.rb:10:.* #b$/, bt)
|
27
|
+
assert_match(/test_backtrace.rb:6:.* #a$/, bt)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class TestBacktraceParallel < TestBacktrace
|
32
|
+
include Helper::EnableParallel
|
33
|
+
end
|
data/test/test_parallel.rb
CHANGED
@@ -101,12 +101,12 @@ class TestParallel < Minitest::Test
|
|
101
101
|
@b.computable_max_threads = nil
|
102
102
|
@b.i1, @b.i2 = 2, 3
|
103
103
|
dt, res = diff_time{ @b.o }
|
104
|
-
assert_in_delta 0.8, dt, 0.
|
104
|
+
assert_in_delta 0.8, dt, 0.1
|
105
105
|
assert_equal 20, res
|
106
106
|
|
107
107
|
@b.i1, @b.i2 = 4, 5
|
108
108
|
dt, res = diff_time{ @b.o }
|
109
|
-
assert_in_delta 0.2, dt, 0.
|
109
|
+
assert_in_delta 0.2, dt, 0.1
|
110
110
|
assert_equal 36, res
|
111
111
|
end
|
112
112
|
|
@@ -114,12 +114,12 @@ class TestParallel < Minitest::Test
|
|
114
114
|
@b.computable_max_threads = 2
|
115
115
|
@b.i1, @b.i2 = 2, 3
|
116
116
|
dt, res = diff_time{ @b.o }
|
117
|
-
assert_in_delta 0.8, dt, 0.
|
117
|
+
assert_in_delta 0.8, dt, 0.1
|
118
118
|
assert_equal 20, res
|
119
119
|
|
120
120
|
@b.i1, @b.i2 = 4, 5
|
121
121
|
dt, res = diff_time{ @b.o }
|
122
|
-
assert_in_delta 0.4, dt, 0.
|
122
|
+
assert_in_delta 0.4, dt, 0.1
|
123
123
|
assert_equal 36, res
|
124
124
|
end
|
125
125
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: computable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lars Kanis
|
@@ -10,9 +10,9 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
13
|
+
MIIDLjCCAhagAwIBAgIBCjANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
|
14
14
|
czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
|
15
|
-
|
15
|
+
Fw0yMjA0MTExMTMwNTNaFw0yMzA0MTExMTMwNTNaMD0xDjAMBgNVBAMMBWthbmlz
|
16
16
|
MRcwFQYKCZImiZPyLGQBGRYHY29tY2FyZDESMBAGCgmSJomT8ixkARkWAmRlMIIB
|
17
17
|
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApop+rNmg35bzRugZ21VMGqI6
|
18
18
|
HGzPLO4VHYncWn/xmgPU/ZMcZdfj6MzIaZJ/czXyt4eHpBk1r8QOV3gBXnRXEjVW
|
@@ -21,15 +21,15 @@ cert_chain:
|
|
21
21
|
Q53c63+VLGsOjODl1yPn/2ejyq8qWu6ahfTxiIlSar2UbwtaQGBDFdb2CXgEufXT
|
22
22
|
L7oaPxlmj+Q2oLOfOnInd2Oxop59HoJCQPsg8f921J43NCQGA8VHK6paxIRDLQID
|
23
23
|
AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUvgTdT7fe
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQELBQADggEBAILiaB/unSVBfX5n7uL8
|
25
|
+
veGGCOHuGYhCGqspb6mYiCx0dmV3RPRiEfGDLfzcXbHNx/3AjygcxH4Slr+pmaxr
|
26
|
+
04Xli3WurocnjoANSWqCwpHH3OhSVxFgBNrCa3OMWcIr0xKH+I7PXA80SXe0pzfg
|
27
|
+
ePjpzTY71j+rcyRJqWiU5/zwdUaCCelBJscxh/0IaNcz67ocCEMRj0n4m5HFEmZL
|
28
|
+
9zKkMZFoOjxRQjcL84QU7ZXnnFR5HG8nLw+NqWjo49W6MBQ9HGFda2tk3OpBhyWS
|
29
|
+
sc3NyOkGUGdfiee5VRG31Sh3LLON3YGED+zZAS+ZF6598y4vhv8MBLa1Oy357byC
|
30
|
+
tTg=
|
31
31
|
-----END CERTIFICATE-----
|
32
|
-
date: 2022-
|
32
|
+
date: 2022-05-18 00:00:00.000000000 Z
|
33
33
|
dependencies:
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: bundler
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- lib/computable.rb
|
98
98
|
- lib/computable/version.rb
|
99
99
|
- test/helper.rb
|
100
|
+
- test/test_backtrace.rb
|
100
101
|
- test/test_candy.rb
|
101
102
|
- test/test_debug.rb
|
102
103
|
- test/test_expired_recalc.rb
|
@@ -131,6 +132,7 @@ specification_version: 4
|
|
131
132
|
summary: Define computation tasks with automatic caching and dependency tracking.
|
132
133
|
test_files:
|
133
134
|
- test/helper.rb
|
135
|
+
- test/test_backtrace.rb
|
134
136
|
- test/test_candy.rb
|
135
137
|
- test/test_debug.rb
|
136
138
|
- test/test_expired_recalc.rb
|
metadata.gz.sig
CHANGED
Binary file
|