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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/computable/version.rb +1 -1
- data/lib/computable.rb +23 -12
- data/test/test_backtrace.rb +33 -0
- data/test/test_parallel.rb +4 -4
- data.tar.gz.sig +0 -0
- metadata +13 -11
- 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: 13fb18bf83a5d205517573213cc3bcc657d6352b3f5a5edd64d204459bec2f97
         | 
| 4 | 
            +
              data.tar.gz: 4306e9149b11afe479bf5611270c5176001c54eae0ded32220eb6352beb0a2bc
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7d6a66fbb762e2f49f04ac44ead89a0d022faa984de4330220833fdfe85d8bb70aef82c69e5827c3ce02e71efa57717798abcd2423f829ab500ba12db9fb2d35
         | 
| 7 | 
            +
              data.tar.gz: '097c6dcf414d402457fa2035265e8c6694aecd6ddf70cc81b90aefd5eda4f9f17f13a27beedf124dba0cb13786b8e2885fa8e3d6ef4e5af3c0477e65fdeb5a8d'
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data/lib/computable/version.rb
    CHANGED
    
    
    
        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 | 
| 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 | 
            -
                     | 
| 285 | 
            -
                     | 
| 286 | 
            -
                     | 
| 287 | 
            -
             | 
| 288 | 
            -
             | 
| 289 | 
            -
             | 
| 290 | 
            -
             | 
| 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
         | 
    
        data/test/test_parallel.rb
    CHANGED
    
    | @@ -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. | 
| 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. | 
| 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. | 
| 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. | 
| 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. | 
| 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 | 
            -
               | 
| 13 | 
            +
              MIIDLjCCAhagAwIBAgIBCjANBgkqhkiG9w0BAQsFADA9MQ4wDAYDVQQDDAVrYW5p
         | 
| 14 14 | 
             
              czEXMBUGCgmSJomT8ixkARkWB2NvbWNhcmQxEjAQBgoJkiaJk/IsZAEZFgJkZTAe
         | 
| 15 | 
            -
               | 
| 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 | 
            -
               | 
| 25 | 
            -
               | 
| 26 | 
            -
               | 
| 27 | 
            -
               | 
| 28 | 
            -
               | 
| 29 | 
            -
               | 
| 30 | 
            -
               | 
| 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- | 
| 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 |