evt-retry 0.1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/retry.rb +4 -0
- data/lib/retry/controls.rb +4 -0
- data/lib/retry/controls/error.rb +6 -0
- data/lib/retry/controls/time.rb +17 -0
- data/lib/retry/retry.rb +58 -0
- metadata +90 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9529eaa26c53aef9a50d652b4884f05aa233dcef
|
4
|
+
data.tar.gz: 63dbb27269b8e30e0c379bc2fc36861e9c0bc58f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3d5ed4c6e93d006677410a6e1cfdc1b5eb09a2ab1c892476d9276f217c48e93dbd056a7da423ea767e64c0216dde04a0fae9225311ba8c6f8d061820b3d01cba
|
7
|
+
data.tar.gz: 48b75b53bd7ba1ac88c31d1d1e8139e6ac58cb1b8d488baf76a1af9d060f414fe2504027be447a35c4afff2378cf8f0da3efe775590680c5bd7b320f006fdd3d
|
data/lib/retry.rb
ADDED
data/lib/retry/retry.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
class Retry
|
2
|
+
initializer :errors
|
3
|
+
|
4
|
+
def millisecond_intervals
|
5
|
+
@millisecond_intervals ||= [0].to_enum
|
6
|
+
end
|
7
|
+
attr_writer :millisecond_intervals
|
8
|
+
|
9
|
+
def action_executed(&action)
|
10
|
+
unless action.nil?
|
11
|
+
self.action_executed = action
|
12
|
+
end
|
13
|
+
|
14
|
+
@action_executed
|
15
|
+
end
|
16
|
+
attr_writer :action_executed
|
17
|
+
|
18
|
+
def self.build(*errors, millisecond_intervals: nil)
|
19
|
+
instance = new(errors)
|
20
|
+
instance.millisecond_intervals = millisecond_intervals&.to_enum
|
21
|
+
instance
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.call(*errors, millisecond_intervals: nil, &action)
|
25
|
+
instance = build(*errors, millisecond_intervals: millisecond_intervals)
|
26
|
+
instance.(&action)
|
27
|
+
end
|
28
|
+
|
29
|
+
def call(&action)
|
30
|
+
retries = 0
|
31
|
+
|
32
|
+
error = nil
|
33
|
+
probe = proc { |e| error = e }
|
34
|
+
|
35
|
+
loop do
|
36
|
+
success = Try.(*errors, error_probe: probe) do
|
37
|
+
action.call(retries)
|
38
|
+
end
|
39
|
+
|
40
|
+
action_executed&.call(retries)
|
41
|
+
|
42
|
+
break if success
|
43
|
+
|
44
|
+
retries += 1
|
45
|
+
|
46
|
+
interval = millisecond_intervals.next
|
47
|
+
break if interval.nil?
|
48
|
+
|
49
|
+
sleep (interval/1000.0)
|
50
|
+
end
|
51
|
+
|
52
|
+
unless error.nil?
|
53
|
+
raise error
|
54
|
+
end
|
55
|
+
|
56
|
+
retries
|
57
|
+
end
|
58
|
+
end
|
metadata
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: evt-retry
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- The Eventide Project
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-03-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: evt-try
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: evt-initializer
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: test_bench
|
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
|
+
description: " "
|
56
|
+
email: opensource@eventide-project.org
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/retry.rb
|
62
|
+
- lib/retry/controls.rb
|
63
|
+
- lib/retry/controls/error.rb
|
64
|
+
- lib/retry/controls/time.rb
|
65
|
+
- lib/retry/retry.rb
|
66
|
+
homepage: https://github.com/eventide-project/retry
|
67
|
+
licenses:
|
68
|
+
- MIT
|
69
|
+
metadata: {}
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
require_paths:
|
73
|
+
- lib
|
74
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 2.3.3
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
requirements: []
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 2.5.2
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Retry an execution that terminates with an error
|
90
|
+
test_files: []
|