take2 0.0.2 → 0.0.3

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: 93023dc58265f6607decc8cb6aa621c3ac538752
4
- data.tar.gz: 99d85d1401815f441b891ac84468dac5cce4860e
3
+ metadata.gz: fdbb5ecf82b31d399cf75eacacd3a7c8b4cf4aaa
4
+ data.tar.gz: 3662448022c2ca158c789982b7d51a62ae81c0e4
5
5
  SHA512:
6
- metadata.gz: d38f2b5982925c8d4a116b14d799e8deb93256bccd886cc0dd0a560eed664f0caf8d5ba158074d15fc9ae2f54df33592b473af0f5611e2f19fba4a4281902d3d
7
- data.tar.gz: 34fb1713275927a3edeee00870331f8e44b182ac1da2dcd0238e5c459f86839b8e03424224da3be84a0c0a472b7aa7de937febd9a3e7006c7da00a28860b3741
6
+ metadata.gz: 153630133ce8f3dee9d7f0ef2f0ad2ca57673591ac08435e11b692124aec32cbae50b4d9b2bed42545156168fc3e60f3fa58e61060f5952d08fd5fd74202e582
7
+ data.tar.gz: 5f73de42c0c6a7381bc6943f5a02d77bc8fc16f893ee59e749699210cd7a4c8f5821d908df8cd830cba92cf59bc254c9b30ab6b2093df86cc4ed9c2da7fd720d
@@ -0,0 +1,53 @@
1
+ # Ruby CircleCI 2.0 configuration file
2
+ #
3
+ # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
+ #
5
+ version: 2
6
+ jobs:
7
+ build:
8
+ docker:
9
+ # specify the version you desire here
10
+ - image: circleci/ruby:2.4-node
11
+
12
+ # Specify service dependencies here if necessary
13
+ # CircleCI maintains a library of pre-built images
14
+ # documented at https://circleci.com/docs/2.0/circleci-images/
15
+ # - image: circleci/postgres:9.4
16
+
17
+ working_directory: ~/take2
18
+
19
+ steps:
20
+ - checkout
21
+
22
+ # Download and cache dependencies
23
+ - restore_cache:
24
+ keys:
25
+ - v1-dependencies-{{ checksum "Gemfile.lock" }}
26
+ # fallback to using the latest cache if no exact match is found
27
+ - v1-dependencies-
28
+
29
+ - run:
30
+ name: install dependencies
31
+ command: |
32
+ bundle install --jobs=4 --retry=3 --path vendor/bundle
33
+
34
+ - save_cache:
35
+ paths:
36
+ - ./vendor/bundle
37
+ key: v1-dependencies-{{ checksum "Gemfile.lock" }}
38
+
39
+ # run tests!
40
+ - run:
41
+ name: run tests
42
+ command: |
43
+ mkdir /tmp/test-results
44
+ TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings)"
45
+
46
+ bundle exec rspec $TEST_FILES --format doc
47
+
48
+ # collect reports
49
+ - store_test_results:
50
+ path: /tmp/test-results
51
+ - store_artifacts:
52
+ path: /tmp/test-results
53
+ destination: test-results
data/Gemfile CHANGED
@@ -5,4 +5,9 @@ gem "rake"
5
5
 
6
6
  group :test do
7
7
  gem "rspec", "3.8.0"
8
+ end
9
+
10
+ group :development, :test do
11
+ gem 'pry'
12
+ gem 'pry-nav'
8
13
  end
