attempt 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9f4489fdcd16a1e4fd93187cf684afc4eb42b9d1b35987372ce099b0081ab938
4
- data.tar.gz: 0d359e069dded75e7e0871c1903f5950275b5f033e22490ea3358c55e8883df0
3
+ metadata.gz: c954f55aef2408950c9aeafde149fa2562576e62af9f6a0215f6dc90bec184eb
4
+ data.tar.gz: 1951edd8ffc473008f37850504fda990593721378c26c84c3375f9c58df868ef
5
5
  SHA512:
6
- metadata.gz: 61728e4d946893471d103dfa8f2114212bf9438774b6636cff3744186fe0c99f7e48687969abe8627aa48b4cdb0d7203666978ded8bae2b3ba9d4f1e2616d57b
7
- data.tar.gz: a34ac935d3fde78fed37884e93f9019c015a106c15f741732fedd2184c298eb1233ab23f967dfb85bfa6eaf1bb873d6e208730c20cf59cf40bbf101122f5c1a5
6
+ metadata.gz: 687f808427b5c2a686c89892af635b5528886207c6bf0a38036c0b4cceb92592a2a89579301083eb7a3ca01e297878e02ccf57148504e4fb10f1188ebf1841c4
7
+ data.tar.gz: '028d54de4b4602f76d2ffae474c1f1bdc2835604aac33d24cc503cdd250661839bb6eefcf15a7e8fa0d5e25af401cf5a91ff144213c2599551f3d28d38788972'
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGES.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.6.2 - 2-Jun-2022
2
+ * The safe_timeout library is not used on MS Windows.
3
+
1
4
  ## 0.6.1 - 20-Oct-2020
2
5
  * Switched the README, MANIFEST and CHANGES to markdown format.
3
6
  * Fiddling with the .travis.yml file again.
data/Gemfile CHANGED
@@ -1,8 +1,2 @@
1
- source 'https://rubygems.org' do
2
- gem 'rake'
3
- gem 'structured_warnings', '~> 0.4.0'
4
- gem 'safe_timeout', '~> 0.0.5'
5
- group 'test' do
6
- gem 'rspec', '~> 3.9'
7
- end
8
- end
1
+ source 'https://rubygems.org'
2
+ gemspec
data/README.md CHANGED
@@ -1,42 +1,40 @@
1
1
  ## Description
2
-
3
2
  A thin wrapper for begin + rescue + sleep + retry.
4
3
 
5
4
  ## Installation
5
+ `gem install attempt`
6
6
 
7
- gem install attempt
7
+ ## Adding the trusted cert
8
+ `gem cert --add <(curl -Ls https://raw.githubusercontent.com/djberg96/attempt/main/certs/djberg96_pub.pem)`
8
9
 
9
10
  ## Synopsis
11
+ ```ruby
12
+ require 'attempt'
13
+
14
+ # Attempt to ftp to some host, trying 3 times with 30 seconds between
15
+ # attempts before finally raising an error.
10
16
 
11
- ```
12
- require 'attempt'
13
-
14
- # Attempt to ftp to some host, trying 3 times with 30 seconds between
15
- # attempts before finally raising an error.
17
+ attempt(tries: 3, interval: 30){
18
+ Net::FTP.open(host, user, passwd){ ... }
19
+ }
16
20
 
