waiting 0.2.0 → 0.3.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.
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