retriable 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1b752911d256dced83d90ff384285f521001fd21
4
- data.tar.gz: bc8abdb30075bfe7948bff5e2a7ddec0cdeb62ac
3
+ metadata.gz: 8d49b14baf33d9680297e0deeffaa6f4151eee60
4
+ data.tar.gz: 16c3c0a85a0ecf4ba880d9a24d51469940a21e1c
5
5
  SHA512:
6
- metadata.gz: b564835a63aa4d7e890cc0417d55132a8124070b92747074d9c5795daf28d2cc896cdc887e1da31b6176ee4061a83c9513b47dc15171f1332c1b0f40d4f59752
7
- data.tar.gz: 7560dac587dfc6556602117c3f698ce2a7e52ef00f465e9a1dc871e7faf8a764d220a6ef8a34fb16dd2a45c278c9965043664cec4d300bf6a508bbd4d121480a
6
+ metadata.gz: 7f5f5189eeddd4b00048a49a706e1ac76d3c9e3487d565bbaed482b45264b1a9d9d24ff3688d7d2939fd4996657836d476b6298238a21d1f485b29c9767395e7
7
+ data.tar.gz: ca03e49b50e5f33eb0954de07fb0af1358abe3e595936684e91cd394c6397bd08f290ea6c7abd08c76e69564c0e6eba6dd524b2b295ed365724f203c61ef527f
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 1.9.3
3
4
  - 2.0.0
4
5
  - 2.1.5
5
6
  - 2.2.0
@@ -9,6 +10,7 @@ rvm:
9
10
 
10
11
  matrix:
11
12
  allow_failures:
13
+ - rvm: 1.9.3
12
14
  - rvm: ruby-head
13
15
  - rvm: jruby-head
14
16
 
@@ -1,13 +1,28 @@
1
1
  ## HEAD
2
2
 
3
- * Require ruby 2.0.0 minimum in gemspec.
3
+ ## 2.0.1
4
+
5
+ * Add support for ruby 1.9.3.
6
+
7
+ ## 2.0.0
8
+
9
+ * Require ruby 2.0+.
10
+ * Time intervals default to randomized exponential backoff instead of fixed time intervals. The delay between retries grows with every attempt and there's a randomization factor added to each attempt.
11
+ * `base_interval`, `max_interval`, `rand_factor`, and `multiplier` are new arguments that are used to generate randomized exponential back off time intervals.
12
+ * `interval` argument removed.
13
+ * Accept `intervals` array argument to provide your own custom intervals.
14
+ * Allow configurable defaults via `Retriable#configure` block.
15
+ * Add ability for `:on` argument to accept a `Hash` where the keys are exception types and the values are a single or array of `Regexp` pattern(s) to match against exception messages for retrial.
16
+ * Raise, not return, on max elapsed time.
17
+ * Check for elapsed time after next interval is calculated and it goes over the max elapsed time.
18
+ * Support early termination via `max_elapsed_time` argument.
4
19
 
5
20
  ## 2.0.0.beta5
6
21
  * Change `:max_tries` back to `:tries`.
7
22
 
8
23
  ## 2.0.0.beta4
9
24
  * Change #retry back to #retriable. Didn't like the idea of defining a method that is also a reserved word.
10
- * Add ability for `:on` argument to accept a `Hash` where the keys are exception types and the values are a single or list of `Regexp` pattern(s) to match against exception messages for retrial.
25
+ * Add ability for `:on` argument to accept a `Hash` where the keys are exception types and the values are a single or array of `Regexp` pattern(s) to match against exception messages for retrial.
11
26
 
12
27
  ## 2.0.0.beta3
13
28
  * Accept `intervals` array argument to provide your own custom intervals.
@@ -15,15 +30,16 @@
15
30
  * Add specs for exponential backoff, randomization, and config.
16
31
 
17
32
  ## 2.0.0.beta2
18
- * Raise not return on max elapsed time, also check for elapsed time after next interval is calculated and it goes over the max elapsed time.
33
+ * Raise, not return, on max elapsed time.
34
+ * Check for elapsed time after next interval is calculated and it goes over the max elapsed time.
19
35
  * Add specs for `max_elapsed_time` and `max_interval`.
20
36
 
21
37
  ## 2.0.0.beta1
22
38
  * Require ruby 2.0+.
23
39
  * Default to random exponential backoff, removes the `interval` option. Exponential backoff is configurable via arguments.
24
- * Allow configurable defaults via `#configure`.
40
+ * Allow configurable defaults via `Retriable#configure` block.
25
41
  * Change `Retriable.retriable` to `Retriable.retry`.
26
- * Support `max_elapsed_time` termination.
42
+ * Support early termination via `max_elapsed_time` argument.
27
43
 
28
44
  ## 1.4.1
29
45
  * Fixes non kernel mode bug. Remove DSL class, move `#retriable` into Retriable module. Thanks @mkrogemann.