17
- attempt(tries: 3, interval: 30){
18
- Net::FTP.open(host, user, passwd){ ... }
19
- }
20
-
21
- # Or, do things the long way...
22
- code = Attempt.new do |a|
23
- a.tries = 3
24
- a.interval = 30
25
- end
26
-
27
- code.attempt{
28
- Net::FTP.open(host, user, passwd){ ... }
29
- }
21
+ # Or, do things the long way...
22
+ code = Attempt.new do |a|
23
+ a.tries = 3
24
+ a.interval = 30
25
+ end
26
+
27
+ code.attempt{
28
+ Net::FTP.open(host, user, passwd){ ... }
29
+ }
30
30
  ```
31
31
 
32
32
  ## Known Bugs
33
-
34
33
  None that I'm aware of. If you find any bugs, please log them on the project page at:
35
34
 
36
35
  https://github.com/djberg96/attempt
37
36
 
38
37
  ## Caveats
39
-
40
38
  Use with caution. Specifically, make sure you aren't inadvertantly
41
39
  wrapping code that already performs sleep + retry. Otherwise, you'll
42
40
  end up with a series of nested retry's that could take much longer to
@@ -49,36 +47,30 @@ As of version 0.3.0, this library requires structured_warnings 0.3.0 or
49
47
  later. This is necessary because of changes in Ruby 2.4.
50
48
 
51
49
  Update: I've switched from the timeout library in the standard library to
52
- the safe_timeout library which should improve things. In addition, the
53
- structured_warnings library requirement is now 0.4.0 or later in order to
54
- work with Ruby 2.7.
50
+ the safe_timeout library on non-Windows platforms which should improve things.
51
+ In addition, the structured_warnings library requirement is now 0.4.0 or later
52
+ in order to work with Ruby 2.7.
55
53
 
56
54
  ## Future Plans
57
-
58
55
  Add the ability to set an absolute maximum number of seconds to prevent
59
56
  nested sleep/retry from delaying attempts longer than expected.
60
57
 
61
58
  Replace the timeout library with a self selecting pipe if possible.
62
59
 
63
60
  ## Acknowledgements
64
-
65
61
  This library is partially based on Mark Fowler's 'Attempt' Perl module.
66
62
 
67
63
  ## Warranty
68
-
69
64
  This package is provided "as is" and without any express or
70
65
  implied warranties, including, without limitation, the implied
71
66
  warranties of merchantability and fitness for a particular purpose.
72
67
 
73
68
  ## License
74
-
75
69
  Apache-2.0
76
70
 
77
71
  ## Copyright
78
-
79
- (C) 2006-2020, Daniel J. Berger
72
+ (C) 2006-2022, Daniel J. Berger
80
73
  All Rights Reserved
81
74
 
82
75
  ## Author
83
-
84
76
  Daniel J. Berger
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ namespace :gem do
8
8
  desc 'Build the attempt gem'
9
9
  task :create => [:clean] do
10
10
  require 'rubygems/package'
11
- spec = eval(IO.read('attempt.gemspec'))
11
+ spec = Gem::Specification.load('attempt.gemspec')
12
12
  spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
13
13
  Gem::Package.build(spec)
14
14
  end
data/attempt.gemspec CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = 'attempt'
5
- spec.version = '0.6.1'
5
+ spec.version = '0.6.2'
6
6
  spec.author = 'Daniel J. Berger'
7
7
  spec.license = 'Apache-2.0'
8
8
  spec.email = 'djberg96@gmail.com'
@@ -13,12 +13,13 @@ Gem::Specification.new do |spec|
13
13
  spec.cert_chain = Dir['certs/*']
14
14
 
15
15
  spec.metadata = {
16
- 'changelog_uri' => 'https://github.com/djberg96/attempt/blob/master/CHANGES',
17
- 'source_code_uri' => 'https://github.com/djberg96/attempt/blob/master/lib/attempt.rb',
16
+ 'changelog_uri' => 'https://github.com/djberg96/attempt/blob/main/CHANGES.md',
17
+ 'source_code_uri' => 'https://github.com/djberg96/attempt/blob/main/lib/attempt.rb',
18
18
  'bug_tracker_uri' => 'https://github.com/djberg96/attempt/issues',
19
19
  'wiki_uri' => 'https://github.com/djberg96/attempt/wiki'
20
20
  }
21
21
 
22
+ spec.add_development_dependency('rake')
22
23
  spec.add_dependency('structured_warnings', '~> 0.4.0')
23
24
  spec.add_dependency('safe_timeout', '~> 0.0.5')
24
25
  spec.add_dependency('rspec', '~> 3.9')
data/lib/attempt.rb CHANGED
@@ -1,12 +1,18 @@
1
- require 'safe_timeout'
1
+ # frozen_string_literal: true
2
+
3
+ if File::ALT_SEPARATOR
4
+ require 'timeout'
5
+ else
6
+ require 'safe_timeout'
7
+ end
8
+
2
9
  require 'structured_warnings'
3
10
 
4
11
  # The Attempt class encapsulates methods related to multiple attempts at
5
12
  # running the same method before actually failing.
6
13
  class Attempt
7
-
8
14
  # The version of the attempt library.
9
- VERSION = '0.6.1'.freeze
15
+ VERSION = '0.6.2'
10
16
 
11
17
  # Warning raised if an attempt fails before the maximum number of tries
12
18
  # has been reached.
@@ -51,7 +57,7 @@ class Attempt
51
57
  # * warnings - Boolean value that indicates whether or not errors are treated as warnings
52
58
  # until the maximum number of attempts has been made. The default is true.
53
59
  # * timeout - Boolean value to indicate whether or not to automatically wrap your
54
- # proc in a SafeTimeout block. The default is false.
60
+ # proc in a Timeout/SafeTimeout block. The default is false.
55
61
  #
56
62
  # Example:
57
63
  #
@@ -74,18 +80,18 @@ class Attempt
74
80
  # You will not typically use this method directly, but the Kernel#attempt
75
81
  # method instead.
76
82
  #
77
- def attempt
83
+ def attempt(&block)
78
84
  count = 1
79
85
  begin
80
86
  if @timeout
81
- SafeTimeout.timeout(@timeout){ yield }
87
+ File::ALT_SEPARATOR ? Timeout.timeout(@timeout, &block) : SafeTimeout.timeout(@timeout, &block)
82
88
  else
83
89
  yield
84
90
  end
85
- rescue @level => error
91
+ rescue @level => err
86
92
  @tries -= 1
87
93
  if @tries > 0
88
- msg = "Error on attempt # #{count}: #{error}; retrying"
94
+ msg = "Error on attempt # #{count}: #{err}; retrying"
89
95
  count += 1
90
96
  warn Warning, msg if @warnings
91
97
 
@@ -102,30 +108,31 @@ class Attempt
102
108
  end
103
109
  end
104
110
 
111
+ # Extend the Kernel module with a simple interface for the Attempt class.
105
112
  module Kernel
106
- # :call-seq:
107
- # attempt(tries: 3, interval: 60, timeout: 10){ # some op }
108
- #
109
- # Attempt to perform the operation in the provided block up to +tries+
110
- # times, sleeping +interval+ between each try. By default the number
111
- # of tries defaults to 3, the interval defaults to 60 seconds, and there
112
- # is no timeout specified.
113
- #
114
- # If +timeout+ is provided then the operation is wrapped in a Timeout
115
- # block as well. This is handy for those rare occasions when an IO
116
- # connection could hang indefinitely, for example.
117
- #
118
- # If the operation still fails the (last) error is then re-raised.
119
- #
120
- # This is really just a convenient wrapper for Attempt.new + Attempt#attempt.
121
- #
122
- # Example:
123
- #
124
- # # Make 3 attempts to connect to the database, 60 seconds apart.
125
- # attempt{ DBI.connect(dsn, user, passwd) }
126
- #
127
- def attempt(**kwargs, &block)
128
- object = Attempt.new(kwargs)
129
- object.attempt(&block)
130
- end
113
+ # :call-seq:
114
+ # attempt(tries: 3, interval: 60, timeout: 10){ # some op }
115
+ #
116
+ # Attempt to perform the operation in the provided block up to +tries+
117
+ # times, sleeping +interval+ between each try. By default the number
118
+ # of tries defaults to 3, the interval defaults to 60 seconds, and there
119
+ # is no timeout specified.
120
+ #
121
+ # If +timeout+ is provided then the operation is wrapped in a Timeout
122
+ # block as well. This is handy for those rare occasions when an IO
123
+ # connection could hang indefinitely, for example.
124
+ #
125
+ # If the operation still fails the (last) error is then re-raised.
126
+ #
127
+ # This is really just a convenient wrapper for Attempt.new + Attempt#attempt.
128
+ #
129
+ # Example:
130
+ #
131
+ # # Make 3 attempts to connect to the database, 60 seconds apart.
132
+ # attempt{ DBI.connect(dsn, user, passwd) }
133
+ #
134
+ def attempt(**kwargs, &block)
135
+ object = Attempt.new(**kwargs)
136
+ object.attempt(&block)
137
+ end
131
138
  end
data/spec/attempt_spec.rb CHANGED
@@ -23,7 +23,7 @@ RSpec.describe Attempt do
23
23
  end
24
24
 
25
25
  example "version constant is set to expected value" do
26
- expect(Attempt::VERSION).to eq('0.6.1')
26
+ expect(Attempt::VERSION).to eq('0.6.2')
27
27
  expect(Attempt::VERSION).to be_frozen
28
28
  end
29
29
 
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attempt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Berger
@@ -35,8 +35,22 @@ cert_chain:
35
35
  ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
36
36
  WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
37
37
  -----END CERTIFICATE-----
38
- date: 2020-10-20 00:00:00.000000000 Z
38
+ date: 2022-06-02 00:00:00.000000000 Z
39
39
  dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: rake
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
40
54
  - !ruby/object:Gem::Dependency
41
55
  name: structured_warnings
42
56
  requirement: !ruby/object:Gem::Requirement
@@ -104,8 +118,8 @@ homepage: https://github.com/djberg96/attempt
104
118
  licenses:
105
119
  - Apache-2.0
106
120
  metadata:
107
- changelog_uri: https://github.com/djberg96/attempt/blob/master/CHANGES
108
- source_code_uri: https://github.com/djberg96/attempt/blob/master/lib/attempt.rb
121
+ changelog_uri: https://github.com/djberg96/attempt/blob/main/CHANGES.md
122
+ source_code_uri: https://github.com/djberg96/attempt/blob/main/lib/attempt.rb
109
123
  bug_tracker_uri: https://github.com/djberg96/attempt/issues
110
124
  wiki_uri: https://github.com/djberg96/attempt/wiki
111
125
  post_install_message:
@@ -123,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
137
  - !ruby/object:Gem::Version
124
138
  version: '0'
125
139
  requirements: []
126
- rubygems_version: 3.1.4
140
+ rubygems_version: 3.3.15
127
141
  signing_key:
128
142
  specification_version: 4
129
143
  summary: A thin wrapper for begin + rescue + sleep + retry
metadata.gz.sig CHANGED
Binary file