abstractivator 0.15.0 → 0.16.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
 - data/.ruby-version +1 -0
 - data/lib/abstractivator/fiber_defer.rb +6 -0
 - data/lib/abstractivator/version.rb +1 -1
 - data/spec/lib/abstractivator/fiber_defer_spec.rb +33 -5
 - data/spec/lib/abstractivator/lazy_spec.rb +2 -2
 - data/spec/lib/abstractivator/trees/tree_map_spec.rb +2 -2
 - metadata +4 -4
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 26f878ae4109bef8680cc85a6b0d903b97778871
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ce8833f063703cdba55a4c7367cc66143f19c622
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: d45dc88be70f404b5449d61cc8684bf2b45c2deb2a07503d5586d75a1ab3295b15fde8fc5c2e180a266f1e7602832c82b2e409d94b8270b5b1d1b32445eafc30
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 96b27bef0776b6c25c5ea7bc0c1aff4f0801439e53f866938e6c4e02db8e14efda2f7bc2203352066b75b2c9a17a493d8e6cdd227c7909df702245beb8b30a1b
         
     | 
    
        data/.ruby-version
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            2.4.1
         
     | 
| 
         @@ -98,6 +98,12 @@ module Abstractivator 
     | 
|
| 
       98 
98 
     | 
    
         
             
                  safe_action = proc do
         
     | 
| 
       99 
99 
     | 
    
         
             
                    begin
         
     | 
| 
       100 
100 
     | 
    
         
             
                      [action.call, nil]
         
     | 
| 
      
 101 
     | 
    
         
            +
                    rescue SignalException => e
         
     | 
| 
      
 102 
     | 
    
         
            +
                      # The thread has been instructed to shut down, so let it.
         
     | 
| 
      
 103 
     | 
    
         
            +
                      # Don't pass on the exception to another thread/fiber.
         
     | 
| 
      
 104 
     | 
    
         
            +
                      # We will assume whatever is shutting down the thread will
         
     | 
| 
      
 105 
     | 
    
         
            +
                      # also account for the paused fiber on its own.
         
     | 
| 
      
 106 
     | 
    
         
            +
                      raise
         
     | 
| 
       101 
107 
     | 
    
         
             
                    rescue Exception => e
         
     | 
| 
       102 
108 
     | 
    
         
             
                      [nil, e]
         
     | 
| 
       103 
109 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -40,7 +40,7 @@ describe Abstractivator::FiberDefer do 
     | 
|
| 
       40 
40 
     | 
    
         
             
                  it 'propagates the thread/fiber-local variables into the block' do
         
     | 
| 
       41 
41 
     | 
    
         
             
                    EM.run do
         
     | 
| 
       42 
42 
     | 
    
         
             
                      guard = {
         
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
                          Thread.current[:meaning] => proc { |x| Thread.current[:meaning] = x }
         
     | 
| 
       44 
44 
     | 
    
         
             
                      }
         
     | 
| 
       45 
45 
     | 
    
         
             
                      with_fiber_defer(guard) do
         
     | 
| 
       46 
46 
     | 
    
         
             
                        expect(Thread.current[:meaning]).to eql 42
         
     | 
| 
         @@ -123,6 +123,34 @@ describe Abstractivator::FiberDefer do 
     | 
|
| 
       123 
123 
     | 
    
         
             
                    end
         
     | 
| 
       124 
124 
     | 
    
         
             
                  end
         
     | 
| 
       125 
125 
     | 
    
         
             
                end
         
     | 
| 
      
 126 
     | 
    
         
            +
                it 'terminates the worker thread on SignalError' do
         
     | 
| 
      
 127 
     | 
    
         
            +
                  EM.run do
         
     | 
| 
      
 128 
     | 
    
         
            +
                    with_fiber_defer do
         
     | 
| 
      
 129 
     | 
    
         
            +
                      worker_thread = nil
         
     | 
| 
      
 130 
     | 
    
         
            +
                      f = Fiber.current
         
     | 
| 
      
 131 
     | 
    
         
            +
                      fiber_defer do
         
     | 
| 
      
 132 
     | 
    
         
            +
                        worker_thread = Thread.current
         
     | 
| 
      
 133 
     | 
    
         
            +
                        worker_thread.abort_on_exception = false # don't immediately exit() the main thread when we raise
         
     | 
| 
      
 134 
     | 
    
         
            +
                        EM.next_tick { f.resume([nil, nil]) } # allow fiber_defer to return when control returns to the event loop on the main thread
         
     | 
| 
      
 135 
     | 
    
         
            +
                        raise SignalException.new('TERM')
         
     | 
| 
      
 136 
     | 
    
         
            +
                      end
         
     | 
| 
      
 137 
     | 
    
         
            +
                      expect { worker_thread.join(1) }.to raise_error SignalException # join raises when Thread#abort_on_exception is false
         
     | 