data/README.md CHANGED
@@ -8,9 +8,11 @@ Retriable is an simple DSL to retry failed code blocks with randomized [exponent
8
8
 
9
9
  ## Requirements
10
10
 
11
- Ruby 2.0+
11
+ Ruby 1.9.3+
12
12
 
13
- If you need 1.9.x support, use the [1.x branch](https://github.com/kamui/retriable/tree/1.x).
13
+ If you need ruby 1.8.x to 1.9.2 support, use the [1.x branch](https://github.com/kamui/retriable/tree/1.x).
14
+
15
+ There's a [1.x to 2.x migration wiki entry](https://github.com/kamui/retriable/wiki/Migrating-to-2.x) available.
14
16
 
15
17
  WARNING: 2.x isn't API compatible with 1.x.
16
18
 
@@ -161,10 +163,22 @@ end
161
163
 
162
164
  ### Turn off Exponential Backoff
163
165
 
164
- Exponential backoff is enabled by default, if you want to simply execute code every second, you can do this:
166
+ Exponential backoff is enabled by default, if you want to simply retry code every second, 5 times maximum, you can do this:
165
167
 
166
168
  ```ruby
167
- Retriable.retriable base_interval: 1.0, multiplier: 1.0, rand_factor: 0.0 do
169
+ Retriable.retriable tries: 5, base_interval: 1.0, multiplier: 1.0, rand_factor: 0.0 do
170
+ # code here...
171
+ end
172
+ ```
173
+
174
+ This works by starting at a 1 second interval (`base_interval`), setting the `multipler` to 1.0 means each subsequent try will increase 1x, which is still `1.0` seconds, and then a `rand_factor` of 0.0 means that there's no randomization of that interval. By default, it would randomize 0.25 seconds, which would mean normally the intervals would randomize between 0.75 and 1.25 seconds, but in this case `rand_factor` is basically being disabled.
175
+
176
+ Another way to accomplish this would be to create an array with a fixed interval. In this example, `Array.new(5, 1)` creates an array with 5 elements, all with the value 1. The code block will retry up to 5 times, and wait 1 second between each attempt.
177
+
178
+ ```ruby
179
+ # Array.new(5, 1) # => [1, 1, 1, 1, 1]
180
+
181
+ Retriable.retriable intervals: Array.new(5, 1) do
168
182
  # code here...
169
183
  end
170
184
  ```
@@ -236,4 +250,4 @@ end
236
250
 
237
251
  ## Credits
238
252
 
239
- Retriable was originally forked from the retryable-rb gem by [Robert Sosinski](https://github.com/robertsosinski), which in turn originally inspired by code written by [Michael Celona](http://github.com/mcelona) and later assisted by [David Malin](http://github.com/dmalin). The [attempt](https://rubygems.org/gems/attempt) gem by Daniel J. Berger was also an inspiration.
253
+ The randomized exponetial backoff implementation was inspired by the one used in Google's [google-http-java-client](https://code.google.com/p/google-http-java-client/wiki/ExponentialBackoff) project.
@@ -16,18 +16,17 @@ module Retriable
16
16
  @config ||= Config.new
17
17
  end
18
18
 
19
- def retriable(
20
- tries: config.tries,
21
- base_interval: config.base_interval,
22
- max_interval: config.max_interval,
23
- rand_factor: config.rand_factor,
24
- multiplier: config.multiplier,
25
- max_elapsed_time: config.max_elapsed_time,
26
- intervals: config.intervals,
27
- timeout: config.timeout,
28
- on: config.on,
29
- on_retry: config.on_retry
30
- )
19
+ def retriable(opts = {})
20
+ tries = opts[:tries] || config.tries
21
+ base_interval = opts[:base_interval] || config.base_interval
22
+ max_interval = opts[:max_interval] || config.max_interval
23
+ rand_factor = opts[:rand_factor] || config.rand_factor
24
+ multiplier = opts[:multiplier] || config.multiplier
25
+ max_elapsed_time = opts[:max_elapsed_time] || config.max_elapsed_time
26
+ intervals = opts[:intervals] || config.intervals
27
+ timeout = opts[:timeout] || config.timeout
28
+ on = opts[:on] || config.on
29
+ on_retry = opts[:on_retry] || config.on_retry
31
30
 
32
31
  start_time = Time.now
33
32
  elapsed_time = -> { Time.now - start_time }
@@ -1,7 +1,7 @@
1
1
  require "retriable"
2
2
 
3
3
  module Kernel
4
- def retriable(opts={}, &block)
4
+ def retriable(opts = {}, &block)
5
5
  Retriable.retriable(opts, &block)
6
6
  end
7
7
  end
@@ -6,19 +6,12 @@ module Retriable
6
6
  attr_accessor :max_interval
7
7
  attr_accessor :rand_factor
8
8
 
9
- def initialize(
10
- tries: Retriable.config.tries,
11
- base_interval: Retriable.config.base_interval,
12
- multiplier: Retriable.config.multiplier,
13
- max_interval: Retriable.config.max_interval,
14
- rand_factor: Retriable.config.rand_factor
15
- )
16
-
17
- @tries = tries
18
- @base_interval = base_interval
19
- @multiplier = multiplier
20
- @max_interval = max_interval
21
- @rand_factor = rand_factor
9
+ def initialize(opts = {})
10
+ @tries = opts[:tries] || Retriable.config.tries
11
+ @base_interval = opts[:base_interval] || Retriable.config.base_interval
12
+ @max_interval = opts[:max_interval] || Retriable.config.max_interval
13
+ @rand_factor = opts[:rand_factor] || Retriable.config.rand_factor
14
+ @multiplier = opts[:multiplier] || Retriable.config.multiplier
22
15
  end
23
16
 
24
17
  def intervals
@@ -1,3 +1,3 @@
1
1
  module Retriable
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
@@ -22,9 +22,9 @@ Gem::Specification.new do |spec|
22
22
  spec.required_ruby_version = '>= 2.0.0'
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.7"
25
- spec.add_development_dependency "rake", "~> 10.0"
25
+ spec.add_development_dependency "rake", "~> 10.4"
26
26
 
27
- spec.add_development_dependency "minitest", "~> 5.4"
27
+ spec.add_development_dependency "minitest", "~> 5.5"
28
28
  spec.add_development_dependency "guard"
29
29
  spec.add_development_dependency "guard-minitest"
30
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retriable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Chu
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '10.4'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '10.4'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '5.4'
47
+ version: '5.5'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '5.4'
54
+ version: '5.5'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: guard
57
57
  requirement: !ruby/object:Gem::Requirement