def_retry 0.2.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc55787b57b63d7d02f818fcc08844d0ff435568
4
- data.tar.gz: 81dac9e37930cb37d7de3cfe35da89f97b7e99d1
3
+ metadata.gz: 506e2b27bc48952be087188682123b8c47f4254f
4
+ data.tar.gz: c9e8cd16b09b01c64f3a306bddc25a0de38c6c9b
5
5
  SHA512:
6
- metadata.gz: 487af13048562ddb668f83b5e57e7465368efd4135c05a10d89c487cb82ecdce4d8626011d04606af7fd533127c35fa26019ecbdcba3e53833a1852e1e200ce2
7
- data.tar.gz: 4199234a1a2d4ef18302619a48844fadaebb098d9f22b9cf908caa12f83a14f21952fcb99e535b0a3c22b40c0c286b0183ba75e97d612f308ad7fa9571578b8b
6
+ metadata.gz: 19f1ee109469b9b9032c1b5ce44ea8ef9e934fc6013d90e211ce9738c21b5fbde082308a77188efc05178fd73453d4f955aafc42b27bf60b63100ed1bc6ff8fa
7
+ data.tar.gz: e74bd32c7a9cd1cb2082730759196cff27cf7d9863b8c98108ed31f1b3d79f3dfdfda972339153c1500d6f4c7bb4dcf5edc7fac89167e0ba5cdb5fa52b36cdf9
data/README.md CHANGED
@@ -32,22 +32,24 @@ require 'def_retry'
32
32
  class ApiWrapper
33
33
  include DefRetry
34
34
 
35
- def_retry :get_data, on: ApiError do
35
+ def_retry :get_data, on: ApiError do |*args|
36
36
  do_api_call
37
37
  end
38
38
  end
39
39
  ```
40
40
 
41
- This will define an instance method named `:get_data` and rescue the exception
41
+ This will define an instance method named `get_data` and rescue the exception
42
42
  `ApiError` and retry the block:
43
43
 
44
44
  ```ruby
45
- do
45
+ do |*args|
46
46
  do_api_call
47
47
  end
48
48
  ```
49
49
  3 times (the default).
50
50
 
51
+ Any arguments passed to the `get_data(*args)` method will get passed to the block.
52
+
51
53
  ### Retrying a block of code
52
54
 
53
55
  ```ruby
@@ -85,21 +87,23 @@ end
85
87
  ### Create a Retrier with default options
86
88
 
87
89
  ```ruby
88
- require 'def_retry'
89
-
90
+ # config/intializers/retrier.rb
90
91
  Retrier = DefRetry::Retrier.new({
91
92
  on: [ApiError, Timeout],
92
93
  tries: 7,
93
- on_retry: ->(exception, try_count) { log exception },
94
- on_ensure: ->(value, try_count) { log value, try_count },
94
+ on_retry: ->(exception, try_count) { Logger.debug exception },
95
+ on_ensure: ->(value, try_count) { Logger.debug value, try_count },
95
96
  sleep: :exponential,
96
-
97
+ re_raise: false
97
98
  })
99
+
100
+ # later...
101
+ Retrier.run { do_api_call }
98
102
  ```
99
103
 
100
104
  ### Options
101
105
 
102
- These apply to `.def_retry`, `#retryable`, and `DefRetry.retry`:
106
+ These apply to `.def_retry`, `#retryable`, `DefRetry.retry`, and `DefRetry::Retrier.new`:
103
107
  - `:on`: A single class or an array of exception classes to be rescued.
104
108
  - `:tries`: Integer number of maximum retries to run. DefRetry will stop retrying if the retry count reaches this number.
105
109
  - `:sleep`: Either an Integer to pass to `sleep`, a Proc that receives the current try count as its only argument or a Symbol naming one of these sleep strategies: constant, linear, exponential (see: `DefRetry::Retrier::SLEEP_STRATEGIES`).
@@ -14,8 +14,8 @@ module DefRetry
14
14
 
15
15
  module ClassMethods
16
16
  def def_retry(name, options = {}, &block)
