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 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