attempt_this 1.0.0 → 1.0.1

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: 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