anticipate 0.0.2 → 0.1.0

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.
@@ -20,4 +20,28 @@ Blocks should contain an assertion, i.e. raise a descriptive error if some condi
20
20
 
21
21
  The first try is attempted immediately, there is no sleep before the first yield.
22
22
 
23
+ == Defining your own timings
24
+
25
+ If lots of your code needs to wait for things to happen, you might consider defining your own timing module, e.g:
26
+
27
+ module Timing
28
+ include Anticipate
29
+
30
+ def very_soon
31
+ sleeping(0.1).seconds.between_tries.failing_after(10).tries do
32
+ yield
33
+ end
34
+ end
35
+
36
+ def eventually
37
+ sleeping(2).seconds.between_tries.failing_after(5).tries do
38
+ yield
39
+ end
40
+ end
41
+ end
42
+
43
+ ...that way you can adjust timing details in one place as the system grows.
44
+
45
+ == Alternatives
46
+
23
47
  I'm aware of a couple of gems performing the begin-rescue-sleep-retry dance, namely 'retry' and 'attempt'. The aim of this library is to offer more expressive syntax.
@@ -5,7 +5,7 @@ require 'anticipate/anticipator'
5
5
  require 'anticipate/dsl'
6
6
 
7
7
  module Anticipate
8
- VERSION = '0.0.2'
8
+ VERSION = '0.1.0'
9
9
 
10
10
  include DSL
11
11
  end
@@ -11,7 +11,7 @@ module Anticipate
11
11
  begin
12
12
  yield
13
13
  return
14
- rescue => e
14
+ rescue Exception => e
15
15
  if (count += 1) == tries
16
16
  raise TimeoutError.new(interval, tries, e)
17
17
  end
@@ -10,7 +10,7 @@ module Anticipate
10
10
 
11
11
  describe "#anticipate" do
12
12
 
13
- describe "when the block eventually stops raising" do
13
+ describe "when the block eventually stops raising a StandardError" do
14
14
  it "sleeps the given interval between tries" do
15
15
  @sleeper.should_receive(:sleep).with(1).exactly(8).times
16
16
  tries = 0
@@ -29,6 +29,19 @@ module Anticipate
29
29
  }.should_not raise_error
30
30
  end
31
31
  end
32
+
33
+ describe "when the block eventually stops raising an Exception (that is not a StandardError)" do
34
+
35
+ it "sleeps the given interval between tries" do
36
+ @sleeper.should_receive(:sleep).with(1).exactly(8).times
37
+ tries = 0
38
+ @anticipator.anticipate(1,9) do
39
+ raise Exception.new unless (tries += 1) == 9
40
+ end
41
+ tries.should == 9
42
+ end
43
+
44
+ end
32
45
 
33
46
  describe "when the block always raises" do
34
47
  describe "when waiting for one second" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anticipate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-02 00:00:00.000000000Z
12
+ date: 2013-05-24 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Fluent interface for try-rescue-sleep-retry-abort
15
15
  email: joshuachisholm@gmail.com
@@ -48,8 +48,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
48
48
  version: '0'
49
49
  requirements: []
50
50
  rubyforge_project:
51
- rubygems_version: 1.8.6
51
+ rubygems_version: 1.8.24
52
52
  signing_key:
53
53
  specification_version: 3
54
- summary: anticipate-0.0.2
54
+ summary: anticipate-0.1.0
55
55
  test_files: []