retriable 2.0.0.beta2 → 2.0.0.beta3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b252298dcbaede9a87149f78cec0c067742b1167
4
- data.tar.gz: b58875b898c832a5bd8ae3fd20d2eb62f80c7f84
3
+ metadata.gz: e3b8d447babc7584997f6e2756375d2d48d3b4dc
4
+ data.tar.gz: 3c14a6becbd1708ee8dc4f2cb83c10fb74489141
5
5
  SHA512:
6
- metadata.gz: e216f86b87a3526982647c8a2c6d8733eb7c9e3f4e7a262f3f38ead6d36bd4bd3c494ef22409cdf06e195de23360eb6d5f12cfa1c4c0de2492c03c49f17fe005
7
- data.tar.gz: 43505f1550318db78adcb85dd1c023280ca9b7be802ec3a331e56ae094648a9fcfd2b5879bfc90ddf840e13a3ce29e96c28e7a33cb5e12abaddf89f9a32f82c7
6
+ metadata.gz: f04b74b90611da941a4bf425ef06383aa9140043d8b32bebec64fab29d2445db0819be5c1a40e135dee0ff0289c5c56a7061793fd46b1a307bcfc6ade287e5d7
7
+ data.tar.gz: 18282a856bb96a2dd2b32a564ab2093c3620c09a38f95fdc58054084e4410626ecf18daf2a8f275a81d7893d02b0cac06e0a3cba8f818d90c3388866ff62dbc6
data/CHANGELOG.md CHANGED
@@ -1,12 +1,17 @@
1
+ ## 2.0.0.beta3
2
+ * Accept `intervals` array argument to provide your own custom intervals.
3
+ * Refactor the exponential backoff code into it's own class.
4
+ * Add specs for exponential backoff, randomization, and config.
5
+
1
6
  ## 2.0.0.beta2
2
- * 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
3
- * Add specs for max_elapsed_time and max_interval
7
+ * 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.
8
+ * Add specs for `max_elapsed_time` and `max_interval`.
4
9
 
5
10
  ## 2.0.0.beta1
6
11
  * Require ruby 2.0+.
7
12
  * Default to random exponential backoff, removes the `interval` option. Exponential backoff is configurable via arguments.
8
13
  * Allow configurable defaults via `#configure`.
9
- * Change `Retriable.retriable` to `Retriable.retry`
14
+ * Change `Retriable.retriable` to `Retriable.retry`.
10
15
  * Support `max_elapsed_time` termination.
11
16
 
12
17
  ## 1.4.1
data/README.md CHANGED
@@ -10,6 +10,8 @@ Ruby 2.0+
10
10
 
