waiting 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTRlMTI4YjYwOTE2OThkMDE1NjJlYzQ0MmEyNzYzMGNjYTUyZTE2NQ==
4
+ ZDY2YTVlYTIyZDBmZDhjZTkyNWE1YWU0ZWFiYmFmM2I5Mzg4YjY5ZQ==
5
5
  data.tar.gz: !binary |-
6
- YmU1NmY4ZDJiZjBlNjg4NzI4YjEwYTg3ZjhhMmVkYTg4NjYyYTdhNw==
6
+ ZWZjZWEyZDQ5M2Q3ZTJkODZmNmZjZGM1OGU4MmIyNGFjOWE0MzA0Zg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MTk3YWM5YmYxZGU0OTAzNWExNThjNTY1Zjk3MTA1YWU1MmFhOWNjZTg0N2Zh
10
- YjJlMzdkMDg0ZTFjYzAwYTM0NzVkOTdhNWMwYzRkMWY3NzExY2E3ZTE2MTYz
11
- MzUwYWZlMDU2OTQ0OWU2OTI1YzdhYjg5NWJmYmJkZDdjOGE5MTA=
9
+ Nzg2N2YzYTJjNmI3NzU5OWFiMmY3OGE2MmEwMDFiMzg0MTcwNGM1NzIxNTM2
10
+ ODRjYjA4Y2NjMjcwNjE0MjNkNWFmZjU2MzBkZjVhYWI5M2ZhZGEzZWNmYWIw
11
+ ZDI5NGJkZDg3MjRkMzgxNTIyODNjMWI0MDlkZjgwNjVmMTg1ZmM=
12
12
  data.tar.gz: !binary |-
13
- NDdhODgxNjZjMmI4YWYwZDRiYjNhNmE0NGFmZDMwZDE3YTQ0YWFkYjFiMDVm
14
- MWEzZThhNTVhY2M5MjgwMmRhNzdiYTVhMzRmMjc3MTAxMjg4NWJmMDk1NWM1
15
- MTM2N2MzN2Y4MDI2ODNhOTFiMWEwNWI3ZDBjMjViZjg0OGQ5MWY=
13
+ NzZiMWNkODNkZDdjMTQxNDY5MDY4ZTdiZTM5ZDA1ZmUxMzU1ZjMyZTYzNzgz
14
+ NGI3MjRiYzY2MzI3MTYyYzUxNjM4NmFhYWMxNTc0ZGM2YWU4NTg3MDI0NDcy
15
+ MzgyMjhiMjYwY2I4NGNiMTljZmE1NWZlZTFiZGNmYzI1YjA3ZDM=
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/meringu/waiting.svg?branch=master)](https://travis-ci.org/meringu/waiting)
2
+
1
3
  # Waiting
2
4
 
3
5
  Waits so you don't have to!
@@ -36,6 +38,24 @@ end
36
38
  Waiting.wait(interval: interval, max_attempts: max_attempts) do |waiter|
37
39
  waiter.done if something
38
40
  end
41
+
42
+ # You can do exponential backoff
43
+ # for example, exp_base of 2 and an interval of 1 second,
44
+ # will wait for: 1,2,4,8...
45
+ Waiting.wait(exp_base: 2) do |waiter|
46
+ waiter.done if something
47
+ end
48
+
49
+ # or specify it as a default
50
+ Waiting.default_exp_base = exp_base # exponential backoff base, defaults to 1
51
+
52
+ # will log options, and give progress updates if you like
53
+ Waiting.wait do |waiter|
54
+ puts waiter.attempts
55
+ puts waiter.exp_base
56
+ puts waiter.interval
57
+ puts waiter.max_attempts
58
+ end
39
59
  ```
40
60
 
41
61
  ## Contributing
@@ -1,3 +1,3 @@
1
1
  module Waiting
2
- VERSION = '0.2.0'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -1,5 +1,10 @@
1
1
  module Waiting
2
2
  class Waiter
3
+ attr_accessor :attempts
4
+ attr_accessor :exp_base
5
+ attr_accessor :interval
6
+ attr_accessor :max_attempts
7
+
3
8
  # Waiter is in waiting state to start with
4
9
  def initialize
5
10
  @done = false
data/lib/waiting.rb CHANGED
@@ -15,6 +15,18 @@ module Waiting
15
15
  @@default_interval = interval
16
16
  end
17
17
 
18
+ # get the default exponential base
19
+ # @return [Float] the base for exponential backoff
20
+ def self.default_exp_base
21
+ @@default_exp_base ||= 1
22
+ end
23
+
24
+ # set the default exponential base
25
+ # @param [Float] exp_base the base for exponential backoff
26
+ def self.default_exp_base=(exp_base)
27
+ @@default_exp_base = exp_base
28
+ end
29
+
18
30
  # get the default max attempts
19
31
  # @return [Fixnum] the default max attempts
20
32
  def self.default_max_attempts
@@ -33,6 +45,7 @@ module Waiting
33
45
  # @option opts [Fixnum] :max_attempts number of attempts before failing
34
46
  def self.wait(opts = {})
35
47
  interval = opts.fetch(:interval) { default_interval }
48
+ exp_base = opts.fetch(:exp_base) { default_exp_base }
36
49
  max_attempts = opts.fetch(:max_attempts) { default_max_attempts }
37
50
 
38
51
  waiter = Waiter.new
@@ -43,10 +56,17 @@ module Waiting
43
56
  if attempts >= max_attempts
44
57
  fail(TimedOutError, "Timed out after #{interval * max_attempts}s")
45
58
  end
59
+
60
+ waiter.attempts = attempts
61
+ waiter.exp_base = exp_base
62
+ waiter.interval = interval
63
+ waiter.max_attempts = max_attempts
64
+
46
65
  yield(waiter)
47
66
  break if waiter.done?
48
- sleep interval
67
+ sleep exp_base ** attempts * interval
49
68
  attempts += 1
50
69
  end
51
70
  end
71
+
52
72
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waiting
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henry Muru Paenga
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-02-02 00:00:00.000000000 Z
11
+ date: 2016-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler