timeout 0.1.1 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c275580eb02c8bbabced79c6bc5649b69d57d31483b83d9653b3ff0ce6da2864
4
- data.tar.gz: 602aacc5ea6732177692344bbc4beb3d7e3740551c7697d448e55ccdfcd46796
3
+ metadata.gz: 62c9c45a4b7b1b7d4d0ee380d1827ee0718b895c368651be2c1a14acd5722e5a
4
+ data.tar.gz: 99344f3c5fd6808bc63fee9f5e96e21ffbb0ad495c1a5f0015cf5041e17ef74f
5
5
  SHA512:
6
- metadata.gz: 7e0e0b62836f721c7ac9aa26645e7b956c7658ac8437ab3d259a6bb30701f7c3c60ed30edc0e8e22461c01f50fa7331d661ac7f1f69fb6436a5e126bda0e8ea4
7
- data.tar.gz: d9aa6de653d6f4c477400ed0a250533b99960ef333f5d7adcdc5bac2ff359c153f24bb09643c4b8ecb54bbb808391229679b5bdedb24848309f2ed7bcbf81d0c
6
+ metadata.gz: 07f0da54b3057e69eef0a421fb5203710e5fe1837ba3c9ec234d81f77736fc524a18c57cd93ed07c403bdd585f588b764fd77bb71c39fed0bfd6af60b1bd9038
7
+ data.tar.gz: dcb89670a2e4593c64e39c6e6c1c50ef9df4d5810bab6272a82f7038a01b52efd45903489d587f40e60f609a39befe84be4b8bac333132406b14c87444f1c606
@@ -11,14 +11,12 @@ jobs:
11
11
  os: [ ubuntu-latest, macos-latest ]
12
12
  runs-on: ${{ matrix.os }}
13
13
  steps:
14
- - uses: actions/checkout@master
14
+ - uses: actions/checkout@v2
15
15
  - name: Set up Ruby
16
16
  uses: ruby/setup-ruby@v1
17
17
  with:
18
18
  ruby-version: ${{ matrix.ruby }}
19
19
  - name: Install dependencies
20
- run: |
21
- gem install bundler --no-document
22
- bundle install
20
+ run: bundle install
23
21
  - name: Run test
24
22
  run: rake test
data/Rakefile CHANGED
@@ -9,7 +9,7 @@ end
9
9
 
10
10
  task :sync_tool do
11
11
  require 'fileutils'
12
- FileUtils.cp "../ruby/tool/lib/test/unit/core_assertions.rb", "./test/lib"
12
+ FileUtils.cp "../ruby/tool/lib/core_assertions.rb", "./test/lib"
13
13
  FileUtils.cp "../ruby/tool/lib/envutil.rb", "./test/lib"
14
14
  FileUtils.cp "../ruby/tool/lib/find_executable.rb", "./test/lib"
15
15
  end
data/lib/timeout.rb CHANGED
@@ -23,7 +23,7 @@
23
23
  # Copyright:: (C) 2000 Information-technology Promotion Agency, Japan
24
24
 
25
25
  module Timeout
26
- VERSION = "0.1.1"
26
+ VERSION = "0.2.0".freeze
27
27
 
28
28
  # Raised by Timeout.timeout when the block times out.
29
29
  class Error < RuntimeError
@@ -32,6 +32,7 @@ module Timeout
32
32
  def self.catch(*args)
33
33
  exc = new(*args)
34
34
  exc.instance_variable_set(:@thread, Thread.current)
35
+ exc.instance_variable_set(:@catch_value, exc)
35
36
  ::Kernel.catch(exc) {yield exc}
36
37
  end
37
38
 
@@ -40,11 +41,11 @@ module Timeout
40
41
  if self.thread == Thread.current
41
42
  bt = caller
42
43
  begin
43
- throw(self, bt)
44
+ throw(@catch_value, bt)
44
45
  rescue UncaughtThrowError
45
46
  end
46
47
  end
47
- self
48
+ super
48
49
  end
49
50
  end
50
51
 
@@ -73,12 +74,21 @@ module Timeout
73
74
  # ensure to prevent the handling of the exception. For that reason, this
74
75
  # method cannot be relied on to enforce timeouts for untrusted blocks.
75
76
  #
77
+ # If a scheduler is defined, it will be used to handle the timeout by invoking
78
+ # Scheduler#timeout_after.
79
+ #
76
80
  # Note that this is both a method of module Timeout, so you can <tt>include
77
81
  # Timeout</tt> into your classes so they have a #timeout method, as well as
78
82
  # a module method, so you can call it directly as Timeout.timeout().
79
- def timeout(sec, klass = nil, message = nil) #:yield: +sec+
83
+ def timeout(sec, klass = nil, message = nil, &block) #:yield: +sec+
80
84
  return yield(sec) if sec == nil or sec.zero?
85
+
81
86
  message ||= "execution expired".freeze
87
+
88
+ if Fiber.respond_to?(:current_scheduler) && (scheduler = Fiber.current_scheduler)&.respond_to?(:timeout_after)
89
+ return scheduler.timeout_after(sec, klass || Error, message, &block)
90
+ end
91
+
82
92
  from = "from #{caller_locations(1, 1)[0]}" if $DEBUG
83
93
  e = Error
84
94
  bl = proc do |exception|
@@ -106,6 +116,7 @@ module Timeout
106
116
  begin
107
117
  bl.call(klass)
108
118
  rescue klass => e
119
+ message = e.message
109
120
  bt = e.backtrace
110
121
  end
111
122
  else
@@ -120,15 +131,3 @@ module Timeout
120
131
 
121
132
  module_function :timeout
122
133
  end
123
-
124
- def timeout(*args, &block)
125
- warn "Object##{__method__} is deprecated, use Timeout.timeout instead.", uplevel: 1
126
- Timeout.timeout(*args, &block)
127
- end
128
-
129
- # Another name for Timeout::Error, defined for backwards compatibility with
130
- # earlier versions of timeout.rb.
131
- TimeoutError = Timeout::Error
132
- class Object
133
- deprecate_constant :TimeoutError
134
- end
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.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yukihiro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-22 00:00:00.000000000 Z
11
+ date: 2021-10-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Auto-terminate potentially long-running operations in Ruby.
14
14
  email:
@@ -49,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0'
51
51
  requirements: []
52
- rubygems_version: 3.2.2
52
+ rubygems_version: 3.3.0.dev
53
53
  signing_key:
54
54
  specification_version: 4
55
55
  summary: Auto-terminate potentially long-running operations in Ruby.