wait 0.4 → 0.4.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.
- data/lib/counters/base.rb +43 -0
- data/lib/delayers/base.rb +24 -0
- data/lib/delayers/exponential.rb +12 -0
- data/lib/delayers/regular.rb +3 -0
- data/lib/initialize.rb +16 -0
- data/lib/loggers/base.rb +32 -0
- data/lib/loggers/debug.rb +7 -0
- data/lib/raisers/base.rb +18 -0
- data/lib/raisers/passive.rb +3 -0
- data/lib/rescuers/base.rb +15 -0
- data/lib/testers/base.rb +18 -0
- data/lib/testers/passive.rb +3 -0
- data/lib/testers/truthy.rb +7 -0
- metadata +15 -2
@@ -0,0 +1,43 @@
|
|
1
|
+
class Wait
|
2
|
+
class BaseCounter
|
3
|
+
attr_reader :attempt
|
4
|
+
|
5
|
+
def initialize(logger, total)
|
6
|
+
@logger = logger
|
7
|
+
# Attempt to prevent causing an infinite loop by being very strict about
|
8
|
+
# the value passed.
|
9
|
+
unless total.is_a?(Fixnum) and total > 0
|
10
|
+
raise(ArgumentError, "invalid number of attempts: #{total.inspect}")
|
11
|
+
end
|
12
|
+
|
13
|
+
@total = total
|
14
|
+
reset
|
15
|
+
end
|
16
|
+
|
17
|
+
# Called before all attempts to reset the counter.
|
18
|
+
def reset
|
19
|
+
@attempt = 0
|
20
|
+
end
|
21
|
+
|
22
|
+
# Called before each attempt to increment the counter.
|
23
|
+
def increment
|
24
|
+
@attempt += 1
|
25
|
+
log
|
26
|
+
end
|
27
|
+
|
28
|
+
# Returns +true+ if this is the last attempt.
|
29
|
+
def last_attempt?
|
30
|
+
@attempt == @total
|
31
|
+
end
|
32
|
+
|
33
|
+
# Logs the current attempt count.
|
34
|
+
def log
|
35
|
+
@logger.debug "[Counter] attempt #{self}"
|
36
|
+
end
|
37
|
+
|
38
|
+
# Returns a string representation of the current count.
|
39
|
+
def to_s
|
40
|
+
[@attempt, @total].join("/")
|
41
|
+
end
|
42
|
+
end # BaseCounter
|
43
|
+
end # Wait
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Wait
|
2
|
+
class BaseDelayer
|
3
|
+
def initialize(logger, initial_delay)
|
4
|
+
@logger = logger
|
5
|
+
@delay = initial_delay
|
6
|
+
end
|
7
|
+
|
8
|
+
# Called before a reattempt to sleep a certain about of time.
|
9
|
+
def sleep
|
10
|
+
log_delay
|
11
|
+
Kernel.sleep(@delay)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Logs how long the delay is.
|
15
|
+
def log_delay
|
16
|
+
@logger.debug "[Delayer] delaying for #{self}"
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns a string representation of the delay.
|
20
|
+
def to_s
|
21
|
+
"#{@delay}s"
|
22
|
+
end
|
23
|
+
end # BaseDelayer
|
24
|
+
end # Wait
|
data/lib/initialize.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require "timeout"
|
2
|
+
require "logger"
|
3
|
+
require "forwardable"
|
4
|
+
|
5
|
+
require File.expand_path("../loggers/base", __FILE__)
|
6
|
+
require File.expand_path("../loggers/debug", __FILE__)
|
7
|
+
require File.expand_path("../counters/base", __FILE__)
|
8
|
+
require File.expand_path("../delayers/base", __FILE__)
|
9
|
+
require File.expand_path("../delayers/regular", __FILE__)
|
10
|
+
require File.expand_path("../delayers/exponential", __FILE__)
|
11
|
+
require File.expand_path("../testers/base", __FILE__)
|
12
|
+
require File.expand_path("../testers/passive", __FILE__)
|
13
|
+
require File.expand_path("../testers/truthy", __FILE__)
|
14
|
+
require File.expand_path("../rescuers/base", __FILE__)
|
15
|
+
require File.expand_path("../raisers/base", __FILE__)
|
16
|
+
require File.expand_path("../raisers/passive", __FILE__)
|
data/lib/loggers/base.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
class Wait
|
2
|
+
class BaseLogger
|
3
|
+
extend Forwardable
|
4
|
+
|
5
|
+
attr_reader :logger
|
6
|
+
def_delegators :logger, :fatal,
|
7
|
+
:error,
|
8
|
+
:warn,
|
9
|
+
:info,
|
10
|
+
:debug
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@logger = ::Logger.new(STDOUT)
|
14
|
+
@logger.level = level
|
15
|
+
@logger.formatter = formatter
|
16
|
+
end
|
17
|
+
|
18
|
+
def level
|
19
|
+
::Logger::WARN
|
20
|
+
end
|
21
|
+
|
22
|
+
def formatter
|
23
|
+
proc do |severity, datetime, program_name, message|
|
24
|
+
[severity.ljust(5), message].join(" ") + "\n"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def backtrace(backtrace)
|
29
|
+
backtrace.map { |line| (" " * 25) + line }.join("\n")
|
30
|
+
end
|
31
|
+
end # Logger
|
32
|
+
end # Wait
|
data/lib/raisers/base.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class Wait
|
2
|
+
class BaseRaiser
|
3
|
+
def initialize(logger, exception)
|
4
|
+
@logger = logger
|
5
|
+
@exception = exception
|
6
|
+
log
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns +true+ if an exception ought to be raised.
|
10
|
+
def raise?
|
11
|
+
false
|
12
|
+
end
|
13
|
+
|
14
|
+
def log
|
15
|
+
@logger.debug "[Raiser] raise? #{@exception.class.name}: #{raise?}"
|
16
|
+
end
|
17
|
+
end # BaseRaiser
|
18
|
+
end # Wait
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Wait
|
2
|
+
class BaseRescuer
|
3
|
+
attr_reader :exceptions
|
4
|
+
|
5
|
+
def initialize(logger, *exceptions)
|
6
|
+
@logger = logger
|
7
|
+
@exceptions = Array(exceptions).flatten
|
8
|
+
end
|
9
|
+
|
10
|
+
# Logs an exception.
|
11
|
+
def log(exception)
|
12
|
+
@logger.debug "[Rescuer] rescued: #{exception.class.name}: #{exception.message}\n#{@logger.backtrace(exception.backtrace)}"
|
13
|
+
end
|
14
|
+
end # BaseRescuer
|
15
|
+
end # Wait
|
data/lib/testers/base.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
class Wait
|
2
|
+
class BaseTester
|
3
|
+
def initialize(logger, result)
|
4
|
+
@logger = logger
|
5
|
+
@result = result
|
6
|
+
log
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns +true+ if a result if valid.
|
10
|
+
def valid?
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
def log
|
15
|
+
@logger.debug "[Tester] result: #{@result.inspect}"
|
16
|
+
end
|
17
|
+
end # BaseTester
|
18
|
+
end # Wait
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wait
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.4.1
|
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: 2013-01-
|
12
|
+
date: 2013-01-09 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email: todd@paperlesspost.com
|
@@ -17,6 +17,19 @@ executables: []
|
|
17
17
|
extensions: []
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
|
+
- lib/counters/base.rb
|
21
|
+
- lib/delayers/base.rb
|
22
|
+
- lib/delayers/exponential.rb
|
23
|
+
- lib/delayers/regular.rb
|
24
|
+
- lib/initialize.rb
|
25
|
+
- lib/loggers/base.rb
|
26
|
+
- lib/loggers/debug.rb
|
27
|
+
- lib/raisers/base.rb
|
28
|
+
- lib/raisers/passive.rb
|
29
|
+
- lib/rescuers/base.rb
|
30
|
+
- lib/testers/base.rb
|
31
|
+
- lib/testers/passive.rb
|
32
|
+
- lib/testers/truthy.rb
|
20
33
|
- lib/wait.rb
|
21
34
|
homepage: http://github.com/paperlesspost/wait
|
22
35
|
licenses: []
|