there_was_an_attempt 1.0.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +2 -2
- data/lib/there_was_an_attempt.rb +18 -4
- data/lib/there_was_an_attempt/version.rb +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2703f0a8bc92d3f13e8419a4989a7cf3ab9ca20b7f5923bdbb3072459465e348
|
4
|
+
data.tar.gz: b6dc17d9d1476b699bfc3104eb6a21c6c42aed09fadd2b62672ac0d08ace1663
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6c89412698c889b751d3e4177d10e32b98cc2fa498ad782cbe77923af920b4ac3e75173e9ccf03ba52ba9683bf20b6e41bc597c85ff010a020a3e75200fb8f3
|
7
|
+
data.tar.gz: 7adbd39f2e23b1e5ea1191aa8acbdbb107600f4ad2475cdc2777cca305344591e5b82ca91c8d7abec5c5802d3c4a7519ac99b1a52b902e16f09e1373c4d7ff90
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
2.0.0
|
2
|
+
|
3
|
+
* Added ability to specify a conditional retry, useful for only reattempting when its safe to do so.
|
4
|
+
* By default retries will always be attempted.
|
5
|
+
* Moved to keyword arguments for initialisation to support future features, this is a breaking change.
|
6
|
+
* Organised default arguments for future expansion.
|
7
|
+
|
1
8
|
1.0.0
|
2
9
|
|
3
10
|
* Initial release to support need for backoff in [Bellroy](https://bellroy.com/) projects.
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
![There was an attempt](https://user-images.githubusercontent.com/2643026/78128526-ff02ec80-740d-11ea-9226-40b15c437518.png)
|
2
2
|
|
3
|
-
# There was an attempt
|
3
|
+
# There was an attempt [![Gem Version](https://badge.fury.io/rb/there_was_an_attempt.svg)](https://badge.fury.io/rb/there_was_an_attempt) ![RSpec](https://github.com/samuelgiles/there_was_an_attempt/workflows/RSpec/badge.svg)
|
4
4
|
|
5
5
|
A small utility designed to be used alongside [Dry::Monads::Result](https://dry-rb.org/gems/dry-monads/) to repeatedly attempt an operation sleeping between failed attempts.
|
6
6
|
|
@@ -22,7 +22,7 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
Without any arguments given to the constructor a basic
|
25
|
+
Without any arguments given to the constructor a basic backoff interval (2, 4, 8, 16 to be precise) is used with `sleep` being used to wait, as a nicety this is available as `.attempt`:
|
26
26
|
|
27
27
|
```ruby
|
28
28
|
# Shortcut for: ThereWasAnAttempt.new.attempt
|
data/lib/there_was_an_attempt.rb
CHANGED
@@ -3,12 +3,22 @@
|
|
3
3
|
require 'there_was_an_attempt/version'
|
4
4
|
|
5
5
|
class ThereWasAnAttempt
|
6
|
-
|
7
|
-
|
6
|
+
module Intervals
|
7
|
+
DEFAULT = [2, 4, 8, 16].freeze
|
8
|
+
end
|
9
|
+
|
10
|
+
module Wait
|
11
|
+
WITH_SLEEP = ->(seconds) { sleep(seconds) }.freeze
|
12
|
+
end
|
8
13
|
|
9
|
-
|
14
|
+
module Reattempt
|
15
|
+
ALWAYS = -> (failure) { true }.freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize(intervals: Intervals::DEFAULT, wait: Wait::WITH_SLEEP, reattempt: Reattempt::ALWAYS)
|
10
19
|
@intervals = intervals
|
11
20
|
@wait = wait
|
21
|
+
@reattempt = reattempt
|
12
22
|
end
|
13
23
|
|
14
24
|
def self.attempt(&block)
|
@@ -18,7 +28,7 @@ class ThereWasAnAttempt
|
|
18
28
|
def attempt(&block)
|
19
29
|
@intervals.map do |seconds|
|
20
30
|
result = block.call
|
21
|
-
break [result] if result.success?
|
31
|
+
break [result] if result.success? || !reattempt?(result.failure)
|
22
32
|
|
23
33
|
result.or { |failure| wait(seconds); Dry::Monads::Failure(failure) }
|
24
34
|
end.last
|
@@ -29,4 +39,8 @@ class ThereWasAnAttempt
|
|
29
39
|
def wait(seconds)
|
30
40
|
@wait.call(seconds)
|
31
41
|
end
|
42
|
+
|
43
|
+
def reattempt?(failure)
|
44
|
+
@reattempt.call(failure)
|
45
|
+
end
|
32
46
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: there_was_an_attempt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Giles
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-monads
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '3.0'
|
69
|
-
description:
|
69
|
+
description:
|
70
70
|
email:
|
71
71
|
- sam@samuelgil.es
|
72
72
|
executables: []
|
@@ -92,7 +92,7 @@ metadata:
|
|
92
92
|
homepage_uri: https://github.com/samuelgiles/there_was_an_attempt
|
93
93
|
source_code_uri: https://github.com/samuelgiles/there_was_an_attempt
|
94
94
|
changelog_uri: https://github.com/samuelgiles/there_was_an_attempt/blob/master/CHANGELOG.md
|
95
|
-
post_install_message:
|
95
|
+
post_install_message:
|
96
96
|
rdoc_options: []
|
97
97
|
require_paths:
|
98
98
|
- lib
|
@@ -108,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
108
|
version: '0'
|
109
109
|
requirements: []
|
110
110
|
rubygems_version: 3.0.3
|
111
|
-
signing_key:
|
111
|
+
signing_key:
|
112
112
|
specification_version: 4
|
113
113
|
summary: A small utility to repeatedly attempt an operation sleeping between failed
|
114
114
|
attempts.
|