retryable-rb 1.0.0 → 1.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.
- data/CHANGELOG +3 -1
- data/Manifest +0 -1
- data/README.markdown +9 -3
- data/lib/retryable.rb +3 -3
- data/retryable-rb.gemspec +3 -3
- metadata +4 -5
- data/retryable.gemspec +0 -34
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
data/README.markdown
CHANGED
@@ -6,7 +6,7 @@ Retryable is an easy to use DSL to retry code if an exception is raised. This i
|
|
6
6
|
Installation
|
7
7
|
------------
|
8
8
|
|
9
|
-
gem install retryable
|
9
|
+
gem install retryable-rb
|
10
10
|
|
11
11
|
# In your ruby application
|
12
12
|
require 'retryable'
|
@@ -28,7 +28,7 @@ Code wrapped in a Retryable block will be retried if a failure occurs. As such,
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
By default, Retryable will rescue any exception inherited from `Exception`, retry once (for a total of two attempts) and sleep for 100 milliseconds. You can choose additional options by passing them via an options `Hash`.
|
31
|
+
By default, Retryable will rescue any exception inherited from `Exception`, retry once (for a total of two attempts) and sleep for a random amount time (between 0 to 100 milliseconds, in 10 millisecond increments). You can choose additional options by passing them via an options `Hash`.
|
32
32
|
|
33
33
|
retryable :on => Timeout::Error, :times => 3, :sleep => 1 do
|
34
34
|
# code here...
|
@@ -40,6 +40,12 @@ This example will only retry on a `Timeout::Error`, retry 3 times (for a total o
|
|
40
40
|
# code here...
|
41
41
|
end
|
42
42
|
|
43
|
+
You can also have Ruby retry immediately after a failure by passing `false` as the sleep option.
|
44
|
+
|
45
|
+
retryable :sleep => false do
|
46
|
+
# code here...
|
47
|
+
end
|
48
|
+
|
43
49
|
Retryable also allows for callbacks to be defined, which is useful to log failures for analytics purposes or cleanup after repeated failures. Retryable has three types of callbacks: `then`, `finally`, and `always`.
|
44
50
|
|
45
51
|
`then`: Run every time a failure occurs.
|
@@ -79,4 +85,4 @@ If you are using Retryable once or outside of a class, you can also use it via i
|
|
79
85
|
Credits
|
80
86
|
-------
|
81
87
|
|
82
|
-
Retryable was inspired by code written by [Michael Celona](http://github.com/mcelona) and later assisted by [David Malin](http://github.com/dmalin).
|
88
|
+
Retryable was inspired by code written by [Michael Celona](http://github.com/mcelona) and later assisted by [David Malin](http://github.com/dmalin).
|
data/lib/retryable.rb
CHANGED
@@ -2,7 +2,7 @@ module Retryable
|
|
2
2
|
extend self
|
3
3
|
|
4
4
|
def retryable(options = {})
|
5
|
-
opts = {:on => Exception, :times => 1
|
5
|
+
opts = {:on => Exception, :times => 1}.merge(options)
|
6
6
|
handler = {}
|
7
7
|
|
8
8
|
retry_exception = opts[:on].is_a?(Array) ? opts[:on] : [opts[:on]]
|
@@ -17,7 +17,7 @@ module Retryable
|
|
17
17
|
opts[:then].call(exception, handler, attempts, retries, times) if opts[:then]
|
18
18
|
|
19
19
|
if attempts <= times
|
20
|
-
sleep opts[:sleep]
|
20
|
+
sleep(opts[:sleep] || (rand(11) / 100.0)) unless opts[:sleep] == false
|
21
21
|
retries -= 1
|
22
22
|
retry
|
23
23
|
else
|
@@ -30,4 +30,4 @@ module Retryable
|
|
30
30
|
|
31
31
|
yield(handler)
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
data/retryable-rb.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{retryable-rb}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.1.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Robert Sosinski"]
|
9
|
-
s.date = %q{2011-04-
|
9
|
+
s.date = %q{2011-04-17}
|
10
10
|
s.description = %q{Easy to use DSL to retry code if an exception is raised.}
|
11
11
|
s.email = %q{email@robertsosinski.com}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.markdown", "lib/retryable.rb"]
|
13
|
-
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.markdown", "Rakefile", "lib/retryable.rb", "retryable-rb.gemspec", "
|
13
|
+
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.markdown", "Rakefile", "lib/retryable.rb", "retryable-rb.gemspec", "test/retryable_test.rb"]
|
14
14
|
s.homepage = %q{http://github.com/robertsosinski/retryable}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Retryable-rb", "--main", "README.markdown"]
|
16
16
|
s.require_paths = ["lib"]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: retryable-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 1.0.0
|
10
|
+
version: 1.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Robert Sosinski
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-17 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -53,7 +53,6 @@ files:
|
|
53
53
|
- Rakefile
|
54
54
|
- lib/retryable.rb
|
55
55
|
- retryable-rb.gemspec
|
56
|
-
- retryable.gemspec
|
57
56
|
- test/retryable_test.rb
|
58
57
|
has_rdoc: true
|
59
58
|
homepage: http://github.com/robertsosinski/retryable
|
data/retryable.gemspec
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = %q{retryable}
|
5
|
-
s.version = "1.0.0"
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Robert Sosinski"]
|
9
|
-
s.date = %q{2011-04-11}
|
10
|
-
s.description = %q{Easy to use DSL to retry code if an exception is raised.}
|
11
|
-
s.email = %q{email@robertsosinski.com}
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.markdown", "lib/retryable.rb"]
|
13
|
-
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.markdown", "Rakefile", "lib/retryable.rb", "retryable.gemspec", "test/retryable_test.rb"]
|
14
|
-
s.homepage = %q{http://github.com/robertsosinski/retryable}
|
15
|
-
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Retryable", "--main", "README.markdown"]
|
16
|
-
s.require_paths = ["lib"]
|
17
|
-
s.rubyforge_project = %q{retryable}
|
18
|
-
s.rubygems_version = %q{1.3.7}
|
19
|
-
s.summary = %q{Easy to use DSL to retry code if an exception is raised.}
|
20
|
-
s.test_files = ["test/retryable_test.rb"]
|
21
|
-
|
22
|
-
if s.respond_to? :specification_version then
|
23
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
24
|
-
s.specification_version = 3
|
25
|
-
|
26
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
|
-
s.add_development_dependency(%q<echoe>, [">= 4.3.1"])
|
28
|
-
else
|
29
|
-
s.add_dependency(%q<echoe>, [">= 4.3.1"])
|
30
|
-
end
|
31
|
-
else
|
32
|
-
s.add_dependency(%q<echoe>, [">= 4.3.1"])
|
33
|
-
end
|
34
|
-
end
|