| 
      
 138 
     | 
    
         
            +
                      expect(worker_thread.alive?).to be_falsey
         
     | 
| 
      
 139 
     | 
    
         
            +
                      EM.threadpool.clear # otherwise, EM will try to re-join these during its cleanup, crash, and leave the EM singleton in a bad state for future tests
         
     | 
| 
      
 140 
     | 
    
         
            +
                      EM.stop
         
     | 
| 
      
 141 
     | 
    
         
            +
                    end
         
     | 
| 
      
 142 
     | 
    
         
            +
                  end
         
     | 
| 
      
 143 
     | 
    
         
            +
                end
         
     | 
| 
      
 144 
     | 
    
         
            +
                it 'does not terminate the worker thread on non-SignalErrors' do
         
     | 
| 
      
 145 
     | 
    
         
            +
                  EM.run do
         
     | 
| 
      
 146 
     | 
    
         
            +
                    with_fiber_defer do
         
     | 
| 
      
 147 
     | 
    
         
            +
                      worker_thread = nil
         
     | 
| 
      
 148 
     | 
    
         
            +
                      expect{fiber_defer{ worker_thread = Thread.current; raise 'oops' }}.to raise_error 'oops'
         
     | 
| 
      
 149 
     | 
    
         
            +
                      expect(worker_thread.alive?).to be_truthy
         
     | 
| 
      
 150 
     | 
    
         
            +
                      EM.stop
         
     | 
| 
      
 151 
     | 
    
         
            +
                    end
         
     | 
| 
      
 152 
     | 
    
         
            +
                  end
         
     | 
| 
      
 153 
     | 
    
         
            +
                end
         
     | 
| 
       126 
154 
     | 
    
         
             
                it 'works with simultaneous deferred actions' do
         
     | 
| 
       127 
155 
     | 
    
         
             
                  EM.run do
         
     | 
| 
       128 
156 
     | 
    
         
             
                    log = []
         
     | 
| 
         @@ -205,15 +233,15 @@ describe Abstractivator::FiberDefer do 
     | 
|
| 
       205 
233 
     | 
    
         
             
                    it 'applies the inherited guard and then the local guard upon entering and exiting the block' do
         
     | 
| 
       206 
234 
     | 
    
         
             
                      EM.run do
         
     | 
| 
       207 
235 
     | 
    
         
             
                        guard1 = {
         
     | 
| 
       208 
     | 
    
         
            -
             
     | 
| 
       209 
     | 
    
         
            -
             
     | 
| 
      
 236 
     | 
    
         
            +
                            Thread.current[:a] => proc {|x| Thread.current[:a] = x},
         
     | 
| 
      
 237 
     | 
    
         
            +
                            Thread.current[:b] => proc {|x| Thread.current[:b] = x}
         
     | 
| 
       210 
238 
     | 
    
         
             
                        }
         
     | 
| 
       211 
239 
     | 
    
         
             
                        with_fiber_defer(guard1) do
         
     | 
| 
       212 
240 
     | 
    
         
             
                          Thread.current[:b] = 22
         
     | 
| 
       213 
241 
     | 
    
         
             
                          Thread.current[:c] = 33
         
     | 
| 
       214 
242 
     | 
    
         
             
                          guard2 = {
         
     | 
| 
       215 
     | 
    
         
            -
             
     | 
| 
       216 
     | 
    
         
            -
             
     | 
| 
      
 243 
     | 
    
         
            +
                              Thread.current[:b] => proc {|x| Thread.current[:b] = x},
         
     | 
| 
      
 244 
     | 
    
         
            +
                              Thread.current[:c] => proc {|x| Thread.current[:c] = x}
         
     | 
| 
       217 
245 
     | 
    
         
             
                          }
         
     | 
| 
       218 
246 
     | 
    
         
             
                          fiber_defer(guard2) do
         
     | 
| 
       219 
247 
     | 
    
         
             
                            expect(Thread.current[:a]).to eql 1
         
     | 
| 
         @@ -29,7 +29,7 @@ describe Abstractivator::Lazy do 
     | 
|
| 
       29 
29 
     | 
    
         
             
                expect(lazy { 42 } != 42).to be false
         
     | 
| 
       30 
30 
     | 
    
         
             
                expect(lazy { 42 } != 99).to be true
         
     | 
| 
       31 
31 
     | 
    
         
             
                expect(lazy { 42 } === 42).to be true
         
     | 
