computable 1.1.0 → 1.1.2

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: 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�?�~