@@ -0,0 +1,45 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ take2 (0.0.3)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ coderay (1.1.2)
10
+ diff-lcs (1.3)
11
+ method_source (0.8.2)
12
+ pry (0.10.4)
13
+ coderay (~> 1.1.0)
14
+ method_source (~> 0.8.1)
15
+ slop (~> 3.4)
16
+ pry-nav (0.2.4)
17
+ pry (>= 0.9.10, < 0.11.0)
18
+ rake (12.3.1)
19
+ rspec (3.8.0)
20
+ rspec-core (~> 3.8.0)
21
+ rspec-expectations (~> 3.8.0)
22
+ rspec-mocks (~> 3.8.0)
23
+ rspec-core (3.8.0)
24
+ rspec-support (~> 3.8.0)
25
+ rspec-expectations (3.8.1)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.8.0)
28
+ rspec-mocks (3.8.0)
29
+ diff-lcs (>= 1.2.0, < 2.0)
30
+ rspec-support (~> 3.8.0)
31
+ rspec-support (3.8.0)
32
+ slop (3.6.0)
33
+
34
+ PLATFORMS
35
+ ruby
36
+
37
+ DEPENDENCIES
38
+ pry
39
+ pry-nav
40
+ rake
41
+ rspec (= 3.8.0)
42
+ take2!
43
+
44
+ BUNDLED WITH
45
+ 1.16.4
data/README.md CHANGED
@@ -1,17 +1,20 @@
1
1
  ## Take2
