timeout-extensions 0.0.0 → 0.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
- data/.rubocop.yml +34 -0
- data/.travis.yml +25 -0
- data/CHANGES.md +3 -0
- data/Gemfile +10 -2
- data/README.md +17 -1
- data/Rakefile +8 -0
- data/lib/timeout/extensions.rb +33 -28
- data/lib/timeout/extensions/version.rb +1 -1
- data/spec/spec_helper.rb +9 -52
- data/spec/timeout/extensions_spec.rb +10 -14
- data/timeout-extensions.gemspec +3 -6
- metadata +8 -61
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac5f8d21d026acd98f1d9dd234e7a580a8efa2bc
|
4
|
+
data.tar.gz: fa3e5860cf5f98d836d8e3cb1350913453163dbf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 326430abdffa6d8a8c21dc101a802cb193545fc1648b2c345c392aca3d899a1b648cf49f0d9e2885387358d8d6667cbd62c95fb012faab8365d5b84f0f20c878
|
7
|
+
data.tar.gz: 50a5b3f7b721d8f181dd533ecf53d2c2b0c4fcb417b8530af6b5fe060e9c5b4de7c5ec90e5d0737e27fb233385440716b6fb6f17e1aca4e9634a3a68ddaf957c
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
AllCops:
|
2
|
+
DisplayCopNames: true
|
3
|
+
|
4
|
+
#
|
5
|
+
# Style
|
6
|
+
#
|
7
|
+
|
8
|
+
LineLength:
|
9
|
+
Max: 128
|
10
|
+
|
11
|
+
Style/StringLiterals:
|
12
|
+
EnforcedStyle: double_quotes
|
13
|
+
|
14
|
+
Style/SpaceBeforeFirstArg:
|
15
|
+
Enabled: false
|
16
|
+
|
17
|
+
Style/ConditionalAssignment:
|
18
|
+
Enabled: false
|
19
|
+
|
20
|
+
Style/ClassAndModuleChildren:
|
21
|
+
Enabled: false
|
22
|
+
|
23
|
+
Style/Documentation:
|
24
|
+
Enabled: false
|
25
|
+
|
26
|
+
#
|
27
|
+
# Metrics
|
28
|
+
#
|
29
|
+
|
30
|
+
Metrics/MethodLength:
|
31
|
+
Max: 20
|
32
|
+
|
33
|
+
Metrics/AbcSize:
|
34
|
+
Max: 20
|
data/.travis.yml
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
language: ruby
|
2
|
+
sudo: false
|
3
|
+
|
4
|
+
bundler_args: --without development doc
|
5
|
+
|
6
|
+
rvm:
|
7
|
+
- 2.1
|
8
|
+
- 2.2
|
9
|
+
- 2.3.0
|
10
|
+
- 2.3.1
|
11
|
+
- jruby-9.1.0.0
|
12
|
+
- jruby-head
|
13
|
+
- ruby-head
|
14
|
+
- rbx-2
|
15
|
+
|
16
|
+
matrix:
|
17
|
+
allow_failures:
|
18
|
+
- rvm: jruby-head
|
19
|
+
- rvm: ruby-head
|
20
|
+
- rvm: rbx-2
|
21
|
+
fast_finish: true
|
22
|
+
|
23
|
+
branches:
|
24
|
+
only:
|
25
|
+
- master
|
data/CHANGES.md
ADDED
data/Gemfile
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
2
|
|
3
|
-
# Specify your gem's dependencies in timeout.gemspec
|
4
3
|
gemspec
|
4
|
+
|
5
|
+
group :development, :test do
|
6
|
+
gem "rake"
|
7
|
+
end
|
8
|
+
|
9
|
+
group :test do
|
10
|
+
gem "rspec", "~> 3", require: false
|
11
|
+
gem "rubocop", "0.41.1", require: false
|
12
|
+
end
|
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
Timeout::Extensions
|
2
2
|
===================
|
3
3
|
|
4
|
+
[](http://rubygems.org/gems/timeout-extensions)
|
5
|
+
[](http://travis-ci.org/celluloid/timeout-extensions)
|
6
|
+
[](https://codeclimate.com/github/celluloid/timeout-extensions)
|
7
|
+
|
4
8
|
The Timeout::Extensions Gem augments Ruby's `timeout.rb` API with support for
|
5
9
|
multiple timeout backends which can be mixed and matched within a single app.
|
6
10
|
|
@@ -71,6 +75,18 @@ Timeout.backend(MyTimeoutThingy) do
|
|
71
75
|
end
|
72
76
|
```
|
73
77
|
|
78
|
+
## Supported Ruby Versions
|
79
|
+
|
80
|
+
This library aims to support and is [tested against][travis] the following Ruby
|
81
|
+
versions:
|
82
|
+
|
83
|
+
* Ruby 2.1
|
84
|
+
* Ruby 2.2
|
85
|
+
* Ruby 2.3
|
86
|
+
* JRuby 9.1
|
87
|
+
|
88
|
+
If something doesn't work on one of these versions, it's a bug.
|
89
|
+
|
74
90
|
# Contributing
|
75
91
|
|
76
92
|
* Fork this repository on github
|
@@ -80,5 +96,5 @@ end
|
|
80
96
|
|
81
97
|
# License
|
82
98
|
|
83
|
-
Copyright (c) 2014-
|
99
|
+
Copyright (c) 2014-2016 Tony Arcieri, Tiago Cardoso
|
84
100
|
Distributed under the MIT License. See LICENSE.txt for further details.
|
data/Rakefile
CHANGED
data/lib/timeout/extensions.rb
CHANGED
@@ -1,45 +1,50 @@
|
|
1
|
-
require
|
1
|
+
require "timeout/extensions/version"
|
2
2
|
|
3
|
+
# Core extensions to Thread
|
4
|
+
#
|
5
|
+
# Adds accessors to customize timeout and sleep within a thread,
|
6
|
+
# if you have a better friendlier implementation of both methods,
|
7
|
+
# or if your code breaks with the stdlib implementations.
|
8
|
+
#
|
3
9
|
class Thread
|
4
10
|
attr_accessor :timeout_handler
|
5
11
|
attr_accessor :sleep_handler
|
6
12
|
end
|
7
13
|
|
8
14
|
module Timeout::Extensions
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
15
|
+
module TimeoutMethods
|
16
|
+
def timeout(*args, &block)
|
17
|
+
if (timeout_handler = Thread.current.timeout_handler)
|
18
|
+
timeout_handler.call(*args, &block)
|
19
|
+
else
|
20
|
+
super
|
21
|
+
end
|
13
22
|
end
|
14
23
|
end
|
15
24
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
25
|
+
module KernelMethods
|
26
|
+
def sleep(*args)
|
27
|
+
if (sleep_handler = Thread.current.sleep_handler)
|
28
|
+
sleep_handler.call(*args)
|
29
|
+
else
|
30
|
+
super
|
31
|
+
end
|
21
32
|
end
|
22
33
|
end
|
23
|
-
module_function :timeout_with_handler
|
24
|
-
public :timeout_with_handler
|
25
|
-
end
|
26
34
|
|
27
|
-
module
|
28
|
-
|
29
|
-
|
30
|
-
alias_method :sleep_without_handler, :sleep
|
31
|
-
alias_method :sleep, :sleep_with_handler
|
32
|
-
end
|
35
|
+
# in order for prepend to work, I have to do it in the Timeout module singleton class
|
36
|
+
class << ::Timeout
|
37
|
+
prepend TimeoutMethods
|
33
38
|
end
|
34
39
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
else
|
39
|
-
sleep_without_handler(*args)
|
40
|
-
end
|
40
|
+
# ditto for Kernel
|
41
|
+
class << ::Kernel
|
42
|
+
prepend KernelMethods
|
41
43
|
end
|
42
|
-
end
|
43
44
|
|
44
|
-
|
45
|
-
|
45
|
+
# this is an hack so that calling "sleep(2)" works. Amazingly, the message doesn't get
|
46
|
+
# sent to Kernel.sleep code path.
|
47
|
+
# https://bugs.ruby-lang.org/issues/12535
|
48
|
+
#
|
49
|
+
::Object.prepend KernelMethods
|
50
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,65 +1,22 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require 'celluloid/autostart'
|
7
|
-
require 'celluloid/rspec'
|
8
|
-
|
9
|
-
logfile = File.open(File.expand_path("../../log/test.log", __FILE__), 'a')
|
10
|
-
logfile.sync = true
|
11
|
-
|
12
|
-
logger = Celluloid.logger = Logger.new(logfile)
|
13
|
-
|
14
|
-
Celluloid.shutdown_timeout = 1
|
15
|
-
|
16
|
-
|
17
|
-
class Celluloid::Actor
|
18
|
-
# Important that these two are left out, or else
|
19
|
-
# timeout calls inside the actor scope will never propagate
|
20
|
-
# to the proper extensions
|
21
|
-
# TODO: eventually remove this if celluloid adopts the gem
|
22
|
-
undef_method :timeout if instance_methods(false).include?(:timeout)
|
23
|
-
undef_method :sleep if instance_methods(false).include?(:sleep)
|
24
|
-
end
|
25
|
-
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
require "logger"
|
4
|
+
require "timeout"
|
5
|
+
require "timeout/extensions"
|
26
6
|
|
27
7
|
RSpec.configure do |config|
|
28
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
29
8
|
config.run_all_when_everything_filtered = true
|
30
9
|
config.filter_run :focus
|
31
10
|
|
32
11
|
config.before do
|
33
|
-
Celluloid.logger = logger
|
34
|
-
if Celluloid.running?
|
35
|
-
Celluloid.shutdown
|
36
|
-
sleep 0.01
|
37
|
-
Celluloid.internal_pool.assert_inactive
|
38
|
-
end
|
39
|
-
|
40
|
-
Celluloid.boot
|
41
|
-
|
42
|
-
FileUtils.rm("/tmp/cell_sock") if File.exist?("/tmp/cell_sock")
|
43
12
|
include Timeout::Extensions
|
44
13
|
end
|
45
14
|
|
46
|
-
config.order =
|
15
|
+
config.order = "random"
|
47
16
|
end
|
48
17
|
|
49
|
-
|
50
|
-
|
51
|
-
execute_block_on_receiver :wrap
|
52
|
-
|
53
|
-
def wrap
|
18
|
+
def within_thread
|
19
|
+
Thread.new do
|
54
20
|
yield
|
55
|
-
end
|
21
|
+
end.join
|
56
22
|
end
|
57
|
-
|
58
|
-
def within_actor(&block)
|
59
|
-
actor = ExampleActor.new
|
60
|
-
actor.wrap(&block)
|
61
|
-
ensure
|
62
|
-
actor.terminate if actor and actor.alive?
|
63
|
-
end
|
64
|
-
|
65
|
-
|
@@ -1,35 +1,31 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
|
-
describe Timeout::Extensions do
|
4
|
-
describe "timeout" do
|
3
|
+
RSpec.describe Timeout::Extensions do
|
4
|
+
describe ".timeout" do
|
5
5
|
let(:dummy_timeout) { double(:meta_timeout) }
|
6
6
|
let(:exception) { double(:exception) }
|
7
|
-
let(:action) {
|
8
|
-
context "inside and outside of
|
7
|
+
let(:action) { proc { |t| } }
|
8
|
+
context "inside and outside of thread" do
|
9
9
|
it "hits the proper timeout handler" do
|
10
|
-
|
10
|
+
within_thread do
|
11
11
|
Thread.current.timeout_handler = dummy_timeout
|
12
12
|
expect(dummy_timeout).to receive(:call).with(2, exception, &action)
|
13
13
|
timeout(2, exception, &action)
|
14
14
|
end
|
15
|
-
expect(Timeout).to receive(:timeout_without_handler)
|
16
|
-
timeout(2, exception, &action)
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
20
18
|
|
21
|
-
describe "sleep" do
|
19
|
+
describe ".sleep" do
|
22
20
|
let(:dummy_sleep) { double(:meta_sleep) }
|
23
|
-
context "inside and outside of
|
21
|
+
context "inside and outside of thread" do
|
24
22
|
it "hits the proper sleep handler" do
|
25
|
-
|
23
|
+
within_thread do
|
26
24
|
Thread.current.sleep_handler = dummy_sleep
|
27
25
|
expect(dummy_sleep).to receive(:call).with(2)
|
28
26
|
sleep(2)
|
29
27
|
end
|
30
|
-
expect(self).to receive(:sleep_without_handler)
|
31
|
-
sleep(2)
|
32
28
|
end
|
33
29
|
end
|
34
|
-
end
|
30
|
+
end
|
35
31
|
end
|
data/timeout-extensions.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
|
-
lib = File.expand_path(
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
4
|
+
require "timeout/extensions/version"
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "timeout-extensions"
|
@@ -18,8 +18,5 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.
|
22
|
-
spec.add_development_dependency "pry", "~> 0.10.1"
|
23
|
-
spec.add_development_dependency "rspec", "~> 2.14.0"
|
24
|
-
spec.add_development_dependency "celluloid", ">= 0.16.0"
|
21
|
+
spec.required_ruby_version = ">= 2.0.0"
|
25
22
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timeout-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
@@ -9,64 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: rake
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - "~>"
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 10.4.2
|
21
|
-
type: :development
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - "~>"
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 10.4.2
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: pry
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - "~>"
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: 0.10.1
|
35
|
-
type: :development
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - "~>"
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: 0.10.1
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: rspec
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - "~>"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: 2.14.0
|
49
|
-
type: :development
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - "~>"
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: 2.14.0
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: celluloid
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 0.16.0
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: 0.16.0
|
12
|
+
date: 2016-07-03 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
70
14
|
description: A timeout extension for Ruby which plugs into multiple timeout backends
|
71
15
|
email:
|
72
16
|
- bascule@gmail.com
|
@@ -76,6 +20,9 @@ extra_rdoc_files: []
|
|
76
20
|
files:
|
77
21
|
- ".gitignore"
|
78
22
|
- ".rspec"
|
23
|
+
- ".rubocop.yml"
|
24
|
+
- ".travis.yml"
|
25
|
+
- CHANGES.md
|
79
26
|
- Gemfile
|
80
27
|
- LICENSE.txt
|
81
28
|
- README.md
|
@@ -98,7 +45,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
45
|
requirements:
|
99
46
|
- - ">="
|
100
47
|
- !ruby/object:Gem::Version
|
101
|
-
version:
|
48
|
+
version: 2.0.0
|
102
49
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
50
|
requirements:
|
104
51
|
- - ">="
|
@@ -106,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
53
|
version: '0'
|
107
54
|
requirements: []
|
108
55
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.
|
56
|
+
rubygems_version: 2.5.1
|
110
57
|
signing_key:
|
111
58
|
specification_version: 4
|
112
59
|
summary: Extensions to the Ruby standard library's timeout API
|