attempt_this 1.0.0 → 1.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: bb1e8ce9d65d7e2fd649b08462f7fec5d5c275bd
4
- data.tar.gz: 42f3dfabe605a339c8f0abaa32db1e93ee130532
3
+ metadata.gz: fa826f48090801a88909e9e8c6dc318efd26c95b
4
+ data.tar.gz: 2a781b4b14bf8156258a71a0b6742ed876463cda
5
5
  SHA512:
6
- metadata.gz: 67d984ccaa89933fefd5fc20358c11750baaecc56f47ba10625deac47312d8d9a46a9c41b36803461d7b6b0a6150dceec8addf7ef57dfbb7f352fa3aabcea597
7
- data.tar.gz: cf0c8ab119c22978d0328d930b05e34e54f89ea57b4d15b4af4c7597f068b04245ff68efdea4fe07816756eaa2c35280f648ec1f13be7c122507165aa09b18ef
6
+ metadata.gz: c6a9860fd483413ca05d4cb0b95e6816dc3d7f77474920ff260b014372d41999e5ffaa6ebbdcf9ec62d857e6148a4ec398af48bf918aae03f9e498287d86bab2
7
+ data.tar.gz: d2d28cfc7ff30dfdd300ec4b36c2ce68530ea61118f92ceebe32f29827c1ad297a7aca2d892837e0d846aff0cf0c03c917c56b72f80150e9a58c2cc8af39e11c
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.1
4
+ - 1.9.3
5
+ - jruby-19mode
data/Gemfile.lock CHANGED
@@ -1,15 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- attempt_this (1.0.0)
4
+ attempt_this (1.0.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
9
  diff-lcs (1.2.4)
10
10
  docile (1.1.2)
11
- macaddr (1.6.1)
12
- systemu (~> 2.5.0)
13
11
  multi_json (1.8.4)
14
12
  rake (10.1.1)
15
13
  rspec (2.13.0)
@@ -25,18 +23,15 @@ GEM
25
23
  multi_json
26
24
  simplecov-html (~> 0.8.0)
27
25
  simplecov-html (0.8.0)
28
- systemu (2.5.2)
29
- uuid (2.3.7)
30
- macaddr (~> 1.0)
31
26
 
32
27
  PLATFORMS
28
+ java
33
29
  ruby
34
30
  x86-mingw32
35
31
 
36
32
  DEPENDENCIES
37
33
  attempt_this!
38
- bundler
39
- rake
40
- rspec
41
- simplecov
42
- uuid
34
+ bundler (~> 1.6)
35
+ rake (~> 10.1)
36
+ rspec (~> 2.13)
37
+ simplecov (~> 0.8)
data/attempt_this.gemspec CHANGED
@@ -1,22 +1,22 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = 'attempt_this'
3
- s.version = '1.0.0'
4
- s.date = '2014-04-27'
5
- s.summary = 'Retry policy mix-in'
6
- s.description = <<EOM
2
+ s.name = 'attempt_this'
3
+ s.version = '1.0.1'
4
+ s.date = '2014-04-29'
5
+ s.summary = 'Retry policy mix-in'
6
+ s.description = <<EOM
7
7
  Retry policy mix-in with configurable number of attempts, delays, exception filters, and fall back strategies.
8
8
 
9
9
  See project's home page for usage examples and more information.
10
10
  EOM
11
- s.authors = ['Aliaksei Baturytski']
12
- s.email = 'abaturytski@gmail.com'
13
- s.files = `git ls-files`.split($/)
14
- s.homepage = 'https://github.com/aliakb/attempt_this'
11
+ s.authors = ['Aliaksei Baturytski']
12
+ s.email = 'abaturytski@gmail.com'
13
+ s.files = `git ls-files`.split($/)
14
+ s.homepage = 'https://github.com/aliakb/attempt_this'
15
15
  s.license = 'MIT'
16
+ s.required_ruby_version = '>= 1.8.7'
16
17
 
17
- s.add_development_dependency('bundler')
18
- s.add_development_dependency('rake')
19
- s.add_development_dependency('rspec')
20
- s.add_development_dependency('simplecov')
21
- s.add_development_dependency('uuid')
18
+ s.add_development_dependency('bundler', '~> 1.6')
19
+ s.add_development_dependency('rake', '~> 10.1')
20
+ s.add_development_dependency('rspec', '~> 2.13')
21
+ s.add_development_dependency('simplecov', '~> 0.8')
22
22
  end
@@ -1,5 +1,5 @@
1
- require_relative 'binary_backoff_policy.rb'
2
- require_relative 'exception_type_filter.rb'
1
+ require './lib/attempt_this/binary_backoff_policy.rb'
2
+ require './lib/attempt_this/exception_type_filter.rb'
3
3
 
4
4
  module AttemptThis
5
5
  # Retry policy implementation.
@@ -29,29 +29,17 @@ module AttemptThis
29
29
  return self unless block
30
30
  return block.call unless AttemptThis.enabled?
31
31
 
32
- last_exception = nil
33
- first_time = true
32
+ apply_defaults
34
33
 
35
- @delay_policy = ->{} unless @delay_policy
36
- @reset_method = ->{} unless @reset_method
37
- @exception_filter = ExceptionTypeFilter.new([StandardError]) unless @exception_filter
38
-
39
- @enumerator.rewind
40
- @enumerator.with_index do |i|
41
- @delay_policy.call unless i == 0
42
- last_exception = nil
43
- begin
44
- return block.call
45
- rescue Exception => ex
46
- raise unless @exception_filter.include?(ex)
47
- @reset_method.call
48
- last_exception = ex
49
- end
34
+ # Retriable attempts require special error handling
35
+ result = each_retriable_attempt do
36
+ return attempt_with_reset(&block)
50
37
  end
51
38
 
52
- if (last_exception)
53
- return @default_method[] if @default_method
54
- raise last_exception
39
+ # Final attempt
40
+ if (result != :empty)
41
+ @delay_policy.call unless result == :skipped
42
+ final_attempt(&block)
55
43
  end
56
44
  end
57
45
 
@@ -69,7 +57,7 @@ module AttemptThis
69
57
  raise(ArgumentError, "Delay should be either an number or a range of numbers; got #{delay}!")
70
58
  end
71
59
  raise(ArgumentError, 'Delay policy has already been specified!') if @delay_policy
72
- @delay_policy = ->{Kernel.sleep(rand(delay))}
60
+ @delay_policy = lambda{Kernel.sleep(delay.first + rand(delay.count))}
73
61
 
74
62
  attempt(block)
75
63
  end
@@ -118,10 +106,52 @@ module AttemptThis
118
106
 
119
107
  # Creates a scenario with the given id.
120
108
  def scenario(id)
121
- raise(ArgumentError, 'Blank id!') if id.nil? || id.empty?
109
+ raise(ArgumentError, 'Nil id!') if id.nil?
122
110
  raise(ArgumentError, "There is already a scenario with id #{id}") if @@scenarios.has_key?(id)
123
111
 
124
112
  @@scenarios[id] = self
125
113
  end
114
+
115
+ private
116
+
117
+
118
+ def final_attempt(&block)
119
+ attempt_with_reset(&block)
120
+ rescue Exception => ex
121
+ raise unless @default_method
122
+ raise unless @exception_filter.include?(ex)
123
+ @default_method.call
124
+ end
125
+
126
+ def apply_defaults
127
+ @delay_policy = lambda{} unless @delay_policy
128
+ @reset_method = lambda{} unless @reset_method
129
+ @exception_filter = ExceptionTypeFilter.new([StandardError]) unless @exception_filter
130
+ end
131
+
132
+ def each_retriable_attempt(&block)
133
+ result = :empty
134
+ @enumerator.each do
135
+ if (result == :empty)
136
+ result = :skipped
137
+ next
138
+ end
139
+ @delay_policy.call unless result == :skipped
140
+ result = :attempted
141
+ begin
142
+ block.call
143
+ rescue Exception => ex
144
+ raise unless @exception_filter.include?(ex)
145
+ end
146
+ end
147
+ result
148
+ end
149
+
150
+ def attempt_with_reset(&block)
151
+ block.call
152
+ rescue Exception => ex
153
+ @reset_method.call
154
+ raise
155
+ end
126
156
  end
127
157
  end
data/spec/attempt_spec.rb CHANGED
@@ -5,11 +5,11 @@ describe AttemptThis do
5
5
 
6
6
  context 'attempt' do
7
7
  it 'should reject nil enumerator' do
8
- ->{attempt(nil)}.should raise_error(ArgumentError)
8
+ lambda{attempt(nil)}.should raise_error(ArgumentError)
9
9
  end
10
10
 
11
11
  it 'should allow execution without a code block' do
12
- ->{attempt(3.times)}.should_not raise_error
12
+ lambda{attempt(3.times)}.should_not raise_error
13
13
  end
14
14
 
15
15
  it 'should execute code block' do
@@ -32,12 +32,12 @@ describe AttemptThis do
32
32
  end
33
33
 
34
34
  it 'should re-throw the original exception' do
35
- ->{attempt(2.times){raise 'Test'}}.should raise_error('Test')
35
+ lambda{attempt(2.times){raise 'Test'}}.should raise_error('Test')
36
36
  end
37
37
 
38
38
  it 'should attempt 3 times' do
39
39
  call_count = 0
40
- ->{attempt(3.times) { call_count += 1; raise 'Test'}}.should raise_error('Test')
40
+ lambda{attempt(3.times) { call_count += 1; raise 'Test'}}.should raise_error('Test')
41
41
  call_count.should eql(3)
42
42
  end
43
43
 
@@ -52,34 +52,34 @@ describe AttemptThis do
52
52
  end
53
53
 
54
54
  it 'should return block\'s value' do
55
- expected = UUID.generate.to_s
55
+ expected = "some string"
56
56
  attempt(3.times) { expected }.should eql(expected)
57
57
  end
58
58
  end
59
59
 
60
60
  context 'with_delay' do
61
61
  it 'should reject nil delay' do
62
- ->{attempt(3.times).with_delay(nil)}.should raise_error(ArgumentError)
62
+ lambda{attempt(3.times).with_delay(nil)}.should raise_error(ArgumentError)
63
63
  end
64
64
 
65
65
  it 'should reject negative delay' do
66
- ->{attempt(3.times).with_delay(-1)}.should raise_error(ArgumentError)
66
+ lambda{attempt(3.times).with_delay(-1)}.should raise_error(ArgumentError)
67
67
  end
68
68
 
69
69
  it 'should reject non-number delay' do
70
- ->{attempt(3.times).with_delay('foo')}.should raise_error(ArgumentError)
70
+ lambda{attempt(3.times).with_delay('foo')}.should raise_error(ArgumentError)
71
71
  end
72
72
 
73
73
  it 'should accept floating point delay' do
74
- ->{attempt(3.times).with_delay(1.5)}.should_not raise_error
74
+ lambda{attempt(3.times).with_delay(1.5)}.should_not raise_error
75
75
  end
76
76
 
77
77
  it 'should accept zero delay' do
78
- ->{attempt(3.times).with_delay(0)}.should_not raise_error
78
+ lambda{attempt(3.times).with_delay(0)}.should_not raise_error
79
79
  end
80
80
 
81
81
  it 'should accept calls without a code block' do
82
- ->{attempt(3.times).with_delay(3)}.should_not raise_error
82
+ lambda{attempt(3.times).with_delay(3)}.should_not raise_error
83
83
  end
84
84
 
85
85
  it 'should call the code block' do
@@ -97,111 +97,111 @@ describe AttemptThis do
97
97
 
98
98
  it 'should sleep for given number of seconds between failed attempts' do
99
99
  Kernel.should_receive(:sleep).with(5).exactly(2).times
100
- ->{attempt(3.times).with_delay(5) {raise 'Test'}}.should raise_error('Test')
100
+ lambda{attempt(3.times).with_delay(5) {raise 'Test'}}.should raise_error('Test')
101
101
  end
102
102
 
103
103
  it 'should not fail on zero delay' do
104
- ->{attempt(3.times).with_delay(0) { raise 'Test' }}.should raise_error('Test')
104
+ lambda{attempt(3.times).with_delay(0) { raise 'Test' }}.should raise_error('Test')
105
105
  end
106
106
 
107
107
  it 'should reject negative start' do
108
- ->{attempt(3.times).with_delay(-1..1)}.should raise_error(ArgumentError)
108
+ lambda{attempt(3.times).with_delay(-1..1)}.should raise_error(ArgumentError)
109
109
  end
110
110
 
111
111
  it 'should reject negative end' do
112
- ->{attempt(3.times).with_delay(1..-1)}.should raise_error(ArgumentError)
112
+ lambda{attempt(3.times).with_delay(1..-1)}.should raise_error(ArgumentError)
113
113
  end
114
114
 
115
115
  it 'should reject non-number range' do
116
- ->{attempt(3.times).with_delay('x'..'y')}.should raise_error(ArgumentError)
116
+ lambda{attempt(3.times).with_delay('x'..'y')}.should raise_error(ArgumentError)
117
117
  end
118
118
 
119
119
  it 'should accept floating point range' do
120
- ->{attempt(3.times).with_delay(1.5..3)}.should_not raise_error
120
+ lambda{attempt(3.times).with_delay(1.5..3)}.should_not raise_error
121
121
  end
122
122
 
123
123
  it 'should reject inverse range' do
124
- ->{attempt(2.times).with_delay(3..1)}.should raise_error(ArgumentError)
124
+ lambda{attempt(2.times).with_delay(3..1)}.should raise_error(ArgumentError)
125
125
  end
126
126
 
127
127
  it 'should accept zero seconds interval' do
128
- ->{attempt(3.times).with_delay(0..0)}.should_not raise_error
128
+ lambda{attempt(3.times).with_delay(0..0)}.should_not raise_error
129
129
  end
130
130
 
131
131
  it 'should wait for specified number of seconds' do
132
132
  Kernel.should_receive(:sleep).with(5).exactly(2).times
133
- ->{attempt(3.times).with_delay(5..5){raise 'Test'}}.should raise_error('Test')
133
+ lambda{attempt(3.times).with_delay(5..5){raise 'Test'}}.should raise_error('Test')
134
134
  end
135
135
 
136
136
  it 'should reject multiple delay policies' do
137
- ->{attempt(3.times).with_delay(1).with_delay(1)}.should raise_error(ArgumentError)
137
+ lambda{attempt(3.times).with_delay(1).with_delay(1)}.should raise_error(ArgumentError)
138
138
  end
139
139
  end
140
140
 
141
141
  context 'with_reset' do
142
142
  it 'should reject nil reset proc' do
143
- ->{attempt(3.times).with_reset(nil)}.should raise_error(ArgumentError)
143
+ lambda{attempt(3.times).with_reset(nil)}.should raise_error(ArgumentError)
144
144
  end
145
145
 
146
146
  it 'should accept calls without a code block' do
147
- ->{attempt(3.times).with_reset(->{})}.should_not raise_error
147
+ lambda{attempt(3.times).with_reset(lambda{})}.should_not raise_error
148
148
  end
149
149
 
150
150
  it 'should call the code block' do
151
151
  was_called = false
152
- attempt(1.times).with_reset(->{}) { was_called = true }
152
+ attempt(1.times).with_reset(lambda{}) { was_called = true }
153
153
 
154
154
  was_called.should be_true
155
155
  end
156
156
 
157
157
  it 'should reject multiple reset procs' do
158
- ->{attempt(3.times).with_reset(->{}).with_reset(->{})}.should raise_error(ArgumentError)
158
+ lambda{attempt(3.times).with_reset(lambda{}).with_reset(lambda{})}.should raise_error(ArgumentError)
159
159
  end
160
160
 
161
161
  it 'should not be called on successful calls' do
162
162
  was_called = false
163
163
 
164
- attempt(1.times).with_reset(->{ was_called = true }) {}
164
+ attempt(1.times).with_reset(lambda{ was_called = true }) {}
165
165
  was_called.should be_false
166
166
  end
167
167
 
168
168
  it 'should be called on each failure' do
169
169
  reset_count = 0
170
170
 
171
- ->{attempt(3.times).with_reset(->{ reset_count += 1 }) { raise 'Test' }}.should raise_error('Test')
171
+ lambda{attempt(3.times).with_reset(lambda{ reset_count += 1 }) { raise 'Test' }}.should raise_error('Test')
172
172
  reset_count.should eql(3)
173
173
  end
174
174
  end
175
175
 
176
176
  context 'and_default_to' do
177
177
  it 'should reject nil default method' do
178
- ->{attempt(3.times).and_default_to(nil)}.should raise_error(ArgumentError)
178
+ lambda{attempt(3.times).and_default_to(nil)}.should raise_error(ArgumentError)
179
179
  end
180
180
 
181
181
  it 'should reject duplicate default methods' do
182
- ->{attempt(3.times).and_default_to(->{}).and_default_to(->{})}.should raise_error(ArgumentError)
182
+ lambda{attempt(3.times).and_default_to(lambda{}).and_default_to(lambda{})}.should raise_error(ArgumentError)
183
183
  end
184
184
 
185
185
  it 'should allow calls without a code block' do
186
- ->{attempt(3.times).and_default_to(->{})}.should_not raise_error
186
+ lambda{attempt(3.times).and_default_to(lambda{})}.should_not raise_error
187
187
  end
188
188
 
189
189
  it 'should call the code block' do
190
190
  was_called = false
191
- attempt(3.times).and_default_to(->{}){ was_called = true }
191
+ attempt(3.times).and_default_to(lambda{}){ was_called = true }
192
192
 
193
193
  was_called.should be_true
194
194
  end
195
195
 
196
196
  it 'should not be called on success' do
197
197
  was_called = false
198
- attempt(3.times).and_default_to(->{ was_called = true }) {}
198
+ attempt(3.times).and_default_to(lambda{ was_called = true }) {}
199
199
  was_called.should be_false
200
200
  end
201
201
 
202
202
  it 'should be called once on the failure' do
203
203
  call_count = 0
204
- attempt(3.times).and_default_to(->{ call_count += 1 }){ raise 'Test'}
204
+ attempt(3.times).and_default_to(lambda{ call_count += 1 }){ raise 'Test'}
205
205
 
206
206
  call_count.should eql(1)
207
207
  end
@@ -210,34 +210,34 @@ describe AttemptThis do
210
210
  call_count = 0
211
211
  was_called = false
212
212
 
213
- attempt(3.times).and_default_to(->{ was_called = true }) { call_count += 1; raise 'Test' if call_count < 2 }
213
+ attempt(3.times).and_default_to(lambda{ was_called = true }) { call_count += 1; raise 'Test' if call_count < 2 }
214
214
  was_called.should be_false
215
215
  end
216
216
  end
217
217
 
218
218
  context 'with_binary_backoff' do
219
219
  it 'should reject nil initial delay' do
220
- ->{attempt(3.times).with_binary_backoff(nil)}.should raise_error(ArgumentError)
220
+ lambda{attempt(3.times).with_binary_backoff(nil)}.should raise_error(ArgumentError)
221
221
  end
222
222
 
223
223
  it 'should reject non-integer initial delay' do
224
- ->{attempt(3.times).with_binary_backoff('foo')}.should raise_error(ArgumentError)
224
+ lambda{attempt(3.times).with_binary_backoff('foo')}.should raise_error(ArgumentError)
225
225
  end
226
226
 
227
227
  it 'should reject zero initial delay' do
228
- ->{attempt(3.times).with_binary_backoff(0)}.should raise_error(ArgumentError)
228
+ lambda{attempt(3.times).with_binary_backoff(0)}.should raise_error(ArgumentError)
229
229
  end
230
230
 
231
231
  it 'should reject negative initial delay' do
232
- ->{attempt(3.times).with_binary_backoff(-1)}.should raise_error(ArgumentError)
232
+ lambda{attempt(3.times).with_binary_backoff(-1)}.should raise_error(ArgumentError)
233
233
  end
234
234
 
235
235
  it 'should reject multiple policies' do
236
- ->{attempt(3.times).with_binary_backoff(1).with_binary_backoff(2)}.should raise_error(ArgumentError)
236
+ lambda{attempt(3.times).with_binary_backoff(1).with_binary_backoff(2)}.should raise_error(ArgumentError)
237
237
  end
238
238
 
239
239
  it 'should accept calls without a code block' do
240
- ->{attempt(3.times).with_binary_backoff(1)}.should_not raise_error
240
+ lambda{attempt(3.times).with_binary_backoff(1)}.should_not raise_error
241
241
  end
242
242
 
243
243
  it 'should call the code block' do
@@ -252,21 +252,21 @@ describe AttemptThis do
252
252
  Kernel.should_receive(:sleep).ordered.with(2)
253
253
  Kernel.should_receive(:sleep).ordered.with(4)
254
254
 
255
- attempt(4.times).with_binary_backoff(1).and_default_to(->{}) { raise 'Test' }
255
+ attempt(4.times).with_binary_backoff(1).and_default_to(lambda{}) { raise 'Test' }
256
256
  end
257
257
  end
258
258
 
259
259
  context 'with_filter' do
260
260
  it 'should reject empty exceptions list' do
261
- ->{attempt.with_filter}.should raise_error(ArgumentError)
261
+ lambda{attempt.with_filter}.should raise_error(ArgumentError)
262
262
  end
263
263
 
264
264
  it 'should reject non-exceptions' do
265
- ->{attempt.with_filter(1)}.should raise_error(ArgumentError)
265
+ lambda{attempt.with_filter(1)}.should raise_error(ArgumentError)
266
266
  end
267
267
 
268
268
  it 'should accept calls without a block' do
269
- ->{attempt(2.times).with_filter(Exception)}.should_not raise_error
269
+ lambda{attempt(2.times).with_filter(Exception)}.should_not raise_error
270
270
  end
271
271
 
272
272
  it 'should call code within the block' do
@@ -277,19 +277,19 @@ describe AttemptThis do
277
277
 
278
278
  it 'should ignore other exceptions' do
279
279
  count = 0
280
- ->{attempt(3.times).with_filter(StandardError){ count += 1; raise(Exception, 'Test')}}.should raise_error(Exception)
280
+ lambda{attempt(3.times).with_filter(StandardError){ count += 1; raise(Exception, 'Test')}}.should raise_error(Exception)
281
281
  count.should eql(1)
282
282
  end
283
283
 
284
284
  it 'should not ignore specified exceptions' do
285
285
  count = 0
286
- ->{attempt(3.times).with_filter(RuntimeError){ count += 1; raise 'Test'}}.should raise_error(RuntimeError)
286
+ lambda{attempt(3.times).with_filter(RuntimeError){ count += 1; raise 'Test'}}.should raise_error(RuntimeError)
287
287
  count.should eql(3)
288
288
  end
289
289
 
290
290
  it 'should not ignore derived exceptions' do
291
291
  count = 0
292
- ->{attempt(3.times).with_filter(Exception){ count += 1; raise(StandardError, 'Test')}}.should raise_error(StandardError)
292
+ lambda{attempt(3.times).with_filter(Exception){ count += 1; raise(StandardError, 'Test')}}.should raise_error(StandardError)
293
293
  count.should eql(3)
294
294
  end
295
295
  end
@@ -9,24 +9,20 @@ describe AttemptThis do
9
9
 
10
10
  context 'validation' do
11
11
  it 'should reject nil scenario id' do
12
- ->{AttemptThis.attempt(3.times).scenario(nil)}.should raise_error(ArgumentError)
13
- end
14
-
15
- it 'should reject empty scenario id' do
16
- ->{AttemptThis.attempt(3.times).scenario('')}.should raise_error(ArgumentError)
12
+ lambda{AttemptThis.attempt(3.times).scenario(nil)}.should raise_error(ArgumentError)
17
13
  end
18
14
 
19
15
  it 'should accept string ids' do
20
- ->{AttemptThis.attempt(3.times).scenario('uploads')}.should_not raise_error
16
+ lambda{AttemptThis.attempt(3.times).scenario('uploads')}.should_not raise_error
21
17
  end
22
18
 
23
19
  it 'should accept symbol ids' do
24
- ->{AttemptThis.attempt(3.times).scenario(:uploads)}.should_not raise_error
20
+ lambda{AttemptThis.attempt(3.times).scenario(:uploads)}.should_not raise_error
25
21
  end
26
22
 
27
23
  it 'should reject duplicate names' do
28
24
  AttemptThis.attempt(3.times).scenario(:uploads)
29
- ->{AttemptThis.attempt(3.times).scenario(:uploads)}.should raise_error(ArgumentError)
25
+ lambda{AttemptThis.attempt(3.times).scenario(:uploads)}.should raise_error(ArgumentError)
30
26
  end
31
27
  end
32
28
 
@@ -35,16 +31,16 @@ describe AttemptThis do
35
31
  AttemptThis.attempt(3.times).scenario(:test)
36
32
  count = 0
37
33
 
38
- ->{attempt(:test) { count += 1; raise 'Test' }}.should raise_error('Test')
34
+ lambda{attempt(:test) { count += 1; raise 'Test' }}.should raise_error('Test')
39
35
  count.should eql(3)
40
36
  end
41
37
 
42
38
  it 'should reuse scenario' do
43
39
  AttemptThis.attempt(3.times).scenario(:test)
44
- ->{attempt(:test) { raise 'Test'}}.should raise_error('Test')
40
+ lambda{attempt(:test) { raise 'Test'}}.should raise_error('Test')
45
41
 
46
42
  count = 0
47
- ->{attempt(:test) {count += 1; raise 'Test'}}.should raise_error('Test')
43
+ lambda{attempt(:test) {count += 1; raise 'Test'}}.should raise_error('Test')
48
44
  count.should eql(3)
49
45
  end
50
46
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require 'simplecov'
2
2
  SimpleCov.start
3
3
 
4
- require 'uuid'
5
- require_relative '../lib/attempt_this.rb'
4
+ require 'attempt_this.rb'
metadata CHANGED
@@ -1,85 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attempt_this
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aliaksei Baturytski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-27 00:00:00.000000000 Z
11
+ date: 2014-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '1.6'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '1.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '10.1'
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: '0'
40
+ version: '10.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '2.13'
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: '0'
54
+ version: '2.13'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: simplecov
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '0.8'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: uuid
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - '>='
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - '>='
81
- - !ruby/object:Gem::Version
82
- version: '0'
68
+ version: '0.8'
83
69
  description: |
84
70
  Retry policy mix-in with configurable number of attempts, delays, exception filters, and fall back strategies.
85
71
 
@@ -89,7 +75,8 @@ executables: []
89
75
  extensions: []
90
76
  extra_rdoc_files: []
91
77
  files:
92
- - .gitignore
78
+ - ".gitignore"
79
+ - ".travis.yml"
93
80
  - Gemfile
94
81
  - Gemfile.lock
95
82
  - README.md
@@ -113,17 +100,17 @@ require_paths:
113
100
  - lib
114
101
  required_ruby_version: !ruby/object:Gem::Requirement
115
102
  requirements:
116
- - - '>='
103
+ - - ">="
117
104
  - !ruby/object:Gem::Version
118
- version: '0'
105
+ version: 1.8.7
119
106
  required_rubygems_version: !ruby/object:Gem::Requirement
120
107
  requirements:
121
- - - '>='
108
+ - - ">="
122
109
  - !ruby/object:Gem::Version
123
110
  version: '0'
124
111
  requirements: []
125
112
  rubyforge_project:
126
- rubygems_version: 2.0.3
113
+ rubygems_version: 2.2.2
127
114
  signing_key:
128
115
  specification_version: 4
129
116
  summary: Retry policy mix-in