| 
       32 
     | 
    
         
            -
                expect( 
     | 
| 
      
 32 
     | 
    
         
            +
                expect(Integer === lazy { 42 }).to be true
         
     | 
| 
       33 
33 
     | 
    
         
             
                expect(Array === lazy { 42 }).to be false
         
     | 
| 
       34 
34 
     | 
    
         
             
                expect(!(lazy { true })).to be false
         
     | 
| 
       35 
35 
     | 
    
         
             
                expect(!(lazy { false })).to be true
         
     | 
| 
         @@ -54,7 +54,7 @@ describe Abstractivator::Lazy do 
     | 
|
| 
       54 
54 
     | 
    
         
             
                it 'reveals the value type if the value has already been forced' do
         
     | 
| 
       55 
55 
     | 
    
         
             
                  value = lazy { 42 }
         
     | 
| 
       56 
56 
     | 
    
         
             
                  value.to_s
         
     | 
| 
       57 
     | 
    
         
            -
                  expect(value.inspect).to match /#<Abstractivator::Lazy: 
     | 
| 
      
 57 
     | 
    
         
            +
                  expect(value.inspect).to match /#<Abstractivator::Lazy:Integer:0x[0-9a-f]+>/
         
     | 
| 
       58 
58 
     | 
    
         
             
                end
         
     | 
| 
       59 
59 
     | 
    
         
             
              end
         
     | 
| 
       60 
60 
     | 
    
         | 
| 
         @@ -118,7 +118,7 @@ describe Abstractivator::Trees do 
     | 
|
| 
       118 
118 
     | 
    
         
             
                    expect(call_count).to eql 2
         
     | 
| 
       119 
119 
     | 
    
         
             
                  end
         
     | 
| 
       120 
120 
     | 
    
         
             
                  it 'raises an error is the value is not an array' do
         
     | 
| 
       121 
     | 
    
         
            -
                    expect{transform_one_path({a: 1}, 'a[]') { |x| x }}.to raise_error 'Expected an array but got  
     | 
| 
      
 121 
     | 
    
         
            +
                    expect{transform_one_path({a: 1}, 'a[]') { |x| x }}.to raise_error 'Expected an array but got Integer: 1'
         
     | 
| 
       122 
122 
     | 
    
         
             
                    expect{transform_one_path({a: {b: 1}}, 'a[]') { |x| x }}.to raise_error 'Expected an array but got Hash: {:b=>1}'
         
     | 
| 
       123 
123 
     | 
    
         
             
                  end
         
     | 
| 
       124 
124 
     | 
    
         
             
                end
         
     | 
| 
         @@ -140,7 +140,7 @@ describe Abstractivator::Trees do 
     | 
|
| 
       140 
140 
     | 
    
         
             
                    expect(call_count).to eql 2
         
     | 
| 
       141 
141 
     | 
    
         
             
                  end
         
     | 
| 
       142 
142 
     | 
    
         
             
                  it 'raises an error is the value is not a hash' do
         
     | 
| 
       143 
     | 
    
         
            -
                    expect{transform_one_path({a: 1}, 'a{}') { |x| x }}.to raise_error 'Expected a hash but got  
     | 
| 
      
 143 
     | 
    
         
            +
                    expect{transform_one_path({a: 1}, 'a{}') { |x| x }}.to raise_error 'Expected a hash but got Integer: 1'
         
     | 
| 
       144 
144 
     | 
    
         
             
                    expect{transform_one_path({a: [1, 2]}, 'a{}') { |x| x }}.to raise_error 'Expected a hash but got Array: [1, 2]'
         
     | 
| 
       145 
145 
     | 
    
         
             
                  end
         
     | 
| 
       146 
146 
     | 
    
         
             
                end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: abstractivator
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.16.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Peter Winton
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-04 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-08-04 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -109,6 +109,7 @@ extra_rdoc_files: [] 
     | 
|
| 
       109 
109 
     | 
    
         
             
            files:
         
     | 
| 
       110 
110 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
       111 
111 
     | 
    
         
             
            - ".rspec"
         
     | 
| 
      
 112 
     | 
    
         
            +
            - ".ruby-version"
         
     | 
| 
       112 
113 
     | 
    
         
             
            - CHANGES.md
         
     | 
| 
       113 
114 
     | 
    
         
             
            - Gemfile
         
     | 
| 
       114 
115 
     | 
    
         
             
            - LICENSE.txt
         
     | 
| 
         @@ -185,7 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       185 
186 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       186 
187 
     | 
    
         
             
            requirements: []
         
     | 
| 
       187 
188 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       188 
     | 
    
         
            -
            rubygems_version: 2.6. 
     | 
| 
      
 189 
     | 
    
         
            +
            rubygems_version: 2.6.12
         
     | 
| 
       189 
190 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       190 
191 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       191 
192 
     | 
    
         
             
            summary: Utilities
         
     | 
| 
         @@ -212,4 +213,3 @@ test_files: 
     | 
|
| 
       212 
213 
     | 
    
         
             
            - spec/lib/abstractivator/value_map_spec.rb
         
     | 
| 
       213 
214 
     | 
    
         
             
            - spec/lib/enumerable_ext_spec.rb
         
     | 
| 
       214 
215 
     | 
    
         
             
            - spec/lib/exception_ext_spec.rb
         
     | 
| 
       215 
     | 
    
         
            -
            has_rdoc: 
         
     |