2
- #
2
+ [![CircleCI](https://circleci.com/gh/restaurant-cheetah/take2/tree/master.svg?style=shield)](https://circleci.com/gh/restaurant-cheetah/take2/tree/master)
3
+ ![Gem](https://img.shields.io/gem/dt/take2.svg)
4
+ ![GitHub last commit](https://img.shields.io/github/last-commit/restaurant-cheetah/take2.svg)
5
+ ![Gem](https://img.shields.io/gem/v/take2.svg)
3
6
  Define rules for retrying behavior.
4
7
  Yield block of code into the public api of the take2.
5
8
  Things getting take two :)
6
9
 
7
10
  ## Install
8
- #
9
- ```
11
+
12
+ ```ruby
10
13
  gem install take2
11
14
  ```
12
15
  ## Examples
13
- #
14
- ```
16
+
17
+ ```ruby
15
18
  class KratosService
16
19
  include Take2
17
20
 
@@ -39,14 +42,22 @@ class KratosService
39
42
  end
40
43
  end
41
44
 
45
+ # Pass custom options per method call
46
+ # The class defaults will not be overwritten
47
+ def kill_baldur
48
+ call_api_with_retry(retries: 2, retriable: [IOError], retry_proc: proc {}, retry_condition_proc: proc {}, time_to_sleep: 1.11) do
49
+ # Some logic that might raise..
50
+ end
51
+ end
52
+
42
53
  end
43
54
 
44
- KratosService.new.call_boy =>
45
- KratosService - Retrying.. 3 of 3 (Release the Kraken...many times!!)
46
- KratosService - Retrying.. 2 of 3 (Release the Kraken...many times!!)
47
- KratosService - Retrying.. 1 of 3 (Release the Kraken...many times!!)
55
+ KratosService.new.call_boy
56
+ #=> KratosService - Retrying.. 3 of 3 (Release the Kraken...many times!!)
57
+ #=> KratosService - Retrying.. 2 of 3 (Release the Kraken...many times!!)
58
+ #=> KratosService - Retrying.. 1 of 3 (Release the Kraken...many times!!)
48
59
  # After the retrying is done, original error re-raised
49
- Net::HTTPRetriableError: Release the Kraken...many times!!
60
+ #=> Net::HTTPRetriableError: Release the Kraken...many times!!
50
61
 
51
62
  # Not wrapping with method
52
63
  KratosService.new.call_api_with_retry { 1 / 0 }
@@ -62,8 +73,8 @@ KratosService.retriable_configuration
62
73
 
63
74
  ## Configurations
64
75
  #### could be implemented as rails initializer
65
- #
66
- ```
76
+
77
+ ```ruby
67
78
  # config/initializers/take2.rb
68
79
 
69
80
  Take2.configure do |config|
@@ -23,6 +23,10 @@ module Take2
23
23
  @configuration = Configuration.new(options)
24
24
  end
25
25
 
26
+ def self.local_defaults(options)
27
+ configuration.validate_options(options)
28
+ end
29
+
26
30
  def self.configure
27
31
  yield(configuration) if block_given?
28
32
  end
@@ -33,7 +37,7 @@ module Take2
33
37
  # The raised error could be the defined retriable or it child.
34
38
  #
35
39
  # Example:
36
- # class KatorzaService
40
+ # class PizzaService
37
41
  # include Take2
38
42
  #
39
43
  # number_of_retries 3
@@ -51,8 +55,9 @@ module Take2
51
55
  # end
52
56
  #
53
57
  # end
54
- def call_api_with_retry
58
+ def call_api_with_retry(options = {})
55
59
  config = self.class.retriable_configuration
60
+ config.merge! Take2.local_defaults(options) unless options.empty?
56
61
  tries ||= config[:retries]
57
62
  begin
58
63
  yield
@@ -75,12 +80,12 @@ module Take2
75
80
  # Sets number of retries.
76
81
  #
77
82
  # Example:
78
- # class KatorzaService
83
+ # class PizzaService
79
84
  # include Take2
80
85
  # number_of_retries 3
81
86
  # end
82
87
  # Arguments:
83
- # num: Positive integer
88
+ # num: integer
84
89
  def number_of_retries(num)
85
90
  raise ArgumentError, 'Must be positive Integer' unless num.is_a?(Integer) && num.positive?
86
91
  self.retries = num
@@ -89,13 +94,14 @@ module Take2
89
94
  # Sets list of errors on which the block will retry.
90
95
  #
91
96
  # Example:
92
- # class KatorzaService
97
+ # class PizzaService
93
98
  # include Take2
94
99
  # retriable_errors Net::HTTPRetriableError, Errno::ECONNRESET
95
100
  # end
96
101
  # Arguments:
97
102
  # errors: List of retiable errors
98
103
  def retriable_errors(*errors)
104
+ raise ArgumentError, 'All retriable errors must be StandardError decendants' unless errors.all? { |e| e <= StandardError }
99
105
  self.retriable = errors
100
106
  end
101
107
 
@@ -103,12 +109,12 @@ module Take2
103
109
  # If set, it MUST result to +false+ with number left retries greater that zero in order to retry.
104
110
  #
105
111
  # Example:
106
- # class KatorzaService
112
+ # class PizzaService
107
113
  # include Take2
108
114
  # retriable_condition proc { |error| error.response.status_code < 500 }
109
115
  # end
110
116
  # Arguments:
111
- # proc: Proc. The +proc+ called by default with the raised error argument
117
+ # proc: Proc. The proc called by default with the raised error argument
112
118
  def retriable_condition(proc)
113
119
  raise ArgumentError, 'Must be callable' unless proc.respond_to?(:call)
114
120
  self.retry_condition_proc = proc
@@ -117,12 +123,12 @@ module Take2
117
123
  # Defines a proc that is called *before* retry attempt.
118
124
  #
119
125
  # Example:
120
- # class KatorzaService
126
+ # class PizzaService
121
127
  # include Take2
122
128
  # on_retry proc { |error, tries| puts "Retrying.. #{tries} of #{self.class.retriable_configuration[:retries]}" }
123
129
  # end
124
130
  # Arguments:
125
- # proc: Proc. The +proc+ called by default with the raised error and number of left retries.
131
+ # proc: Proc. The proc called by default with the raised error and number of left retries.
126
132
  def on_retry(proc)
127
133
  raise ArgumentError, 'Must be callable' unless proc.respond_to?(:call)
128
134
  self.retry_proc = proc
@@ -131,12 +137,12 @@ module Take2
131
137
  # Sets number of seconds to sleep before next retry.
132
138
  #
133
139
  # Example:
134
- # class KatorzaService
140
+ # class PizzaService
135
141
  # include Take2
136
142
  # sleep_before_retry 1.5
137
143
  # end
138
144
  # Arguments:
139
- # seconds: Positive number.
145
+ # seconds: number
140
146
  def sleep_before_retry(seconds)
141
147
  raise ArgumentError, 'Must be positive numer' unless (seconds.is_a?(Integer) || seconds.is_a?(Float)) && seconds.positive?
142
148
  self.time_to_sleep = seconds
@@ -17,12 +17,7 @@ module Take2
17
17
  @retry_condition_proc = proc { false }
18
18
  @time_to_sleep = 3
19
19
  # Overwriting the defaults
20
- options.each do |k, v|
21
- raise ArgumentError, "#{k} is not a valid configuration" unless CONFIG_ATTRS.include?(k)
22
- raise ArgumentError, "#{k} must be positive integer" unless v.is_a?(Integer) && v.positive?
23
- raise ArgumentError, "#{k} must be positive number" unless (v.is_a?(Integer) || v.is_a?(Float)) && v.positive?
24
- instance_variable_set(:"@#{k}", v)
25
- end
20
+ validate_options(options, &setter)
26
21
  end
27
22
 
28
23
  def to_hash
@@ -35,5 +30,26 @@ module Take2
35
30
  self.public_send(value)
36
31
  end
37
32
 
33
+ def validate_options(options, &setter)
34
+ options.each do |k, v|
35
+ raise ArgumentError, "#{k} is not a valid configuration" unless CONFIG_ATTRS.include?(k)
36
+ case k
37
+ when :retries
38
+ raise ArgumentError, "#{k} must be positive integer" unless v.is_a?(Integer) && v.positive?
39
+ when :time_to_sleep
40
+ raise ArgumentError, "#{k} must be positive number" unless (v.is_a?(Integer) || v.is_a?(Float)) && v >= 0
41
+ when :retriable
42
+ raise ArgumentError, "#{k} must be array of retriable errors" unless v.is_a?(Array)
43
+ when :retry_proc, :retry_condition_proc
44
+ raise ArgumentError, "#{k} must be Proc" unless v.is_a?(Proc)
45
+ end
46
+ setter.call(k, v) if block_given?
47
+ end
48
+ end
49
+
50
+ def setter
51
+ proc { |key, value| instance_variable_set(:"@#{key}", value) }
52
+ end
53
+
38
54
  end
39
55
  end
@@ -1,3 +1,3 @@
1
1
  module Take2
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,2 +1,3 @@
1
1
  require 'rspec'
2
- require 'take2'
2
+ require 'take2'
3
+ require 'pry'
@@ -0,0 +1,125 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Take2::Configuration do
4
+
5
+ describe 'default configurations' do
6
+
7
+ let(:default) { described_class.new }
8
+
9
+ it 'has correct default value for retries' do
10
+ expect(default.retries).to eql 3
11
+ end
12
+
13
+ it 'has correct default retriable errors array' do
14
+ expect(default.retriable).to eql [
15
+ Net::HTTPServerError,
16
+ Net::HTTPServerException,
17
+ Net::HTTPRetriableError,
18
+ Errno::ECONNRESET,
19
+ IOError,
20
+ ].freeze
21
+ end
22
+
23
+ it 'has default proc for retry_proc' do
24
+ p = proc {}
25
+ expect(default.retry_proc.call).to eql p.call
26
+ end
27
+
28
+ it 'has default proc for retry_condition_proc' do
29
+ p = proc {false}
30
+ expect(default.retry_condition_proc.call).to eql p.call
31
+ end
32
+
33
+ it 'has correct default value for time_to_sleep' do
34
+ expect(default.time_to_sleep).to eql 3
35
+ end
36
+
37
+ end
38
+
39
+ describe 'overwriting the default configurations' do
40
+
41
+ context 'with valid hash' do
42
+
43
+ let!(:new_configs_hash) {
44
+ {
45
+ retries: 2,
46
+ retriable: [Net::HTTPRetriableError],
47
+ retry_condition_proc: proc { true },
48
+ retry_proc: proc { 2*2 },
49
+ time_to_sleep: 0
50
+ }
51
+ }
52
+
53
+ let!(:new_configuration) { described_class.new(new_configs_hash).to_hash }
54
+
55
+ [:retries, :retriable, :retry_proc, :retry_condition_proc, :time_to_sleep].each do |key|
56
+ it "sets the #{key} key" do
57
+ if new_configs_hash[key].respond_to?(:call)
58
+ expect(new_configuration[key].call).to eql new_configs_hash[key].call
59
+ else
60
+ expect(new_configuration[key]).to eql new_configs_hash[key]
61
+ end
62
+ end
63
+ end
64
+
65
+ end
66
+
67
+ context 'with invalid hash' do
68
+
69
+ context 'when retries set to invalid value' do
70
+
71
+ it 'raises ArgumentError' do
72
+
73
+ expect { described_class.new(retries: -1) }.to raise_error ArgumentError
74
+ expect { described_class.new(retries: 0) }.to raise_error ArgumentError
75
+
76
+ end
77
+
78
+ end
79
+
80
+ context 'when time_to_sleep set to invalid value' do
81
+
82
+ it 'raises ArgumentError' do
83
+
84
+ expect { described_class.new(time_to_sleep: -1) }.to raise_error ArgumentError
85
+
86
+ end
87
+
88
+ end
89
+
90
+ context 'when retriable set to invalid value' do
91
+
92
+ it 'raises ArgumentError' do
93
+
94
+ expect { described_class.new(retriable: StandardError) }.to raise_error ArgumentError
95
+
96
+ end
97
+
98
+ end
99
+
100
+ context 'when retry_proc set to invalid value' do
101
+
102
+ it 'raises ArgumentError' do
103
+
104
+ expect { described_class.new(retry_proc: {}) }.to raise_error ArgumentError
105
+
106
+ end
107
+
108
+ end
109
+
110
+ context 'when retry_condition_proc set to invalid value' do
111
+
112
+ it 'raises ArgumentError' do
113
+
114
+ expect { described_class.new(retry_condition_proc: {}) }.to raise_error ArgumentError
115
+
116
+ end
117
+
118
+ end
119
+
120
+ end
121
+
122
+ end
123
+
124
+
125
+ end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'take2'
3
2
 
4
3
  RSpec.describe Take2 do
5
4
 
@@ -41,54 +40,115 @@ RSpec.describe Take2 do
41
40
 
42
41
  end
43
42
 
44
- describe 'included helpers' do
43
+ describe 'included class helpers' do
45
44
 
46
45
  subject { klass.retriable_configuration }
47
46
 
48
- describe '#number_of_retries' do
47
+ describe '.number_of_retries' do
48
+
49
+ context 'with valid argument' do
50
+
51
+ it 'sets the :retries attribute' do
52
+ klass.number_of_retries 1
53
+ expect(subject[:retries]).to eql 1
54
+ end
55
+
56
+ end
57
+
58
+ context 'with invalid argument' do
59
+
60
+ it 'raises ArgumentError' do
61
+ expect { klass.number_of_retries 0 }.to raise_error ArgumentError
62
+ end
49
63
 
50
- it 'sets the :retries attribute' do
51
- klass.number_of_retries 1
52
- expect(subject[:retries]).to eql 1
53
64
  end
54
65
 
55
66
  end
56
67
 
57
- describe '#retriable_errors' do
68
+ describe '.retriable_errors' do
69
+
70
+ context 'with valid argument' do
71
+
72
+ it 'sets the :retriable_errors attribute' do
73
+ retriables = IOError
74
+ klass.retriable_errors retriables
75
+ expect(subject[:retriable]).to eql [retriables]
76
+ end
77
+
78
+ end
79
+
80
+ context 'with invalid argument' do
81
+
82
+ it 'raises ArgumentError' do
83
+ class Klass; end
84
+ expect { klass.retriable_errors Klass }.to raise_error ArgumentError
85
+ end
58
86
 
59
- it 'sets the :retriable_errors attribute' do
60
- retriables = IOError
61
- klass.retriable_errors retriables
62
- expect(subject[:retriable]).to eql [retriables]
63
87
  end
64
88
 
65
89
  end
66
90
 
67
- describe '#retriable_condition' do
91
+ describe '.retriable_condition' do
92
+
93
+ context 'with valid argument' do
94
+
95
+ it 'sets the :retriable_condition attribute' do
96
+ retriable_proc = proc { 'Ho-Ho-Ho' }
97
+ klass.retriable_condition retriable_proc
98
+ expect(subject[:retry_condition_proc].call).to eql retriable_proc.call
99
+ end
100
+
101
+ end
102
+
103
+ context 'with invalid argument' do
104
+
105
+ it 'raises ArgumentError' do
106
+ expect { klass.retriable_condition Class.new }.to raise_error ArgumentError
107
+ end
68
108
 
69
- it 'sets the :retriable_condition attribute' do
70
- retriable_proc = proc { 'Ho-Ho-Ho' }
71
- klass.retriable_condition retriable_proc
72
- expect(subject[:retry_condition_proc].call).to eql retriable_proc.call
73
109
  end
74
110
 
75
111
  end
76
112
 
77
- describe '#on_retry' do
113
+ describe '.on_retry' do
114
+
115
+ context 'with valid argument' do
116
+
117
+ it 'sets the :on_retry attribute' do
118
+ retry_proc = proc { |el| el }
119
+ klass.on_retry retry_proc
120
+ expect(subject[:retry_proc].call).to eql retry_proc.call
121
+ end
122
+
123
+ end
124
+
125
+ context 'with invalid argument' do
126
+
127
+ it 'raises ArgumentError' do
128
+ expect { klass.on_retry Class.new }.to raise_error ArgumentError
129
+ end
78
130
 
79
- it 'sets the :on_retry attribute' do
80
- retry_proc = proc { |el| el }
81
- klass.on_retry retry_proc
82
- expect(subject[:retry_proc].call).to eql retry_proc.call
83
131
  end
84
132
 
85
133
  end
86
134
 
87
- describe '#sleep_before_retry' do
135
+ describe '.sleep_before_retry' do
136
+
137
+ context 'with valid argument' do
138
+
139
+ it 'sets the :sleep_before_retry attribute' do
140
+ klass.sleep_before_retry 3.5
141
+ expect(subject[:time_to_sleep]).to eql 3.5
142
+ end
143
+
144
+ end
145
+
146
+ context 'with invalid argument' do
147
+
148
+ it 'raises ArgumentError' do
149
+ expect { klass.sleep_before_retry -1 }.to raise_error ArgumentError
150
+ end
88
151
 
89
- it 'sets the :sleep_before_retry attribute' do
90
- klass.sleep_before_retry 3.5
91
- expect(subject[:time_to_sleep]).to eql 3.5
92
152
  end
93
153
 
94
154
  end
@@ -140,7 +200,7 @@ RSpec.describe Take2 do
140
200
  it 'retries correct number of times' do
141
201
  expect do
142
202
  object.call_api_with_retry { wrath_the_gods_with retriable_error } rescue nil
143
- end.to change{@tries}.from(0).to(klass.retriable_configuration[:retries] + 1)
203
+ end.to change {@tries}.from(0).to(klass.retriable_configuration[:retries] + 1)
144
204
  end
145
205
 
146
206
  it 'calls the retry proc' do
@@ -171,6 +231,50 @@ RSpec.describe Take2 do
171
231
 
172
232
  end
173
233
 
234
+ context 'with custom options' do
235
+
236
+ let(:retriable_error) { Net::HTTPRetriableError.new 'Release the Kraken...many times!!', nil }
237
+ let(:new_retriable_error) { IOError.new 'You shall not PASS!' }
238
+
239
+ before(:each) { @tries = 0 }
240
+
241
+ it 'overwrites the :retries' do
242
+ expect do
243
+ object.call_api_with_retry(retries: 3) { wrath_the_gods_with retriable_error } rescue nil
244
+ end.to change { @tries }.from(0).to(4)
245
+ end
246
+
247
+ it 'overwrites the :retry_proc' do
248
+ new_proc = proc { 1**1 }
249
+ expect(new_proc).to receive(:call).exactly(klass.retriable_configuration[:retries])
250
+ object.call_api_with_retry(retry_proc: new_proc) { wrath_the_gods_with retriable_error } rescue nil
251
+ end
252
+
253
+ it 'overwrites the :retry_condition_proc' do
254
+ new_proc = proc { true }
255
+ expect(new_proc).to receive(:call).exactly(klass.retriable_configuration[:retries])
256
+ object.call_api_with_retry(retry_condition_proc: new_proc) { wrath_the_gods_with retriable_error } rescue nil
257
+ end
258
+
259
+ it 'overwrites the :time_to_sleep' do
260
+ allow_any_instance_of(Object).to receive(:sleep).with(1.66)
261
+ object.call_api_with_retry(time_to_sleep: 1.66) { wrath_the_gods_with retriable_error } rescue nil
262
+ end
263
+
264
+ it 'overwrites the :retriable' do
265
+ expect do
266
+ object.call_api_with_retry(retriable: [new_retriable_error]) { wrath_the_gods_with retriable_error } rescue nil
267
+ end.to change { @tries }.from(0).to(1)
268
+ end
269
+
270
+ it 'raises ArgumentError if there are invalid keys' do
271
+ expect do
272
+ object.call_api_with_retry(invalid_key: :nope) { wrath_the_gods_with retriable_error }
273
+ end.to raise_error ArgumentError
274
+ end
275
+
276
+ end
277
+
174
278
  end
175
279
 
176
280
  end
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.email = ["evnomadx@gmail.com"]
10
10
  s.homepage = "https://github.com/restaurant-cheetah/take2"
11
11
  s.summary = "Provides Take2 for your APIs calls"
12
- s.description = "Easily define Take2 / retry behavior for API wrappers, service objects or a single method."
12
+ s.description = "Retry API calls, methods or blocks of code. Define take2 retry behavior or use defaults and you good to go."
13
13
  s.post_install_message = "Getting Take2 is dead easy!"
14
14
 
15
15
  all_files = `git ls-files`.split("\n")
metadata CHANGED
@@ -1,28 +1,30 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: take2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anton Magids
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-13 00:00:00.000000000 Z
11
+ date: 2018-09-24 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Easily define Take2 / retry behavior for API wrappers, service objects
14
- or a single method.
13
+ description: Retry API calls, methods or blocks of code. Define take2 retry behavior
14
+ or use defaults and you good to go.
15
15
  email:
16
16
  - evnomadx@gmail.com
17
17
  executables: []
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
+ - ".circleci/config.yml"
21
22
  - ".github/ISSUE_TEMPLATE/bug_report.md"
22
23
  - ".github/ISSUE_TEMPLATE/feature_request.md"
23
24
  - ".gitignore"
24
25
  - CHANGELOG.md
25
26
  - Gemfile
27
+ - Gemfile.lock
26
28
  - LICENSE
27
29
  - README.md
28
30
  - Rakefile
@@ -30,6 +32,7 @@ files:
30
32
  - lib/take2/configuration.rb
31
33
  - lib/take2/version.rb
32
34
  - spec/spec_helper.rb
35
+ - spec/take2/configuration_spec.rb
33
36
  - spec/take2_spec.rb
34
37
  - take2.gemspec
35
38
  homepage: https://github.com/restaurant-cheetah/take2
@@ -58,4 +61,5 @@ specification_version: 4
58
61
  summary: Provides Take2 for your APIs calls
59
62
  test_files:
60
63
  - spec/spec_helper.rb
64
+ - spec/take2/configuration_spec.rb
61
65
  - spec/take2_spec.rb