computable 1.1.0 → 1.1.2

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: 13fb18bf83a5d205517573213cc3bcc657d6352b3f5a5edd64d204459bec2f97
4
- data.tar.gz: 4306e9149b11afe479bf5611270c5176001c54eae0ded32220eb6352beb0a2bc
3
+ metadata.gz: 243882f1477717a2109d6206f3ed9b2d05ddc15f3a40e30262064ec5e5b2c180
4
+ data.tar.gz: 41a8407b1a93ff4ba101d96fface1dd34a75cf014133bd577e3b5c3eacd1400b
5
5
  SHA512:
6
- metadata.gz: 7d6a66fbb762e2f49f04ac44ead89a0d022faa984de4330220833fdfe85d8bb70aef82c69e5827c3ce02e71efa57717798abcd2423f829ab500ba12db9fb2d35
7
- data.tar.gz: '097c6dcf414d402457fa2035265e8c6694aecd6ddf70cc81b90aefd5eda4f9f17f13a27beedf124dba0cb13786b8e2885fa8e3d6ef4e5af3c0477e65fdeb5a8d'
6
+ metadata.gz: bec1240f2d68575246b3ae7c8dce73e6ef665e791186e769739955322e6af74ef5c448a5c0c2f7c1b2a9780c13e1d09e4c74956d2f956968b2028727a30e9e9b
7
+ data.tar.gz: c352cdcabb1d2bbc1240e65ef3fd3439918bfb0b046fd7a6085dd276772e204f3ae2db125564eb8d453a086d09c80a2e36868f191f45995fc2990f8a1e4dd013
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,3 +1,3 @@
1
1
  class Computable
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.2"
3
3
  end
data/lib/computable.rb CHANGED
@@ -90,7 +90,7 @@ class Computable
90
90
 
91
91
  puts "recalc #{inspect}" if @comp.computable_debug
92
92
  expired_from.each do |name2, v2|
93
- v2.recalc_value
93
+ v2.recalc_value # Adjust improve_backtrace when moving this line within method recalc_value
94
94
  end
95
95
 
96
96
  unless expired_from.empty?
@@ -275,21 +275,21 @@ class Computable
275
275
  end
276
276
 
277
277
  private def improve_backtrace(err, block, text)
278
+ recalc_location_fpath, recalc_location_lineno = Variable.instance_method(:recalc_value).source_location
278
279
  fpath, lineno = block.source_location
279
280
  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
+ myloc = err.backtrace_locations.find.with_index do |loc, i|
282
+ (loc.path == recalc_location_fpath && loc.lineno == recalc_location_lineno + 5 && !bt[i].include?("#")) ||
283
+ (loc.path == fpath && loc.lineno >= lineno && !bt[i].include?("#") && !bt[i].include?("#"))
284
+ end
281
285
  idx = err.backtrace_locations.index(myloc)
282
- bt[idx] += " ##{text}"
286
+ bt[idx] += " ##{text}" if idx
283
287
  raise err
284
288
  end
285
289
 
286
290
  def self.calc_value name, format=nil, freeze: true, &block
287
291
  calc_method_id = "calc_#{name}".intern
288
- define_method(calc_method_id) do
289
- instance_eval(&block)
290
- rescue Exception => err
291
- improve_backtrace(err, block, name)
292
- end
292
+ define_method(calc_method_id, &block)
293
293
 
294
294
  calc_method2_id = "calc_#{name}_with_tracking".intern
295
295
  define_method(calc_method2_id) do |v|
@@ -297,7 +297,11 @@ class Computable
297
297
  Thread.current.thread_variable_set("Computable #{self.object_id}", v)
298
298
  begin
299
299
  puts "do calc #{v.inspect}" if @computable_debug
300
- res = send(calc_method_id)
300
+ begin
301
+ res = send(calc_method_id)
302
+ rescue Exception => err
303
+ improve_backtrace(err, block, name)
304
+ end
301
305
  Computable.verify_format(name, res, format)
302
306
  res.freeze if freeze
303
307
  res
@@ -2,13 +2,19 @@ require_relative 'helper'
2
2
 
3
3
  class TestBacktrace < Minitest::Test
4
4
  class MyBuilder < Computable
5
- calc_value :a do
6
- b
5
+ calc_value :b do
6
+ c
7
7
  end
8
8
 
9
- calc_value :b do
10
- raise "my error"
9
+ calc_value :c do
10
+ raise "my error" if enable
11
+ :x
11
12
  end
13
+
14
+ calc_value :a do
15
+ b
16
+ end
17
+ input_value :enable
12
18
  end
13
19
 
14
20
  def setup
@@ -20,11 +26,36 @@ class TestBacktrace < Minitest::Test
20
26
  end
21
27
 
22
28
  def test_backtrace_decoration
