computable 1.1.1 → 1.1.3
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/computable.gemspec +1 -1
- data/lib/computable/version.rb +1 -1
- data/lib/computable.rb +16 -8
- data/test/test_backtrace.rb +40 -6
- data/test/test_input_value.rb +5 -0
- data.tar.gz.sig +3 -2
- metadata +27 -26
- 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: 36fc11ccdc0bcfd191eae39d35bae6fc896b338b52a63a2b6693b33c865bfeaf
|
|
4
|
+
data.tar.gz: f7db8ba67c28d1983569d73b4ab1ebb269ed82e0476d8aab39b72e5a93d65f13
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b742c59611981f23814e9b88b62c8b2aa1be6d61b8c3584d19724e40615fc5295381ef2d9e8302c6fd5ff24f6837f085582a4cfe02f4ef0a7febf71fb0d86e67
|
|
7
|
+
data.tar.gz: d076c6eb9329ae9848a5779205192be33936d1f2ca149366eb48a7998367d0236de9644e93d032e6cc1ed9015040b4d7b259723ee92eb22ca5125e4320d58559
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/computable.gemspec
CHANGED
|
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
20
20
|
spec.require_paths = ["lib"]
|
|
21
21
|
|
|
22
|
-
spec.add_development_dependency "bundler", ">= 1.4", "<
|
|
22
|
+
spec.add_development_dependency "bundler", ">= 1.4", "< 4.0"
|
|
23
23
|
spec.add_development_dependency "rake"
|
|
24
24
|
spec.add_development_dependency "minitest", "~> 5.6"
|
|
25
25
|
end
|
data/lib/computable/version.rb
CHANGED
data/lib/computable.rb
CHANGED
|
@@ -27,21 +27,25 @@ class Computable
|
|
|
27
27
|
@expired_from = {}
|
|
28
28
|
@count = 0
|
|
29
29
|
@value = Unknown
|
|
30
|
+
@value_calced = nil
|
|
30
31
|
@in_process = false
|
|
31
32
|
@recalc_error = nil
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
def inspect
|
|
35
36
|
has = @recalc_error ? "error!" : "value:#{Unknown!=value}"
|
|
36
|
-
"<Variable #{name} used_for:#{used_for.keys} expired_from:#{expired_from.keys} has #{has} value_calced:#{value_calced
|
|
37
|
+
"<Variable #{name} used_for:#{used_for.keys} expired_from:#{expired_from.keys} has #{has} value_calced:#{case value_calced when NilClass then :no when 1 then :yes when 2 then :exception end}>"
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
def calc!
|
|
40
41
|
self.count += 1
|
|
41
|
-
self.value_calced =
|
|
42
|
+
self.value_calced = 1
|
|
42
43
|
@mutex.unlock
|
|
43
44
|
begin
|
|
44
45
|
calc_method.call(self)
|
|
46
|
+
rescue
|
|
47
|
+
self.value_calced = 2
|
|
48
|
+
raise
|
|
45
49
|
ensure
|
|
46
50
|
@mutex.lock
|
|
47
51
|
end
|
|
@@ -90,7 +94,7 @@ class Computable
|
|
|
90
94
|
|
|
91
95
|
puts "recalc #{inspect}" if @comp.computable_debug
|
|
92
96
|
expired_from.each do |name2, v2|
|
|
93
|
-
v2.recalc_value
|
|
97
|
+
v2.recalc_value # Adjust improve_backtrace when moving this line within method recalc_value
|
|
94
98
|
end
|
|
95
99
|
|
|
96
100
|
unless expired_from.empty?
|
|
@@ -162,7 +166,7 @@ class Computable
|
|
|
162
166
|
end
|
|
163
167
|
node.in_process = true
|
|
164
168
|
node.count += 1
|
|
165
|
-
node.value_calced =
|
|
169
|
+
node.value_calced = 1
|
|
166
170
|
num_working += 1
|
|
167
171
|
to_workers.push(node)
|
|
168
172
|
end
|
|
@@ -189,14 +193,14 @@ class Computable
|
|
|
189
193
|
used_for.clear
|
|
190
194
|
self.value = value
|
|
191
195
|
end
|
|
192
|
-
self.value_calced =
|
|
196
|
+
self.value_calced = nil
|
|
193
197
|
end
|
|
194
198
|
|
|
195
199
|
def query_value(kaller)
|
|
196
200
|
if kaller
|
|
197
201
|
v2 = used_for[kaller.name]
|
|
198
202
|
if v2
|
|
199
|
-
if Unknown==value && Unknown==v2.value && value_calced && v2.value_calced
|
|
203
|
+
if Unknown==value && Unknown==v2.value && value_calced == 1 && v2.value_calced
|
|
200
204
|
raise RecursionDetected, "#{v2.name} depends on #{name}, but #{name} could not be computed without #{v2.name}"
|
|
201
205
|
end
|
|
202
206
|
else
|
|
@@ -275,11 +279,15 @@ class Computable
|
|
|
275
279
|
end
|
|
276
280
|
|
|
277
281
|
private def improve_backtrace(err, block, text)
|
|
282
|
+
recalc_location_fpath, recalc_location_lineno = Variable.instance_method(:recalc_value).source_location
|
|
278
283
|
fpath, lineno = block.source_location
|
|
279
284
|
bt = err.backtrace
|
|
280
|
-
myloc = err.backtrace_locations.
|
|
285
|
+
myloc = err.backtrace_locations.find.with_index do |loc, i|
|
|
286
|
+
(loc.path == recalc_location_fpath && loc.lineno == recalc_location_lineno + 5 && !bt[i].include?(" #")) ||
|
|
287
|
+
(loc.path == fpath && loc.lineno >= lineno && !bt[i].include?(" #") && !bt[i].include?(" #"))
|
|
288
|
+
end
|
|
281
289
|
idx = err.backtrace_locations.index(myloc)
|
|
282
|
-
bt[idx] += " ##{text}"
|
|
290
|
+
bt[idx] += " ##{text}" if idx
|
|
283
291
|
raise err
|
|
284
292
|
end
|
|
285
293
|
|
data/test/test_backtrace.rb
CHANGED
|
@@ -2,13 +2,22 @@ require_relative 'helper'
|
|
|
2
2
|
|
|
3
3
|
class TestBacktrace < Minitest::Test
|
|
4
4
|
class MyBuilder < Computable
|
|
5
|
-
calc_value :
|
|
6
|
-
|
|
5
|
+
calc_value :b do
|
|
6
|
+
c
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
def self.make_c
|
|
10
|
+
calc_value :c do
|
|
11
|
+
raise "my error" if enable
|
|
12
|
+
:x
|
|
13
|
+
end
|
|
11
14
|
end
|
|
15
|
+
make_c
|
|
16
|
+
|
|
17
|
+
calc_value :a do
|
|
18
|
+
b
|
|
19
|
+
end
|
|
20
|
+
input_value :enable
|
|
12
21
|
end
|
|
13
22
|
|
|
14
23
|
def setup
|
|
@@ -20,11 +29,36 @@ class TestBacktrace < Minitest::Test
|
|
|
20
29
|
end
|
|
21
30
|
|
|
22
31
|
def test_backtrace_decoration
|
|
32
|
+
@b.enable = true
|
|
33
|
+
err = assert_raises(StandardError){ @b.b }
|
|
34
|
+
bt = err.backtrace.join("\n")
|
|
35
|
+
assert_match(/my error/, err.to_s)
|
|
36
|
+
assert_match(/test_backtrace.rb:11:.* #c$/, bt)
|
|
37
|
+
assert_match(/test_backtrace.rb:6:.* #b$/, bt)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_recalc_backtrace_decoration
|
|
41
|
+
@b.enable = false
|
|
42
|
+
@b.b
|
|
43
|
+
@b.enable = true
|
|
44
|
+
|
|
45
|
+
err = assert_raises(StandardError){ @b.b }
|
|
46
|
+
bt = err.backtrace.join("\n")
|
|
47
|
+
assert_match(/my error/, err.to_s)
|
|
48
|
+
assert_match(/test_backtrace.rb:11:.* #c$/, bt)
|
|
49
|
+
assert_match(/block in recalc_value' #b$/, bt) unless @b.computable_max_threads
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def test_recalc_longer_backtrace_decoration
|
|
53
|
+
@b.enable = false
|
|
54
|
+
@b.a
|
|
55
|
+
@b.enable = true
|
|
56
|
+
|
|
23
57
|
err = assert_raises(StandardError){ @b.a }
|
|
24
58
|
bt = err.backtrace.join("\n")
|
|
25
59
|
assert_match(/my error/, err.to_s)
|
|
26
|
-
assert_match(/test_backtrace.rb:
|
|
27
|
-
assert_match(/
|
|
60
|
+
assert_match(/test_backtrace.rb:11:.* #c$/, bt)
|
|
61
|
+
assert_match(/block in recalc_value' #b.*block in recalc_value' #a$/m, bt) unless @b.computable_max_threads
|
|
28
62
|
end
|
|
29
63
|
end
|
|
30
64
|
|
data/test/test_input_value.rb
CHANGED
|
@@ -17,6 +17,11 @@ class TestInputValue < Minitest::Test
|
|
|
17
17
|
# @b.computable_display_dot
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
def test_undefined_input_twice
|
|
21
|
+
assert_raises(Computable::UndefinedValue){ @b.o }
|
|
22
|
+
assert_raises(Computable::UndefinedValue){ @b.o }
|
|
23
|
+
end
|
|
24
|
+
|
|
20
25
|
def test_undefined_input
|
|
21
26
|
assert_raises(Computable::UndefinedValue){ @b.i }
|
|
22
27
|
assert_raises(Computable::UndefinedValue){ @b.o }
|
data.tar.gz.sig
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
D��u�G��#��p���r[{tB���[����'CU�x��C K���RT��݈����R�ŅҲ�vIݧa����#�B���(o�=�uc��=����a��*w^1��Ti
|
|
2
|
+
n�/C6�`j�8(���w߯�܄ٷ���u���,u��N�0��P6�C�4/��`�f-�TmZ/�E>RlZ�U��
|
|
3
|
+
�{�D�Xn���k��Q��f.��K@��-��ܬ��]�rm���[*�s�d��|�~8�Q��`��s�\ ?S�{�$+ N�Q�k]iі�p�l f�p��vE��p�O��lBpڌ(�i�EQb�Iڽك�����%U��
|
metadata
CHANGED
|
@@ -1,35 +1,38 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: computable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.1.
|
|
4
|
+
version: 1.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Lars Kanis
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain:
|
|
11
10
|
- |
|
|
12
11
|
-----BEGIN CERTIFICATE-----
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
12
|
+
MIIEBDCCAmygAwIBAgIBAzANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1sYXJz
|
|
13
|
+
L0RDPWdyZWl6LXJlaW5zZG9yZi9EQz1kZTAeFw0yNDEyMjkxOTU2NTZaFw0yNTEy
|
|
14
|
+
MjkxOTU2NTZaMCgxJjAkBgNVBAMMHWxhcnMvREM9Z3JlaXotcmVpbnNkb3JmL0RD
|
|
15
|
+
PWRlMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAwum6Y1KznfpzXOT/
|
|
16
|
+
mZgJTBbxZuuZF49Fq3K0WA67YBzNlDv95qzSp7V/7Ek3NCcnT7G+2kSuhNo1FhdN
|
|
17
|
+
eSDO/moYebZNAcu3iqLsuzuULXPLuoU0GsMnVMqV9DZPh7cQHE5EBZ7hlzDBK7k/
|
|
18
|
+
8nBMvR0mHo77kIkapHc26UzVq/G0nKLfDsIHXVylto3PjzOumjG6GhmFN4r3cP6e
|
|
19
|
+
SDfl1FSeRYVpt4kmQULz/zdSaOH3AjAq7PM2Z91iGwQvoUXMANH2v89OWjQO/NHe
|
|
20
|
+
JMNDFsmHK/6Ji4Kk48Z3TyscHQnipAID5GhS1oD21/WePdj7GhmbF5gBzkV5uepd
|
|
21
|
+
eJQPgWGwrQW/Z2oPjRuJrRofzWfrMWqbOahj9uth6WSxhNexUtbjk6P8emmXOJi5
|
|
22
|
+
chQPnWX+N3Gj+jjYxqTFdwT7Mj3pv1VHa+aNUbqSPpvJeDyxRIuo9hvzDaBHb/Cg
|
|
23
|
+
9qRVcm8a96n4t7y2lrX1oookY6bkBaxWOMtWlqIprq8JZXM9AgMBAAGjOTA3MAkG
|
|
24
|
+
A1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQ4h1tIyvdUWtMI739xMzTR
|
|
25
|
+
7EfMFzANBgkqhkiG9w0BAQsFAAOCAYEAoZZWzNV2XXaoSmvyamSSN+Wt/Ia+DNrU
|
|
26
|
+
2pc3kMEqykH6l1WiVPszr6HavQ//2I2UcSRSS5AGDdiSXcfyFmHtMBdtJHhTPcn7
|
|
27
|
+
4DLliB0szpvwG+ltGD8PI8eWkLaTQeFzs+0QCTavgKV+Zw56Q0J5zZvHHUMrLkUD
|
|
28
|
+
qhwKjdTdkrRTn9Sqi0BrIRRZGTUDdrt8qoWm35aES5arKZzytgrRD/kXfFW2LCg0
|
|
29
|
+
FzgTKibR4/3g8ph94kQLg/D2SMlVPkQ3ECi036mZxDC2n8V6u3rDkG5923wmrRZB
|
|
30
|
+
J6cqz475Q8HYORQCB68OPzkWMfC7mBo3vpSsIqRoNs1FE4FJu4FGwZG8fBSrDC4H
|
|
31
|
+
bZe+GtyS3e2SMjgT65zp35gLO9I7MquzYN9P6V2u1iBpTycchk5z9R1ghxzZSBT8
|
|
32
|
+
DrkJ9tVlPQtJB0LqT0tvBap4upnwT1xYq721b5dwH6AF4Pi6iz/dc5vnq1/MH8bV
|
|
33
|
+
8VbbBzzeE7MsvgkP3sHlLmY8PtuyViJ8
|
|
31
34
|
-----END CERTIFICATE-----
|
|
32
|
-
date:
|
|
35
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
33
36
|
dependencies:
|
|
34
37
|
- !ruby/object:Gem::Dependency
|
|
35
38
|
name: bundler
|
|
@@ -40,7 +43,7 @@ dependencies:
|
|
|
40
43
|
version: '1.4'
|
|
41
44
|
- - "<"
|
|
42
45
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: '
|
|
46
|
+
version: '4.0'
|
|
44
47
|
type: :development
|
|
45
48
|
prerelease: false
|
|
46
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -50,7 +53,7 @@ dependencies:
|
|
|
50
53
|
version: '1.4'
|
|
51
54
|
- - "<"
|
|
52
55
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: '
|
|
56
|
+
version: '4.0'
|
|
54
57
|
- !ruby/object:Gem::Dependency
|
|
55
58
|
name: rake
|
|
56
59
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -112,7 +115,6 @@ homepage: https://github.com/larskanis/computable
|
|
|
112
115
|
licenses:
|
|
113
116
|
- MIT
|
|
114
117
|
metadata: {}
|
|
115
|
-
post_install_message:
|
|
116
118
|
rdoc_options: []
|
|
117
119
|
require_paths:
|
|
118
120
|
- lib
|
|
@@ -127,8 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
127
129
|
- !ruby/object:Gem::Version
|
|
128
130
|
version: '0'
|
|
129
131
|
requirements: []
|
|
130
|
-
rubygems_version: 3.
|
|
131
|
-
signing_key:
|
|
132
|
+
rubygems_version: 3.6.9
|
|
132
133
|
specification_version: 4
|
|
133
134
|
summary: Define computation tasks with automatic caching and dependency tracking.
|
|
134
135
|
test_files:
|
metadata.gz.sig
CHANGED
|
Binary file
|