computable 1.0.0 → 1.1.0

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
  SHA256:
3
- metadata.gz: 5aa6e8a15124c51c77b6849974a4a8bec2badd58ee90532eabae5d974d2e1342
4
- data.tar.gz: 47e2605924a75967629be1e6c9f1fa263f5c577771ddad3ffc05660a300734d3
3
+ metadata.gz: 13fb18bf83a5d205517573213cc3bcc657d6352b3f5a5edd64d204459bec2f97
4
+ data.tar.gz: 4306e9149b11afe479bf5611270c5176001c54eae0ded32220eb6352beb0a2bc
5
5
  SHA512:
6
- metadata.gz: f394e585c1da2f6270ae4bfd2e520506738603ee07a5a7ddf1485a2aba061bf74bd40d61a4c4a3be74a8a89d279f97eb792179411cbbfe2b154b6cd4f62c9a0e
7
- data.tar.gz: 28a0950d0fcd04a80eb865a62997f4cd5f8a577cfe8cb1e2854b672bb51a95051b61798dc50d3f74a0dcabe5706be3454908becba91405b2a7e1e07bcd0376c4
6
+ metadata.gz: 7d6a66fbb762e2f49f04ac44ead89a0d022faa984de4330220833fdfe85d8bb70aef82c69e5827c3ce02e71efa57717798abcd2423f829ab500ba12db9fb2d35
7
+ data.tar.gz: '097c6dcf414d402457fa2035265e8c6694aecd6ddf70cc81b90aefd5eda4f9f17f13a27beedf124dba0cb13786b8e2885fa8e3d6ef4e5af3c0477e65fdeb5a8d'
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,3 +1,3 @@
1
1
  class Computable
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
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, &block)
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
- old_caller = Thread.current.thread_variable_get("Computable #{object_id}")
285
- Thread.current.thread_variable_set("Computable #{self.object_id}", v)
286
- begin
287
- puts "do calc #{v.inspect}" if @computable_debug
288
- res = send(calc_method_id)
289
- Computable.verify_format(name, res, format)
290
- res.freeze if freeze
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
@@ -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.05
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.05
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.05
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.05
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.0.0
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
- MIIDLjCCAhagAwIBAgIBCTANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
13
+ MIIDLjCCAhagAwIBAgIBCjANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
14
14
  czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
15
- Fw0yMTA0MDcxMzQzNTZaFw0yMjA0MDcxMzQzNTZaMD0xDjAMBgNVBAMMBWthbmlz
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
- x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQELBQADggEBAGCQhS4TBqUG1bSY5gw5
25
- emj2GNePHFNlXTZ/W0/7FlnXQz/LyBZeYmy4AIHcdY0w9xsu3bPNGk8kLBkHgK3Y
26
- l/yWiUK0NYRI3K3yI2EoTfrHPDT8XIgBPeUUGv5Nje+SUYMQWsfYWKo3+vLEG64a
27
- n1xP+1+g2Za39WCS5LwnDWMiIk47NnxR9yXErKd0Iau/Q/IarYsHFX6kWWmlMoln
28
- W1lMomCcOJFwIPnsy6aqq7YfS0YcqyHjcvs1h5k3zPaIRWhoPlQivniMVMa3Txh+
29
- NEF/4atY64rruzkyfxGEcrFFOHJIkWnWQjRGaiZdgULxf7ira2gEFvV/ZtamqJWF
30
- c+I=
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-03-25 00:00:00.000000000 Z
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