29
+ @b.enable = true
30
+ err = assert_raises(StandardError){ @b.b }
31
+ bt = err.backtrace.join("\n")
32
+ assert_match(/my error/, err.to_s)
33
+ assert_match(/test_backtrace.rb:10:.* #c$/, bt)
34
+ assert_match(/test_backtrace.rb:6:.* #b$/, bt)
35
+ end
36
+
37
+ def test_recalc_backtrace_decoration
38
+ @b.enable = false
39
+ @b.b
40
+ @b.enable = true
41
+
42
+ err = assert_raises(StandardError){ @b.b }
43
+ bt = err.backtrace.join("\n")
44
+ assert_match(/my error/, err.to_s)
45
+ assert_match(/test_backtrace.rb:10:.* #c$/, bt)
46
+ assert_match(/block in recalc_value' #b$/, bt) unless @b.computable_max_threads
47
+ end
48
+
49
+ def test_recalc_longer_backtrace_decoration
50
+ @b.enable = false
51
+ @b.a
52
+ @b.enable = true
53
+
23
54
  err = assert_raises(StandardError){ @b.a }
24
55
  bt = err.backtrace.join("\n")
25
56
  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)
57
+ assert_match(/test_backtrace.rb:10:.* #c$/, bt)
58
+ assert_match(/block in recalc_value' #b.*block in recalc_value' #a$/m, bt) unless @b.computable_max_threads
28
59
  end
29
60
  end
30
61
 
@@ -0,0 +1,31 @@
1
+ require_relative 'helper'
2
+
3
+ class TestInheritance < Minitest::Test
4
+ class MyBuilder < Computable
5
+ calc_value :a do |*d|
6
+ "x#{d.inspect}"
7
+ end
8
+ end
9
+
10
+ class MyChild < MyBuilder
11
+ calc_value :a do |*d|
12
+ super() + "y#{d.inspect}"
13
+ end
14
+ end
15
+
16
+ def setup
17
+ @b = MyChild.new
18
+ end
19
+
20
+ def teardown
21
+ # @b.computable_display_dot
22
+ end
23
+
24
+ def test_super
25
+ assert_equal "x[]y[]", @b.a
26
+ end
27
+ end
28
+
29
+ class TestInheritanceParallel < TestInheritance
30
+ include Helper::EnableParallel
31
+ 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.1.0
4
+ version: 1.1.2
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
- MIIDLjCCAhagAwIBAgIBCjANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
13
+ MIIDLjCCAhagAwIBAgIBCzANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
14
14
  czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
15
- Fw0yMjA0MTExMTMwNTNaFw0yMzA0MTExMTMwNTNaMD0xDjAMBgNVBAMMBWthbmlz
15
+ Fw0yMzA0MjgwOTI0NDhaFw0yNDA0MjcwOTI0NDhaMD0xDjAMBgNVBAMMBWthbmlz
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
- x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQELBQADggEBAILiaB/unSVBfX5n7uL8
25
- veGGCOHuGYhCGqspb6mYiCx0dmV3RPRiEfGDLfzcXbHNx/3AjygcxH4Slr+pmaxr
26
- 04Xli3WurocnjoANSWqCwpHH3OhSVxFgBNrCa3OMWcIr0xKH+I7PXA80SXe0pzfg
27
- ePjpzTY71j+rcyRJqWiU5/zwdUaCCelBJscxh/0IaNcz67ocCEMRj0n4m5HFEmZL
28
- 9zKkMZFoOjxRQjcL84QU7ZXnnFR5HG8nLw+NqWjo49W6MBQ9HGFda2tk3OpBhyWS
29
- sc3NyOkGUGdfiee5VRG31Sh3LLON3YGED+zZAS+ZF6598y4vhv8MBLa1Oy357byC
30
- tTg=
24
+ x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQELBQADggEBACAxNXwfMGG7paZjnG/c
25
+ smdi/ocW2GmCNtILaSzDZqlD5LoA68MiO7u5vwWyBaDJ6giUB330VJoGRbWMxvxN
26
+ JU6Bnwa4yYp9YtF91wYIi7FXwIrCPKd9bk3bf4M5wECdsv+zvVceq2zRXqD7fci8
27
+ 1LRG8ort/f4TgaT7B4aNwOaabA2UT6u0FGeglqxLkhir86MY3QQyBfJZUoTKWGkz
28
+ S9a7GXsYpe+8HMOaE4+SZp8SORKPgATND5m/4VdzuO59VXjE5UP7QpXigbxAt7H7
29
+ ciK5Du2ZDhowmWzZwNzR7VvVmfAK6RQJlRB03VkkQRWGld5yApOrYDne6WbD8kE0
30
+ uM8=
31
31
  -----END CERTIFICATE-----
32
- date: 2022-05-18 00:00:00.000000000 Z
32
+ date: 2023-12-06 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: bundler
@@ -103,6 +103,7 @@ files:
103
103
  - test/test_expired_recalc.rb
104
104
  - test/test_format.rb
105
105
  - test/test_freeze.rb
106
+ - test/test_inheritance.rb
106
107
  - test/test_input_value.rb
107
108
  - test/test_parallel.rb
108
109
  - test/test_recursion_detection.rb
@@ -126,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
127
  - !ruby/object:Gem::Version
127
128
  version: '0'
128
129
  requirements: []
129
- rubygems_version: 3.3.7
130
+ rubygems_version: 3.4.15
130
131
  signing_key:
131
132
  specification_version: 4
132
133
  summary: Define computation tasks with automatic caching and dependency tracking.
@@ -138,6 +139,7 @@ test_files:
138
139
  - test/test_expired_recalc.rb
139
140
  - test/test_format.rb
140
141
  - test/test_freeze.rb
142
+ - test/test_inheritance.rb
141
143
  - test/test_input_value.rb
142
144
  - test/test_parallel.rb
143
145
  - test/test_recursion_detection.rb
metadata.gz.sig CHANGED
@@ -1,2 +1 @@
1
- P��t^���#'n�̍Q|^�J3�ߋ^��о�]�՛�i�/\,h����*����O8t����a�]�J i�;���j>�s��$u�
2
- �%��\ȹ�%z8/�y;��̥؀������&�2u�`�%ő�>�F����e 3O�p�8ʡ?��!��
1
+ P�>���x-���+�������[d��ZD�?�~