tretry 0.0.3 → 0.0.4
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/Rakefile +3 -3
- data/lib/tretry.rb +44 -45
- metadata +48 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ec5ecfe155371b1b3c9698118b3d1d01c6136125c94dc136925ae1473e234a6
|
4
|
+
data.tar.gz: 497ed8ab7b1bff0ae9f9c5025fab65b086459f6aa55b73fdfaf624a8a62ef875
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f28e16cff32efb56d911ad726f2f23d8d8aebe1ad602ca364b9321caf67fc793528afe73a828ae97c5c503163a348aa38ef3dab8c9ac18a28644be68097db052
|
7
|
+
data.tar.gz: c40a00b1dbb9afa773e438dfdef671d4a614f5da4b852266ac80d6d1e6595238d14c688c6c4586cbffd7a383568aa233f52126c9b2aa99dec712278f57d99624
|
data/Rakefile
CHANGED
@@ -3,8 +3,8 @@ require "bundler"
|
|
3
3
|
begin
|
4
4
|
Bundler.setup(:default, :development)
|
5
5
|
rescue Bundler::BundlerError => e
|
6
|
-
$stderr.
|
7
|
-
$stderr.
|
6
|
+
$stderr.warn e.message
|
7
|
+
$stderr.warn "Run `bundle install` to install missing gems"
|
8
8
|
exit e.status_code
|
9
9
|
end
|
10
10
|
require "rake"
|
@@ -20,4 +20,4 @@ RSpec::Core::RakeTask.new(:rcov) do |spec|
|
|
20
20
|
spec.rcov = true
|
21
21
|
end
|
22
22
|
|
23
|
-
task :
|
23
|
+
task default: :spec
|
data/lib/tretry.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
#A library for doing retries in Ruby with timeouts, analysis of errors, waits between tries and more.
|
1
|
+
# A library for doing retries in Ruby with timeouts, analysis of errors, waits between tries and more.
|
2
2
|
class Tretry
|
3
3
|
autoload :Result, "#{__dir__}/tretry/result"
|
4
4
|
|
5
|
-
|
6
|
-
attr_accessor :timeout, :tries, :wait
|
5
|
+
attr_accessor :error, :errors, :exit, :fails, :interrupt, :return_error, :timeout, :tries, :wait
|
7
6
|
|
8
7
|
#===Runs a block of code a given amount of times until it succeeds.
|
9
8
|
#===Examples
|
@@ -18,68 +17,70 @@ class Tretry
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def initialize(errors: nil, exit: true, interrupt: true, return_error: nil, timeout: nil, tries: 3, wait: nil)
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
20
|
+
self.errors = errors
|
21
|
+
self.exit = exit
|
22
|
+
self.fails = []
|
23
|
+
self.interrupt = interrupt
|
25
24
|
@before_retry = []
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
self.return_error = return_error
|
26
|
+
self.timeout = timeout
|
27
|
+
self.tries = tries
|
28
|
+
self.wait = wait
|
30
29
|
end
|
31
30
|
|
32
31
|
def before_retry(&block)
|
33
32
|
@before_retry << block
|
34
33
|
end
|
35
34
|
|
36
|
-
def try(&block)
|
35
|
+
def try(&block) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
37
36
|
raise "No block given." unless block
|
37
|
+
|
38
38
|
@block = block
|
39
39
|
|
40
|
-
|
40
|
+
tries.times do |count|
|
41
41
|
@count = count
|
42
42
|
|
43
43
|
unless first_try?
|
44
44
|
# Sleep for a given amount of time if the 'wait'-argument is given.
|
45
|
-
sleep(
|
45
|
+
sleep(wait) if wait
|
46
46
|
|
47
|
-
call_before_retry(error:
|
48
|
-
|
47
|
+
call_before_retry(error: error)
|
48
|
+
self.error = nil
|
49
49
|
end
|
50
50
|
|
51
51
|
begin
|
52
52
|
# If a timeout-argument has been given, then run the code through the timeout.
|
53
|
-
if
|
53
|
+
if timeout
|
54
54
|
try_with_timeout
|
55
55
|
else
|
56
56
|
# Else call block normally.
|
57
57
|
@res = @block.call
|
58
58
|
@dobreak = true
|
59
59
|
end
|
60
|
-
rescue Exception => e
|
60
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
61
61
|
handle_error(e)
|
62
62
|
end
|
63
63
|
|
64
64
|
if @doraise
|
65
|
-
if
|
66
|
-
|
65
|
+
if return_error
|
66
|
+
fails << {error: error}
|
67
|
+
|
67
68
|
return Tretry::Result.new(
|
68
|
-
fails:
|
69
|
+
fails: fails,
|
69
70
|
error: true
|
70
71
|
)
|
71
|
-
else
|
72
|
-
raise @error
|
73
72
|
end
|
74
|
-
|
75
|
-
|
73
|
+
|
74
|
+
raise error
|
75
|
+
elsif error
|
76
|
+
fails << {error: error}
|
76
77
|
end
|
77
78
|
|
78
79
|
break if @dobreak
|
79
80
|
end
|
80
81
|
|
81
82
|
Tretry::Result.new(
|
82
|
-
fails:
|
83
|
+
fails: fails,
|
83
84
|
result: @res,
|
84
85
|
error: false
|
85
86
|
)
|
@@ -88,29 +89,27 @@ class Tretry
|
|
88
89
|
private
|
89
90
|
|
90
91
|
def try_with_timeout
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
@dobreak = true
|
96
|
-
end
|
97
|
-
rescue Timeout::Error => e
|
98
|
-
handle_error(e)
|
92
|
+
require "timeout"
|
93
|
+
Timeout.timeout(timeout) do
|
94
|
+
@res = @block.call
|
95
|
+
@dobreak = true
|
99
96
|
end
|
97
|
+
rescue Timeout::Error => e
|
98
|
+
handle_error(e)
|
100
99
|
end
|
101
100
|
|
102
|
-
def handle_error(
|
103
|
-
if
|
104
|
-
raise
|
105
|
-
elsif
|
106
|
-
raise
|
107
|
-
elsif last_try? ||
|
108
|
-
@doraise =
|
109
|
-
elsif
|
101
|
+
def handle_error(error) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
102
|
+
if error.instance_of?(Interrupt)
|
103
|
+
raise error if interrupt
|
104
|
+
elsif error.instance_of?(SystemExit)
|
105
|
+
raise error if self.exit
|
106
|
+
elsif last_try? || (errors && !errors.include?(error.class))
|
107
|
+
@doraise = error
|
108
|
+
elsif errors&.include?(error.class) # rubocop:disable Lint/EmptyConditionalBody
|
110
109
|
# Given error was in the :errors-array - do nothing. Maybe later it should be logged and returned in a stats-hash or something? - knj
|
111
110
|
end
|
112
111
|
|
113
|
-
|
112
|
+
self.error = error
|
114
113
|
end
|
115
114
|
|
116
115
|
def call_before_retry(args)
|
@@ -120,10 +119,10 @@ private
|
|
120
119
|
end
|
121
120
|
|
122
121
|
def last_try?
|
123
|
-
(@count + 1) >=
|
122
|
+
(@count + 1) >= tries
|
124
123
|
end
|
125
124
|
|
126
125
|
def first_try?
|
127
|
-
@count
|
126
|
+
@count.zero?
|
128
127
|
end
|
129
128
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tretry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kasper Stöckel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,48 @@ dependencies:
|
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 3.11.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop-performance
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
41
83
|
description: A library for doing retries in Ruby with timeouts, analysis of errors,
|
42
84
|
waits between tries and more.
|
43
85
|
email: k@spernj.org
|
@@ -51,7 +93,8 @@ files:
|
|
51
93
|
homepage: http://github.com/kaspernj/tretry
|
52
94
|
licenses:
|
53
95
|
- MIT
|
54
|
-
metadata:
|
96
|
+
metadata:
|
97
|
+
rubygems_mfa_required: 'true'
|
55
98
|
post_install_message:
|
56
99
|
rdoc_options: []
|
57
100
|
require_paths:
|
@@ -60,14 +103,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
103
|
requirements:
|
61
104
|
- - ">="
|
62
105
|
- !ruby/object:Gem::Version
|
63
|
-
version: '
|
106
|
+
version: '2.6'
|
64
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
108
|
requirements:
|
66
109
|
- - ">="
|
67
110
|
- !ruby/object:Gem::Version
|
68
111
|
version: '0'
|
69
112
|
requirements: []
|
70
|
-
rubygems_version: 3.1
|
113
|
+
rubygems_version: 3.0.3.1
|
71
114
|
signing_key:
|
72
115
|
specification_version: 4
|
73
116
|
summary: A library for doing retries in Ruby with timeouts, analysis of errors, waits
|