evt-retry 0.1.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.
@@ -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
@@ -0,0 +1,4 @@
1
+ require 'try'
2
+ require 'initializer'; Initializer.activate
3
+
4
+ require 'retry/retry'
@@ -0,0 +1,4 @@
1
+ require 'try/controls'
2
+
3
+ require 'retry/controls/error'
4
+ require 'retry/controls/time'
@@ -0,0 +1,6 @@
1
+ class Retry
2
+ module Controls
3
+ ErrorA = Try::Controls::ErrorA
4
+ ErrorB = Try::Controls::ErrorB
5
+ end
6
+ end
@@ -0,0 +1,17 @@
1
+ class Retry
2
+ module Controls
3
+ module Time
4
+ module Elapsed
5
+ def self.measure(&action)
6
+ elapsed = nil
7
+ t1 = ::Time.now
8
+
9
+ action.call
10
+
11
+ t2 = ::Time.now
12
+ (t2 - t1) * 1000
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -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: []