17
- define_method name do
18
- DefRetry.retry options, &block
17
+ define_method name do |*args|
18
+ DefRetry.retry options.merge(args: args), &block
19
19
  end
20
20
  end
21
21
  end
@@ -8,6 +8,7 @@ module DefRetry
8
8
  }
9
9
 
10
10
  def initialize(options)
11
+ @args = options.fetch :args, []
11
12
  @tries = options.fetch :tries, DEFAULT_TRIES
12
13
  @on_retry = options.fetch :on_retry, ->(e, n) {}
13
14
  @on_ensure = options.fetch :on_ensure, ->(r, n) {}
@@ -17,13 +18,13 @@ module DefRetry
17
18
  begin
18
19
  @sleep = SLEEP_STRATEGIES.fetch @sleep if @sleep.is_a? Symbol
19
20
  rescue KeyError
20
- raise ArgumentError, "The :sleep option must be a Proc or one of: #{SLEEP_STRATEGIES.keys.join(', ')}"
21
+ raise ArgumentError, "The :sleep option must be an Integer, a Proc, or a Symbol: #{SLEEP_STRATEGIES.keys.join(', ')}"
21
22
  end
22
23
 
23
24
  begin
24
25
  @exceptions = Array options.fetch(:on)
25
26
  rescue KeyError
26
- raise ArgumentError, 'You must specify which :exceptions to retry on'
27
+ raise ArgumentError, 'You must specify which exceptions to retry :on'
27
28
  end
28
29
  end
29
30
 
@@ -32,7 +33,7 @@ module DefRetry
32
33
  @return = nil
33
34
 
34
35
  begin
35
- @return = block.call
36
+ @return = block.call *@args
36
37
  rescue *@exceptions => e
37
38
  @try_count += 1
38
39
  run_sleep_strategy if @sleep
@@ -1,3 +1,3 @@
1
1
  module DefRetry
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -10,17 +10,15 @@ class MockRetryable
10
10
  end
11
11
 
12
12
  describe DefRetry do
13
- let(:mock_retryable) { MockRetryable }
14
-
15
13
  context '.def_retry' do
16
14
  it 'defines an instance method' do
17
- expect(mock_retryable.new).to respond_to :api_call
15
+ expect(MockRetryable.new).to respond_to :api_call
18
16
  end
19
17
  end
20
18
 
21
19
  context '#retryable' do
22
20
  it "returns the block's value" do
23
- mocked = mock_retryable.new
21
+ mocked = MockRetryable.new
24
22
  expect(mocked.retryable(on: Exception) { 2 + 2 }).to be 4
25
23
  end
26
24
  end
@@ -13,7 +13,7 @@ describe DefRetry::Retrier do
13
13
  context '#new' do
14
14
  it 'requires exceptions to be specified' do
15
15
  expect {
16
- DefRetry::Retrier.new({}, -> {})
16
+ DefRetry::Retrier.new({})
17
17
  }.to raise_error ArgumentError
18
18
  end
19
19
 
@@ -97,7 +97,7 @@ describe DefRetry::Retrier do
97
97
 
98
98
  retrier.run &block_exception
99
99
  expect(@exception).to be_kind_of Exception
100
- expect(@retry_count).to be 3 # default limit
100
+ expect(@retry_count).to be 3 # default :tries
101
101
  end
102
102
 
103
103
  it 'passes the return value and retry count to on_ensure' do
@@ -111,7 +111,7 @@ describe DefRetry::Retrier do
111
111
 
112
112
  retrier.run { :ran }
113
113
  expect(@value).to be :ran
114
- expect(@retry_count).to be 0 # default limit
114
+ expect(@retry_count).to be 0
115
115
  end
116
116
  end
117
117
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: def_retry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego Salazar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-03 00:00:00.000000000 Z
11
+ date: 2016-12-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  version: '0'
93
93
  requirements: []
94
94
  rubyforge_project:
95
- rubygems_version: 2.2.2
95
+ rubygems_version: 2.6.7
96
96
  signing_key:
97
97
  specification_version: 4
98
98
  summary: The Retry Pattern in a gem.