11
11
  If you need 1.9.x support, use the [1.x branch](https://github.com/kamui/retriable/tree/1.x).
12
12
 
13
+ WARNING: 2.x isn't API compatible with 1.x.
14
+
13
15
  ## Installation
14
16
 
15
17
  via command line:
@@ -80,6 +82,8 @@ randomized_interval = retry_interval * (random value in range [1 - randomization
80
82
 
81
83
  `max_elapsed_time` (default: 900 (15 min)) - The maximum amount of total time that code is allowed to keep being retried
82
84
 
85
+ `intervals` (default: nil) - Skip generated intervals and provide your own array of intervals in seconds. Setting this option will ignore `max_tries`, `base_interval`, `max_interval`, `rand_factor`, and `multiplier` values.
86
+
83
87
  `timeout` (default: 0) - Number of seconds to allow the code block to run before raising a Timeout::Error
84
88
 
85
89
  `on` (default: [StandardError]) - An array of exceptions to rescue for each attempt, also accepts a single Exception type
@@ -131,6 +135,16 @@ Retriable.retry base_interval: (200/1000.0), timeout: (500/1000.0) do
131
135
  end
132
136
  ```
133
137
 
138
+ ### Custom Interval Array
139
+
140
+ You can also bypass the built-in interval generation and provide your own array of intervals. Supplying your own intervals overrides the `max_tries`, `base_interval`, `max_interval`, `rand_factor`, and `multiplier` parameters.
141
+
142
+ ```ruby
143
+ Retriable.retry intervals: [0.5, 1.0, 2.0, 2.5] do
144
+ # code here...
145
+ end
146
+ ```
147
+
134
148
  ### Turn off Exponential Backoff
135
149
 
136
150
  Exponential backoff is enabled by default, if you want to simply execute code every second, you can do this:
data/Rakefile CHANGED
@@ -1,16 +1,16 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'bundler'
3
+ require "bundler"
4
4
  Bundler::GemHelper.install_tasks
5
5
 
6
- require 'rake/testtask'
6
+ require "rake/testtask"
7
7
  task default: :test
8
8
 
9
9
  desc "Run tests"
10
10
  task :test do
11
11
  Rake::TestTask.new do |t|
12
- t.libs << 'lib' << 'spec'
13
- t.pattern = 'spec/**/*_spec.rb'
12
+ t.libs << "lib" << "spec"
13
+ t.pattern = "spec/**/*_spec.rb"
14
14
  t.verbose = true
15
15
  end
16
16
  end
data/lib/retriable.rb CHANGED
@@ -1,17 +1,21 @@
1
- require 'timeout'
2
- require 'retriable/config'
3
- require 'retriable/version'
1
+ require "timeout"
2
+ require "retriable/config"
3
+ require "retriable/exponential_backoff"
4
+ require "retriable/version"
4
5
 
5
6
  module Retriable
6
7
  extend self
7
8
 
8
- attr_accessor :config
9
+ attr_reader :config
9
10
 
10
11
  def self.configure
11
- self.config ||= Config.new
12
12
  yield(config)
13
13
  end
14
14
 
15
+ def config
16
+ @config ||= Config.new
17
+ end
18
+
15
19
  def retry(
16
20
  max_tries: config.max_tries,
17
21
  base_interval: config.base_interval,
@@ -19,52 +23,39 @@ module Retriable
19
23
  rand_factor: config.rand_factor,
20
24
  multiplier: config.multiplier,
21
25
  max_elapsed_time: config.max_elapsed_time,
26
+ intervals: config.intervals,
22
27
  timeout: config.timeout,
23
28
  on: config.on,
24
29
  on_retry: config.on_retry,
25
- &block)
30
+ &block
31
+ )
26
32
 
27
33
  raise LocalJumpError unless block_given?
28
34
 
29
- attempt = 0
30
- interval = base_interval
31
35
  start_time = Time.now
32
- elapsed_time = lambda { Time.now - start_time }
33
-
34
- begin
35
- attempt += 1
36
- if timeout
37
- Timeout::timeout(timeout) { return block.call(attempt) }
38
- else
39
- return block.call(attempt)
40
- end
41
- rescue *[*on] => exception
42
- raise if attempt >= max_tries
43
-
44
- interval = randomized_interval(rand_factor, interval)
45
-
46
- on_retry.call(exception, attempt, Time.now - start_time, interval) if on_retry
47
-
48
- raise if elapsed_time.call > max_elapsed_time || (elapsed_time.call + interval) > max_elapsed_time
49
-
50
- sleep interval if interval > 0 && config.sleep_disabled != true
51
-
52
- interval = if interval >= (max_interval / multiplier)
53
- max_interval
54
- else
55
- interval * multiplier
36
+ elapsed_time = -> { Time.now - start_time }
37
+
38
+ max_tries = intervals.size if intervals
39
+ intervals ||= ExponentialBackoff.new(
40
+ max_tries: max_tries,
41
+ base_interval: base_interval,
42
+ multiplier: multiplier,
43
+ max_interval: max_interval,
44
+ rand_factor: rand_factor
45
+ ).intervals
46
+
47
+ intervals.each.with_index(1) do |interval, attempt|
48
+ begin
49
+ if timeout
50
+ Timeout::timeout(timeout) { return block.call(attempt) }
51
+ else
52
+ return block.call(attempt)
53
+ end
54
+ rescue *[*on] => exception
55
+ on_retry.call(exception, attempt, Time.now - start_time, interval) if on_retry
56
+ raise if attempt >= max_tries || (elapsed_time.call + interval) > max_elapsed_time
57
+ sleep interval if interval > 0 && config.sleep_disabled != true
56
58
  end
57
-
58
- retry
59
59
  end
60
60
  end
61
-
62
- private
63
- def randomized_interval(rand_factor, interval)
64
- return interval if rand_factor == 0
65
- delta = rand_factor * interval * 1.0
66
- min_interval = interval - delta
67
- max_interval = interval + delta
68
- rand(min_interval..max_interval)
69
- end
70
61
  end
@@ -7,6 +7,7 @@ module Retriable
7
7
  attr_accessor :rand_factor
8
8
  attr_accessor :multiplier
9
9
  attr_accessor :max_elapsed_time
10
+ attr_accessor :intervals
10
11
  attr_accessor :timeout
11
12
  attr_accessor :on
12
13
  attr_accessor :on_retry
@@ -19,6 +20,7 @@ module Retriable
19
20
  @rand_factor = 0.5
20
21
  @multiplier = 1.5
21
22
  @max_elapsed_time = 900 # 15 minn
23
+ @intervals = nil
22
24
  @timeout = nil
23
25
  @on = [StandardError]
24
26
  @on_retry = nil
@@ -1,4 +1,4 @@
1
- require 'retriable'
1
+ require "retriable"
2
2
 
3
3
  module Kernel
4
4
  def retriable(opts={}, &block)
@@ -0,0 +1,39 @@
1
+ module Retriable
2
+ class ExponentialBackoff
3
+ attr_accessor :max_tries, :base_interval, :multiplier, :max_interval, :rand_factor
4
+
5
+ def initialize(
6
+ max_tries: Retriable.config.max_tries,
7
+ base_interval: Retriable.config.base_interval,
8
+ multiplier: Retriable.config.multiplier,
9
+ max_interval: Retriable.config.max_interval,
10
+ rand_factor: Retriable.config.rand_factor
11
+ )
12
+
13
+ @max_tries = max_tries
14
+ @base_interval = base_interval
15
+ @multiplier = multiplier
16
+ @max_interval = max_interval
17
+ @rand_factor = rand_factor
18
+ end
19
+
20
+ def intervals
21
+ intervals = Array.new(max_tries) do |iteration|
22
+ [base_interval * multiplier ** iteration, max_interval].min
23
+ end
24
+
25
+ return intervals if rand_factor == 0
26
+
27
+ intervals.map { |i| randomize(i) }
28
+ end
29
+
30
+ protected
31
+ def randomize(interval)
32
+ return interval if rand_factor == 0
33
+ delta = rand_factor * interval * 1.0
34
+ min_interval = interval - delta
35
+ max_interval = interval + delta
36
+ rand(min_interval..max_interval)
37
+ end
38
+ end
39
+ end
@@ -1,3 +1,3 @@
1
1
  module Retriable
2
- VERSION = '2.0.0.beta2'
2
+ VERSION = "2.0.0.beta3"
3
3
  end
data/retriable.gemspec CHANGED
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require "retriable/version"
5
5
 
@@ -22,10 +22,10 @@ Gem::Specification.new do |s|
22
22
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
23
  s.require_paths = ["lib"]
24
24
 
25
- s.add_development_dependency 'rake'
26
- s.add_development_dependency 'minitest', '>= 5.0'
27
- s.add_development_dependency 'minitest-focus'
28
- s.add_development_dependency 'pry'
29
- s.add_development_dependency 'guard'
30
- s.add_development_dependency 'guard-minitest'
25
+ s.add_development_dependency "rake"
26
+ s.add_development_dependency "minitest", ">= 5.0"
27
+ s.add_development_dependency "minitest-focus"
28
+ s.add_development_dependency "pry"
29
+ s.add_development_dependency "guard"
30
+ s.add_development_dependency "guard-minitest"
31
31
  end
@@ -0,0 +1,47 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe Retriable::Config do
4
+ subject do
5
+ Retriable::Config
6
+ end
7
+
8
+ it "sleep defaults to enabled" do
9
+ subject.new.sleep_disabled.must_equal false
10
+ end
11
+
12
+ it "max tries defaults to 3" do
13
+ subject.new.max_tries.must_equal 3
14
+ end
15
+
16
+ it "max interval defaults to 60" do
17
+ subject.new.max_interval.must_equal 60
18
+ end
19
+
20
+ it "randomization factor defaults to 0.5" do
21
+ subject.new.base_interval.must_equal 0.5
22
+ end
23
+
24
+ it "multiplier defaults to 1.5" do
25
+ subject.new.multiplier.must_equal 1.5
26
+ end
27
+
28
+ it "max elapsed time defaults to 900" do
29
+ subject.new.max_elapsed_time.must_equal 900
30
+ end
31
+
32
+ it "intervals defaults to nil" do
33
+ subject.new.intervals.must_be_nil
34
+ end
35
+
36
+ it "timeout defaults to nil" do
37
+ subject.new.timeout.must_be_nil
38
+ end
39
+
40
+ it "on defaults to [StandardError]" do
41
+ subject.new.on.must_equal [StandardError]
42
+ end
43
+
44
+ it "on retry handler defaults to nil" do
45
+ subject.new.on_retry.must_be_nil
46
+ end
47
+ end
@@ -0,0 +1,49 @@
1
+ require_relative "spec_helper"
2
+
3
+ describe Retriable::ExponentialBackoff do
4
+ subject do
5
+ Retriable::ExponentialBackoff
6
+ end
7
+
8
+ it "max tries defaults to 3" do
9
+ subject.new.max_tries.must_equal 3
10
+ end
11
+
12
+ it "max interval defaults to 60" do
13
+ subject.new.max_interval.must_equal 60
14
+ end
15
+
16
+ it "randomization factor defaults to 0.5" do
17
+ subject.new.base_interval.must_equal 0.5
18
+ end
19
+
20
+ it "multiplier defaults to 1.5" do
21
+ subject.new.multiplier.must_equal 1.5
22
+ end
23
+
24
+ it "generates randomized intervals" do
25
+ i = subject.new(max_tries: 9).intervals
26
+ i[0].between?(0.25, 0.75).must_equal true
27
+ i[1].between?(0.375, 1.125).must_equal true
28
+ i[2].between?(0.562, 1.687).must_equal true
29
+ i[3].between?(0.8435, 2.53).must_equal true
30
+ i[4].between?(1.265, 3.795).must_equal true
31
+ i[5].between?(1.897, 5.692).must_equal true
32
+ i[6].between?(2.846, 8.538).must_equal true
33
+ i[7].between?(4.269, 12.807).must_equal true
34
+ i[8].between?(6.403, 19.210).must_equal true
35
+ end
36
+
37
+ it "generates 5 non-randomized intervals" do
38
+ subject.new(
39
+ max_tries: 5,
40
+ rand_factor: 0.0
41
+ ).intervals.must_equal([
42
+ 0.5,
43
+ 0.75,
44
+ 1.125,
45
+ 1.6875,
46
+ 2.53125
47
+ ])
48
+ end
49
+ end
@@ -1,4 +1,4 @@
1
- require_relative 'spec_helper'
1
+ require_relative "spec_helper"
2
2
 
3
3
  class TestError < Exception; end
4
4
 
@@ -7,20 +7,29 @@ describe Retriable do
7
7
  Retriable
8
8
  end
9
9
 
10
- describe 'with sleep disabled' do
10
+ describe "with sleep disabled" do
11
11
  before do
12
12
  Retriable.configure do |c|
13
13
  c.sleep_disabled = true
14
14
  end
15
15
  end
16
16
 
17
- it 'raises a LocalJumpError if retry is not given a block' do
18
- lambda do
17
+ it "stops at first attempt if the block does not raise an exception" do
18
+ attempts = 0
19
+ subject.retry do
20
+ attempts += 1
21
+ end
22
+
23
+ attempts.must_equal 1
24
+ end
25
+
26
+ it "raises a LocalJumpError if retry is not given a block" do
27
+ -> do
19
28
  subject.retry on: EOFError
20
29
  end.must_raise LocalJumpError
21
30
  end
22
31
 
23
- describe 'retry block of code raising EOFError with no arguments' do
32
+ describe "retry block of code raising EOFError with no arguments" do
24
33
  before do
25
34
  @attempts = 0
26
35
 
@@ -30,20 +39,20 @@ describe Retriable do
30
39
  end
31
40
  end
32
41
 
33
- it 'uses exponential backoff' do
42
+ it "uses exponential backoff" do
34
43
  @attempts.must_equal 3
35
44
  end
36
45
  end
37
46
 
38
- it 'retry on custom exception and re-raises the exception' do
39
- lambda do
47
+ it "retry on custom exception and re-raises the exception" do
48
+ -> do
40
49
  subject.retry on: TestError do
41
50
  raise TestError.new
42
51
  end
43
52
  end.must_raise TestError
44
53
  end
45
54
 
46
- it 'retry with 10 max tries' do
55
+ it "retry with 10 max tries" do
47
56
  attempts = 0
48
57
 
49
58
  subject.retry(
@@ -56,21 +65,53 @@ describe Retriable do
56
65
  attempts.must_equal 10
57
66
  end
58
67
 
59
- it 'retry will timeout after 1 second' do
60
- lambda do
68
+ it "retry will timeout after 1 second" do
69
+ -> do
61
70
  subject.retry timeout: 1 do
62
71
  sleep 2
63
72
  end
64
73
  end.must_raise Timeout::Error
65
74
  end
66
75
 
67
- describe 'retries with an on_retry handler, 6 max retries, and a 0.0 rand_factor' do
76
+ it "applies a randomized exponential backoff to each attempt" do
77
+ @attempts = 0
78
+ @time_table = {}
79
+
80
+ handler = ->(exception, attempt, elapsed_time, next_interval) do
81
+ exception.class.must_equal ArgumentError
82
+ @time_table[attempt] = next_interval
83
+ end
84
+
85
+ -> do
86
+ Retriable.retry(
87
+ on: [EOFError, ArgumentError],
88
+ on_retry: handler,
89
+ rand_factor: 0.0,
90
+ max_tries: 9
91
+ ) do
92
+ @attempts += 1
93
+ raise ArgumentError.new
94
+ end
95
+ end.must_raise ArgumentError
96
+
97
+ @time_table[1].between?(0.25, 0.75).must_equal true
98
+ @time_table[2].between?(0.375, 1.125).must_equal true
99
+ @time_table[3].between?(0.562, 1.687).must_equal true
100
+ @time_table[4].between?(0.8435, 2.53).must_equal true
101
+ @time_table[5].between?(1.265, 3.795).must_equal true
102
+ @time_table[6].between?(1.897, 5.692).must_equal true
103
+ @time_table[7].between?(2.846, 8.538).must_equal true
104
+ @time_table[8].between?(4.269, 12.807).must_equal true
105
+ @time_table[9].between?(6.403, 19.210).must_equal true
106
+ end
107
+
108
+ describe "retries with an on_retry handler, 6 max retries, and a 0.0 rand_factor" do
68
109
  before do
69
110
  max_tries = 6
70
111
  @attempts = 0
71
112
  @time_table = {}
72
113
 
73
- handler = Proc.new do |exception, attempt, elapsed_time, next_interval|
114
+ handler = ->(exception, attempt, elapsed_time, next_interval) do
74
115
  exception.class.must_equal ArgumentError
75
116
  @time_table[attempt] = next_interval
76
117
  end
@@ -86,11 +127,11 @@ describe Retriable do
86
127
  end
87
128
  end
88
129
 
89
- it 'makes 6 attempts' do
130
+ it "makes 6 attempts" do
90
131
  @attempts.must_equal 6
91
132
  end
92
133
 
93
- it 'applies a non-randomized exponential backoff to each attempt' do
134
+ it "applies a non-randomized exponential backoff to each attempt" do
94
135
  @time_table.must_equal({
95
136
  1 => 0.5,
96
137
  2 => 0.75,
@@ -101,12 +142,12 @@ describe Retriable do
101
142
  end
102
143
  end
103
144
 
104
- it 'retry has a max interval of 1.5 seconds' do
145
+ it "retry has a max interval of 1.5 seconds" do
105
146
  max_tries = 6
106
147
  attempts = 0
107
148
  time_table = {}
108
149
 
109
- handler = Proc.new do |exception, attempt, elapsed_time, next_interval|
150
+ handler = ->(exception, attempt, elapsed_time, next_interval) do
110
151
  time_table[attempt] = next_interval
111
152
  end
112
153
 
@@ -130,14 +171,47 @@ describe Retriable do
130
171
  })
131
172
  end
132
173
 
133
- it 'can call #retriable in the global' do
134
- lambda do
174
+ it "retries with defined intervals" do
175
+ intervals = [
176
+ 0.5,
177
+ 0.75,
178
+ 1.125,
179
+ 1.5,
180
+ 1.5
181
+ ]
182
+ time_table = {}
183
+
184
+ handler = ->(exception, attempt, elapsed_time, next_interval) do
185
+ time_table[attempt] = next_interval
186
+ end
187
+
188
+ -> do
189
+ subject.retry(
190
+ on: EOFError,
191
+ on_retry: handler,
192
+ intervals: intervals
193
+ ) do
194
+ raise EOFError.new
195
+ end
196
+ end.must_raise EOFError
197
+
198
+ time_table.must_equal({
199
+ 1 => 0.5,
200
+ 2 => 0.75,
201
+ 3 => 1.125,
202
+ 4 => 1.5,
203
+ 5 => 1.5
204
+ })
205
+ end
206
+
207
+ it "can call #retriable in the global" do
208
+ -> do
135
209
  retriable do
136
- puts 'should raise NoMethodError'
210
+ puts "should raise NoMethodError"
137
211
  end
138
212
  end.must_raise NoMethodError
139
213
 
140
- require_relative '../lib/retriable/core_ext/kernel'
214
+ require_relative "../lib/retriable/core_ext/kernel"
141
215
 
142
216
  i = 0
143
217
  retriable do
@@ -148,7 +222,7 @@ describe Retriable do
148
222
  end
149
223
  end
150
224
 
151
- it 'retry runs for a max elapsed time of 2 seconds' do
225
+ it "retry runs for a max elapsed time of 2 seconds" do
152
226
  subject.configure do |c|
153
227
  c.sleep_disabled = false
154
228
  end
@@ -158,11 +232,11 @@ describe Retriable do
158
232
  attempts = 0
159
233
  time_table = {}
160
234
 
161
- handler = Proc.new do |exception, attempt, elapsed_time, next_interval|
235
+ handler = ->(exception, attempt, elapsed_time, next_interval) do
162
236
  time_table[attempt] = elapsed_time
163
237
  end
164
238
 
165
- lambda do
239
+ -> do
166
240
  subject.retry(
167
241
  base_interval: 1.0,
168
242
  multiplier: 1.0,
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'minitest/autorun'
2
- require 'minitest/focus'
3
- require 'pry'
1
+ require "minitest/autorun"
2
+ require "minitest/focus"
3
+ require "pry"
4
4
 
5
- require_relative '../lib/retriable'
5
+ require_relative "../lib/retriable"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: retriable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta2
4
+ version: 2.0.0.beta3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jack Chu
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-25 00:00:00.000000000 Z
11
+ date: 2014-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -113,8 +113,11 @@ files:
113
113
  - lib/retriable.rb
114
114
  - lib/retriable/config.rb
115
115
  - lib/retriable/core_ext/kernel.rb
116
+ - lib/retriable/exponential_backoff.rb
116
117
  - lib/retriable/version.rb
117
118
  - retriable.gemspec
119
+ - spec/config_spec.rb
120
+ - spec/exponential_backoff_spec.rb
118
121
  - spec/retriable_spec.rb
119
122
  - spec/spec_helper.rb
120
123
  - wercker.yml
@@ -144,5 +147,7 @@ specification_version: 4
144
147
  summary: Retriable is an simple DSL to retry failed code blocks with randomized exponential
145
148
  backoff
146
149
  test_files:
150
+ - spec/config_spec.rb
151
+ - spec/exponential_backoff_spec.rb
147
152
  - spec/retriable_spec.rb
148
153
  - spec/spec_helper.rb