timeout 0.3.1 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -0
  3. data/lib/timeout.rb +17 -21
  4. data/timeout.gemspec +3 -1
  5. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a6594a086deee17da9d946b2f6068596050273da5171289b9f89d0ceb77a7b6
4
- data.tar.gz: 6fee2749f06aa755490e9865ce0e4a398c3f06a1b93d1542851b496f7b85d423
3
+ metadata.gz: 2c10c971f22da3b85c5219ff6c8d8f018de3b04ba2ae7c64c4f368bd9e2ebdb7
4
+ data.tar.gz: 26d74226d36fa316564ec6665218bb1665accbbe420305451285d0ff7799bc16
5
5
  SHA512:
6
- metadata.gz: c99b16bbdcfb0c08b46394ffc02da7df7e0f6377ff41f4d4ff6283301e68e316ed38b9a1efbca97a42308f49537cc68ee9a616c2b440bde671c92a26fdd4cfb1
7
- data.tar.gz: 7af440551ea27f95a2769dd046339073e2d15bd0ae0e0c6a2922666b7091775083121a575b9178c939acdb0d903d1b591c725dc9bd804a95cc1954ae61af8b30
6
+ metadata.gz: a256682e2e237e067eb602add2644138a24cfbad1fce1c3d5b47173b8c1ae1184cff832799982bbff2127fdc2ff061ca2292047d41a15470c4c96b05975252c3
7
+ data.tar.gz: 4d7b2d79b6e75f5519cd3b55f010a14c8612e01ac4f859a8352e812242556f7b7f7ddbd53fdf793bfff7815ac6a080bbb71ce7690938890c93f8cda44002e6e6
data/Gemfile CHANGED
@@ -6,4 +6,5 @@ group :development do
6
6
  gem "bundler"
7
7
  gem "rake"
8
8
  gem "test-unit"
9
+ gem "test-unit-ruby-core"
9
10
  end
data/lib/timeout.rb CHANGED
@@ -23,29 +23,26 @@
23
23
  # Copyright:: (C) 2000 Information-technology Promotion Agency, Japan
24
24
 
25
25
  module Timeout
26
- VERSION = "0.3.1"
26
+ VERSION = "0.4.1"
27
+
28
+ # Internal error raised to when a timeout is triggered.
29
+ class ExitException < Exception
30
+ def exception(*)
31
+ self
32
+ end
33
+ end
27
34
 
28
35
  # Raised by Timeout.timeout when the block times out.
29
36
  class Error < RuntimeError
30
- attr_reader :thread
37
+ def self.handle_timeout(message)
38
+ exc = ExitException.new(message)
31
39
 
32
- def self.catch(*args)
33
- exc = new(*args)
34
- exc.instance_variable_set(:@thread, Thread.current)
35
- exc.instance_variable_set(:@catch_value, exc)
36
- ::Kernel.catch(exc) {yield exc}
37
- end
38
-
39
- def exception(*)
40
- # TODO: use Fiber.current to see if self can be thrown
41
- if self.thread == Thread.current
42
- bt = caller
43
- begin
44
- throw(@catch_value, bt)
45
- rescue UncaughtThrowError
46
- end
40
+ begin
41
+ yield exc
42
+ rescue ExitException => e
43
+ raise new(message) if exc.equal?(e)
44
+ raise
47
45
  end
48
- super
49
46
  end
50
47
  end
51
48
 
@@ -120,7 +117,7 @@ module Timeout
120
117
  requests.reject!(&:done?)
121
118
  end
122
119
  end
123
- ThreadGroup::Default.add(watcher)
120
+ ThreadGroup::Default.add(watcher) unless watcher.group.enclosed?
124
121
  watcher.name = "Timeout stdlib thread"
125
122
  watcher.thread_variable_set(:"\0__detached_thread__", true)
126
123
  watcher
@@ -195,8 +192,7 @@ module Timeout
195
192
  if klass
196
193
  perform.call(klass)
197
194
  else
198
- backtrace = Error.catch(&perform)
199
- raise Error, message, backtrace
195
+ Error.handle_timeout(message, &perform)
200
196
  end
201
197
  end
202
198
  module_function :timeout
data/timeout.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  name = File.basename(__FILE__, ".gemspec")
4
- version = ["lib", Array.new(name.count("-")+1, "..").join("/")].find do |dir|
4
+ version = ["lib", Array.new(name.count("-")+1, ".").join("/")].find do |dir|
5
5
  break File.foreach(File.join(__dir__, dir, "#{name.tr('-', '/')}.rb")) do |line|
6
6
  /^\s*VERSION\s*=\s*"(.*)"/ =~ line and break $1
7
7
  end rescue nil
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.metadata["homepage_uri"] = spec.homepage
22
22
  spec.metadata["source_code_uri"] = spec.homepage
23
23
 
24
+ spec.required_ruby_version = '>= 2.6.0'
25
+
24
26
  spec.files = Dir.chdir(__dir__) do
25
27
  `git ls-files -z`.split("\x0").reject do |f|
26
28
  (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features|rakelib)/|\.(?:git|travis|circleci)|appveyor|Rakefile)})
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timeout
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yukihiro Matsumoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-05 00:00:00.000000000 Z
11
+ date: 2023-11-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Auto-terminate potentially long-running operations in Ruby.
14
14
  email:
@@ -37,14 +37,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 2.6.0
41
41
  required_rubygems_version: !ruby/object:Gem::Requirement
42
42
  requirements:
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
46
  requirements: []
47
- rubygems_version: 3.4.0.dev
47
+ rubygems_version: 3.5.0.dev
48
48
  signing_key:
49
49
  specification_version: 4
50
50
  summary: Auto-terminate potentially long-running operations in Ruby.