computable 1.1.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 243882f1477717a2109d6206f3ed9b2d05ddc15f3a40e30262064ec5e5b2c180
4
- data.tar.gz: 41a8407b1a93ff4ba101d96fface1dd34a75cf014133bd577e3b5c3eacd1400b
3
+ metadata.gz: 36fc11ccdc0bcfd191eae39d35bae6fc896b338b52a63a2b6693b33c865bfeaf
4
+ data.tar.gz: f7db8ba67c28d1983569d73b4ab1ebb269ed82e0476d8aab39b72e5a93d65f13
5
5
  SHA512:
6
- metadata.gz: bec1240f2d68575246b3ae7c8dce73e6ef665e791186e769739955322e6af74ef5c448a5c0c2f7c1b2a9780c13e1d09e4c74956d2f956968b2028727a30e9e9b
7
- data.tar.gz: c352cdcabb1d2bbc1240e65ef3fd3439918bfb0b046fd7a6085dd276772e204f3ae2db125564eb8d453a086d09c80a2e36868f191f45995fc2990f8a1e4dd013
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", "< 3.0"
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
@@ -1,3 +1,3 @@
1
1
  class Computable
2
- VERSION = "1.1.2"
2
+ VERSION = "1.1.3"
3
3
  end
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.inspect}>"
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 = true
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
@@ -162,7 +166,7 @@ class Computable
162
166
  end
163
167
  node.in_process = true
164
168
  node.count += 1
165
- node.value_calced = true
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 = false
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
@@ -279,8 +283,8 @@ class Computable
279
283
  fpath, lineno = block.source_location
280
284
  bt = err.backtrace
281
285
  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?("#"))
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?(" #"))
284
288
  end
285
289
  idx = err.backtrace_locations.index(myloc)
286
290
  bt[idx] += " ##{text}" if idx
@@ -6,10 +6,13 @@ class TestBacktrace < Minitest::Test
6
6
  c
7
7
  end
8
8
 
9
- calc_value :c do
10
- raise "my error" if enable
11
- :x
9
+ def self.make_c
10
+ calc_value :c do
11
+ raise "my error" if enable
12
+ :x
13
+ end
12
14
  end
15
+ make_c
13
16
 
14
17
  calc_value :a do
15
18
  b
@@ -30,7 +33,7 @@ class TestBacktrace < Minitest::Test
30
33
  err = assert_raises(StandardError){ @b.b }
31
34
  bt = err.backtrace.join("\n")
32
35
  assert_match(/my error/, err.to_s)
33
- assert_match(/test_backtrace.rb:10:.* #c$/, bt)
36
+ assert_match(/test_backtrace.rb:11:.* #c$/, bt)
34
37
  assert_match(/test_backtrace.rb:6:.* #b$/, bt)
35
38
  end
36
39
 
@@ -42,7 +45,7 @@ class TestBacktrace < Minitest::Test
42
45
  err = assert_raises(StandardError){ @b.b }
43
46
  bt = err.backtrace.join("\n")
44
47
  assert_match(/my error/, err.to_s)
45
- assert_match(/test_backtrace.rb:10:.* #c$/, bt)
48
+ assert_match(/test_backtrace.rb:11:.* #c$/, bt)
46
49
  assert_match(/block in recalc_value' #b$/, bt) unless @b.computable_max_threads
47
50
  end
48
51
 
@@ -54,7 +57,7 @@ class TestBacktrace < Minitest::Test
54
57
  err = assert_raises(StandardError){ @b.a }
55
58
  bt = err.backtrace.join("\n")
56
59
  assert_match(/my error/, err.to_s)
57
- assert_match(/test_backtrace.rb:10:.* #c$/, bt)
60
+ assert_match(/test_backtrace.rb:11:.* #c$/, bt)
58
61
  assert_match(/block in recalc_value' #b.*block in recalc_value' #a$/m, bt) unless @b.computable_max_threads
59
62
  end
60
63
  end
@@ -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,4 +1,3 @@
1
- �
2
- ��m��>�r"�=lH��п��C>�%�Vn"����V�@$��'v7���?��M�;�ҕ�U^X��b��_��>�*j�����)6�v��d�o
3
- ���kk������p��Yn��"
4
- q��a꿙�%B뻪�5��C�['���`e�/�ZB���z�
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��N0��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.2
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
- MIIDLjCCAhagAwIBAgIBCzANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
14
- czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
15
- Fw0yMzA0MjgwOTI0NDhaFw0yNDA0MjcwOTI0NDhaMD0xDjAMBgNVBAMMBWthbmlz
16
- MRcwFQYKCZImiZPyLGQBGRYHY29tY2FyZDESMBAGCgmSJomT8ixkARkWAmRlMIIB
17
- IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApop+rNmg35bzRugZ21VMGqI6
18
- HGzPLO4VHYncWn/xmgPU/ZMcZdfj6MzIaZJ/czXyt4eHpBk1r8QOV3gBXnRXEjVW
19
- 9xi+EdVOkTV2/AVFKThcbTAQGiF/bT1n2M+B1GTybRzMg6hyhOJeGPqIhLfJEpxn
20
- lJi4+ENAVT4MpqHEAGB8yFoPC0GqiOHQsdHxQV3P3c2OZqG+yJey74QtwA2tLcLn
21
- Q53c63+VLGsOjODl1yPn/2ejyq8qWu6ahfTxiIlSar2UbwtaQGBDFdb2CXgEufXT
22
- L7oaPxlmj+Q2oLOfOnInd2Oxop59HoJCQPsg8f921J43NCQGA8VHK6paxIRDLQID
23
- AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUvgTdT7fe
24
- x17ugO3IOsjEJwW7KP4wDQYJKoZIhvcNAQELBQADggEBACAxNXwfMGG7paZjnG/c
25
- smdi/ocW2GmCNtILaSzDZqlD5LoA68MiO7u5vwWyBaDJ6giUB330VJoGRbWMxvxN
26
- JU6Bnwa4yYp9YtF91wYIi7FXwIrCPKd9bk3bf4M5wECdsv+zvVceq2zRXqD7fci8
27
- 1LRG8ort/f4TgaT7B4aNwOaabA2UT6u0FGeglqxLkhir86MY3QQyBfJZUoTKWGkz
28
- S9a7GXsYpe+8HMOaE4+SZp8SORKPgATND5m/4VdzuO59VXjE5UP7QpXigbxAt7H7
29
- ciK5Du2ZDhowmWzZwNzR7VvVmfAK6RQJlRB03VkkQRWGld5yApOrYDne6WbD8kE0
30
- uM8=
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: 2023-12-06 00:00:00.000000000 Z
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: '3.0'
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: '3.0'
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.4.15
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
@@ -1 +1,3 @@
1
- P�>���x-���+�������[d��Z�D�?�~
1
+ [@� v�XƨP��.!@��.��=I�Ш?��&�Žj�ګ�Xֺ!&�&&���5��Se��-⍵k- �����o�ɍ��^S�����Z/� |ݡ��:gV�KB��n�
2
+ �7k%�1�|�Ղ�o7g(������T��uB���Չ��*//����JE�L��X�x�Ǹ�T�
3
+ �鎃 �V8g�kB:ܔXk�=�T�J>���;3��Z�8&�<���L�����4O��� �ة���D��;�4KJ��Y`�Ò}^<cS�f��x�V�r5�q�V�x���$kվ���"a�J��𒿠ʰ`�����}