ztk 1.0.0.rc.0 → 1.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/ztk/background.rb +53 -10
- data/lib/ztk/base.rb +16 -23
- data/lib/ztk/benchmark.rb +36 -8
- data/lib/ztk/command.rb +7 -7
- data/lib/ztk/dsl.rb +5 -2
- data/lib/ztk/dsl/base.rb +133 -1
- data/lib/ztk/dsl/core.rb +27 -0
- data/lib/ztk/dsl/core/actions.rb +3 -0
- data/lib/ztk/dsl/core/actions/find.rb +4 -0
- data/lib/ztk/dsl/core/actions/timestamps.rb +4 -0
- data/lib/ztk/dsl/core/attributes.rb +4 -0
- data/lib/ztk/dsl/core/dataset.rb +4 -12
- data/lib/ztk/dsl/core/io.rb +4 -0
- data/lib/ztk/dsl/core/relations.rb +4 -0
- data/lib/ztk/dsl/core/relations/belongs_to.rb +4 -0
- data/lib/ztk/dsl/core/relations/has_many.rb +4 -0
- data/lib/ztk/parallel.rb +66 -12
- data/lib/ztk/report.rb +9 -9
- data/lib/ztk/rescue_retry.rb +60 -11
- data/lib/ztk/spinner.rb +5 -5
- data/lib/ztk/ssh.rb +30 -30
- data/lib/ztk/tcp_socket_check.rb +7 -7
- data/lib/ztk/ui.rb +15 -8
- data/lib/ztk/version.rb +1 -1
- data/spec/spec_helper.rb +22 -4
- data/spec/ztk/background_spec.rb +0 -30
- data/spec/ztk/base_spec.rb +0 -6
- data/spec/ztk/benchmark_spec.rb +6 -16
- data/spec/ztk/command_spec.rb +23 -68
- data/spec/ztk/config_spec.rb +0 -6
- data/spec/ztk/dsl_spec.rb +0 -7
- data/spec/ztk/parallel_spec.rb +0 -30
- data/spec/ztk/rescue_retry_spec.rb +0 -6
- data/spec/ztk/spinner_spec.rb +0 -6
- data/spec/ztk/ssh_spec.rb +50 -102
- data/spec/ztk/tcp_socket_check_spec.rb +0 -30
- data/spec/ztk/template_spec.rb +0 -6
- data/spec/ztk/ui_spec.rb +70 -0
- data/spec/ztk/version_spec.rb +39 -0
- metadata +7 -3
data/lib/ztk/dsl/core.rb
CHANGED
@@ -1,4 +1,29 @@
|
|
1
|
+
################################################################################
|
2
|
+
#
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
|
+
# Copyright: Copyright (c) Jove Labs
|
5
|
+
# License: Apache License, Version 2.0
|
6
|
+
#
|
7
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
# See the License for the specific language governing permissions and
|
17
|
+
# limitations under the License.
|
18
|
+
#
|
19
|
+
################################################################################
|
20
|
+
|
1
21
|
module ZTK::DSL
|
22
|
+
|
23
|
+
# ZTK::DSL Core
|
24
|
+
#
|
25
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
26
|
+
# @api private
|
2
27
|
module Core
|
3
28
|
autoload :Attributes, "ztk/dsl/core/attributes"
|
4
29
|
autoload :Actions, "ztk/dsl/core/actions"
|
@@ -21,6 +46,7 @@ module ZTK::DSL
|
|
21
46
|
end
|
22
47
|
end
|
23
48
|
|
49
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
50
|
module DualMethods
|
25
51
|
|
26
52
|
def logger
|
@@ -35,6 +61,7 @@ module ZTK::DSL
|
|
35
61
|
|
36
62
|
end
|
37
63
|
|
64
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
38
65
|
module ClassMethods
|
39
66
|
|
40
67
|
def cattr_accessor(*args)
|
data/lib/ztk/dsl/core/actions.rb
CHANGED
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module Actions
|
23
26
|
autoload :Find, "ztk/dsl/core/actions/find"
|
24
27
|
autoload :Timestamps, "ztk/dsl/core/actions/timestamps"
|
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core::Actions
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module Find
|
23
26
|
|
24
27
|
def self.included(base)
|
@@ -27,6 +30,7 @@ module ZTK::DSL::Core::Actions
|
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
33
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
30
34
|
module ClassMethods
|
31
35
|
|
32
36
|
def all
|
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core::Actions
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module Timestamps
|
23
26
|
|
24
27
|
def self.included(base)
|
@@ -31,6 +34,7 @@ module ZTK::DSL::Core::Actions
|
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
37
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
34
38
|
module ClassMethods
|
35
39
|
|
36
40
|
def updated_at_timestamp
|
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module Attributes
|
23
26
|
|
24
27
|
def self.included(base)
|
@@ -31,6 +34,7 @@ module ZTK::DSL::Core
|
|
31
34
|
@attributes ||= {}
|
32
35
|
end
|
33
36
|
|
37
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
34
38
|
module ClassMethods
|
35
39
|
|
36
40
|
def attribute(key, options={})
|
data/lib/ztk/dsl/core/dataset.rb
CHANGED
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module Dataset
|
23
26
|
|
24
27
|
def self.included(base)
|
@@ -27,6 +30,7 @@ module ZTK::DSL::Core
|
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
33
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
30
34
|
module ClassMethods
|
31
35
|
|
32
36
|
def dataset
|
@@ -48,18 +52,6 @@ module ZTK::DSL::Core
|
|
48
52
|
(@@id += 1)
|
49
53
|
end
|
50
54
|
|
51
|
-
# def foreign_keys(target)
|
52
|
-
# puts("==> foreign_keys(#{target.inspect})")
|
53
|
-
|
54
|
-
# target = singularize(underscore(target).to_sym)
|
55
|
-
# source = singularize(underscore(self).to_sym)
|
56
|
-
|
57
|
-
# splat = [source, target].sort
|
58
|
-
|
59
|
-
# key = [ splat[0], "references", splat[1] ].join(":")
|
60
|
-
# puts("key=#{key}")
|
61
|
-
# end
|
62
|
-
|
63
55
|
end
|
64
56
|
|
65
57
|
end
|
data/lib/ztk/dsl/core/io.rb
CHANGED
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module IO
|
23
26
|
|
24
27
|
def self.included(base)
|
@@ -27,6 +30,7 @@ module ZTK::DSL::Core
|
|
27
30
|
end
|
28
31
|
end
|
29
32
|
|
33
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
30
34
|
module ClassMethods
|
31
35
|
|
32
36
|
def load(rb_file)
|
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module Relations
|
23
26
|
autoload :BelongsTo, "ztk/dsl/core/relations/belongs_to"
|
24
27
|
autoload :HasMany, "ztk/dsl/core/relations/has_many"
|
@@ -31,6 +34,7 @@ module ZTK::DSL::Core
|
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
37
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
34
38
|
module ClassMethods
|
35
39
|
|
36
40
|
def add_relation(key)
|
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core::Relations
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module BelongsTo
|
23
26
|
|
24
27
|
def self.included(base)
|
@@ -69,6 +72,7 @@ module ZTK::DSL::Core::Relations
|
|
69
72
|
end
|
70
73
|
end
|
71
74
|
|
75
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
72
76
|
module ClassMethods
|
73
77
|
|
74
78
|
def belongs_to(key, options={})
|
@@ -19,6 +19,9 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK::DSL::Core::Relations
|
22
|
+
|
23
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
24
|
+
# @api private
|
22
25
|
module HasMany
|
23
26
|
|
24
27
|
def self.included(base)
|
@@ -62,6 +65,7 @@ module ZTK::DSL::Core::Relations
|
|
62
65
|
end
|
63
66
|
end
|
64
67
|
|
68
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
65
69
|
module ClassMethods
|
66
70
|
|
67
71
|
def has_many(key, options={})
|
data/lib/ztk/parallel.rb
CHANGED
@@ -30,6 +30,13 @@ module ZTK
|
|
30
30
|
#
|
31
31
|
# This class can be used to easily run iterative and linear processes in a parallel manner.
|
32
32
|
#
|
33
|
+
# The before fork callback is called once in the parent process.
|
34
|
+
#
|
35
|
+
# The after fork callback is called twice, once in the parent process and once
|
36
|
+
# in the child process.
|
37
|
+
#
|
38
|
+
# *example code*:
|
39
|
+
#
|
33
40
|
# a_callback = Proc.new do |pid|
|
34
41
|
# puts "Hello from After Callback - PID #{pid}"
|
35
42
|
# end
|
@@ -44,6 +51,8 @@ module ZTK
|
|
44
51
|
# config.after_fork = a_callback
|
45
52
|
# end
|
46
53
|
#
|
54
|
+
# puts Process.pid.inspect
|
55
|
+
#
|
47
56
|
# 3.times do |x|
|
48
57
|
# parallel.process do
|
49
58
|
# x
|
@@ -51,12 +60,57 @@ module ZTK
|
|
51
60
|
# end
|
52
61
|
#
|
53
62
|
# parallel.waitall
|
54
|
-
# parallel.results
|
63
|
+
# puts parallel.results.inspect
|
55
64
|
#
|
56
|
-
#
|
65
|
+
# *pry output*:
|
57
66
|
#
|
58
|
-
#
|
59
|
-
#
|
67
|
+
# [1] pry(main)> a_callback = Proc.new do |pid|
|
68
|
+
# [1] pry(main)* puts "Hello from After Callback - PID #{pid}"
|
69
|
+
# [1] pry(main)* end
|
70
|
+
# => #<Proc:0x000000015a8768@(pry):1>
|
71
|
+
# [2] pry(main)>
|
72
|
+
# [3] pry(main)> b_callback = Proc.new do |pid|
|
73
|
+
# [3] pry(main)* puts "Hello from Before Callback - PID #{pid}"
|
74
|
+
# [3] pry(main)* end
|
75
|
+
# => #<Proc:0x000000012910e8@(pry):4>
|
76
|
+
# [4] pry(main)>
|
77
|
+
# [5] pry(main)> parallel = ZTK::Parallel.new
|
78
|
+
# => #<ZTK::Parallel:0x000000015a9d48
|
79
|
+
# @config=
|
80
|
+
# #<OpenStruct stdout=#<IO:<STDOUT>>, stderr=#<IO:<STDERR>>, stdin=#<IO:<STDIN>>, logger=#<ZTK::Logger filename="/dev/null">, max_forks=12>,
|
81
|
+
# @forks=[],
|
82
|
+
# @results=[]>
|
83
|
+
# [6] pry(main)> parallel.config do |config|
|
84
|
+
# [6] pry(main)* config.before_fork = b_callback
|
85
|
+
# [6] pry(main)* config.after_fork = a_callback
|
86
|
+
# [6] pry(main)* end
|
87
|
+
# => #<Proc:0x000000015a8768@(pry):1>
|
88
|
+
# [7] pry(main)>
|
89
|
+
# [8] pry(main)> puts Process.pid.inspect
|
90
|
+
# 24761
|
91
|
+
# => nil
|
92
|
+
# [9] pry(main)>
|
93
|
+
# [10] pry(main)> 3.times do |x|
|
94
|
+
# [10] pry(main)* parallel.process do
|
95
|
+
# [10] pry(main)* x
|
96
|
+
# [10] pry(main)* end
|
97
|
+
# [10] pry(main)* end
|
98
|
+
# Hello from Before Callback - PID 24761
|
99
|
+
# Hello from After Callback - PID 24761
|
100
|
+
# Hello from Before Callback - PID 24761
|
101
|
+
# Hello from After Callback - PID 24776
|
102
|
+
# Hello from After Callback - PID 24761
|
103
|
+
# Hello from Before Callback - PID 24761
|
104
|
+
# Hello from After Callback - PID 24779
|
105
|
+
# Hello from After Callback - PID 24761
|
106
|
+
# Hello from After Callback - PID 24782
|
107
|
+
# => 3
|
108
|
+
# [11] pry(main)>
|
109
|
+
# [12] pry(main)> parallel.waitall
|
110
|
+
# => [0, 1, 2]
|
111
|
+
# [13] pry(main)> puts parallel.results.inspect
|
112
|
+
# [0, 1, 2]
|
113
|
+
# => nil
|
60
114
|
#
|
61
115
|
# @author Zachary Patten <zachary@jovelabs.net>
|
62
116
|
class Parallel < ZTK::Base
|
@@ -80,7 +134,7 @@ module ZTK
|
|
80
134
|
super({
|
81
135
|
:max_forks => MAX_FORKS
|
82
136
|
}.merge(configuration))
|
83
|
-
config.logger.debug { "config=#{config.send(:table).inspect}" }
|
137
|
+
config.ui.logger.debug { "config=#{config.send(:table).inspect}" }
|
84
138
|
|
85
139
|
(config.max_forks < 1) and log_and_raise(ParallelError, "max_forks must be equal to or greater than one!")
|
86
140
|
|
@@ -98,7 +152,7 @@ module ZTK
|
|
98
152
|
def process(&block)
|
99
153
|
!block_given? and log_and_raise(ParallelError, "You must supply a block to the process method!")
|
100
154
|
|
101
|
-
config.logger.debug { "forks(#{@forks.inspect})" }
|
155
|
+
config.ui.logger.debug { "forks(#{@forks.inspect})" }
|
102
156
|
|
103
157
|
while (@forks.count >= config.max_forks) do
|
104
158
|
wait
|
@@ -115,7 +169,7 @@ module ZTK
|
|
115
169
|
parent_reader.close
|
116
170
|
|
117
171
|
if !(data = block.call).nil?
|
118
|
-
config.logger.debug { "write(#{data.inspect})" }
|
172
|
+
config.ui.logger.debug { "write(#{data.inspect})" }
|
119
173
|
child_writer.write(Base64.encode64(Marshal.dump(data)))
|
120
174
|
end
|
121
175
|
|
@@ -143,12 +197,12 @@ module ZTK
|
|
143
197
|
# status and data returned from the process block. If wait2() fails nil
|
144
198
|
# is returned.
|
145
199
|
def wait
|
146
|
-
config.logger.debug { "wait" }
|
147
|
-
config.logger.debug { "forks(#{@forks.inspect})" }
|
200
|
+
config.ui.logger.debug { "wait" }
|
201
|
+
config.ui.logger.debug { "forks(#{@forks.inspect})" }
|
148
202
|
pid, status = (Process.wait2(-1) rescue nil)
|
149
203
|
if !pid.nil? && !status.nil? && !(fork = @forks.select{ |f| f[:pid] == pid }.first).nil?
|
150
204
|
data = (Marshal.load(Base64.decode64(fork[:reader].read.to_s)) rescue nil)
|
151
|
-
config.logger.debug { "read(#{data.inspect})" }
|
205
|
+
config.ui.logger.debug { "read(#{data.inspect})" }
|
152
206
|
!data.nil? and @results.push(data)
|
153
207
|
fork[:reader].close
|
154
208
|
fork[:writer].close
|
@@ -163,7 +217,7 @@ module ZTK
|
|
163
217
|
#
|
164
218
|
# @return [Array<Object>] The results from all of the *process* blocks.
|
165
219
|
def waitall
|
166
|
-
config.logger.debug { "waitall" }
|
220
|
+
config.ui.logger.debug { "waitall" }
|
167
221
|
while @forks.count > 0
|
168
222
|
self.wait
|
169
223
|
end
|
@@ -174,7 +228,7 @@ module ZTK
|
|
174
228
|
#
|
175
229
|
# @return [Integer] Current number of active forks.
|
176
230
|
def count
|
177
|
-
config.logger.debug { "count(#{@forks.count})" }
|
231
|
+
config.ui.logger.debug { "count(#{@forks.count})" }
|
178
232
|
@forks.count
|
179
233
|
end
|
180
234
|
|
data/lib/ztk/report.rb
CHANGED
@@ -43,7 +43,7 @@ module ZTK
|
|
43
43
|
def initialize(configuration={})
|
44
44
|
super({
|
45
45
|
}.merge(configuration))
|
46
|
-
config.logger.debug { "config=#{config.send(:table).inspect}" }
|
46
|
+
config.ui.logger.debug { "config=#{config.send(:table).inspect}" }
|
47
47
|
end
|
48
48
|
|
49
49
|
# Displays data in a spreadsheet style.
|
@@ -84,19 +84,19 @@ module ZTK
|
|
84
84
|
end
|
85
85
|
header_line = format_row(header_line)
|
86
86
|
|
87
|
-
config.stdout.puts(format_header(headers, max_lengths))
|
88
|
-
config.stdout.puts(header_line)
|
89
|
-
config.stdout.puts(format_header(headers, max_lengths))
|
87
|
+
config.ui.stdout.puts(format_header(headers, max_lengths))
|
88
|
+
config.ui.stdout.puts(header_line)
|
89
|
+
config.ui.stdout.puts(format_header(headers, max_lengths))
|
90
90
|
|
91
91
|
rows.each do |row|
|
92
92
|
row_line = headers.collect do |header|
|
93
93
|
"%-#{max_lengths.send(header)}s" % row.send(header)
|
94
94
|
end
|
95
95
|
row_line = format_row(row_line)
|
96
|
-
config.stdout.puts(row_line)
|
96
|
+
config.ui.stdout.puts(row_line)
|
97
97
|
end
|
98
98
|
|
99
|
-
config.stdout.puts(format_header(headers, max_lengths))
|
99
|
+
config.ui.stdout.puts(format_header(headers, max_lengths))
|
100
100
|
|
101
101
|
width = (2 + max_lengths.send(:table).values.reduce(:+) + ((headers.count * 3) - 3) + 2)
|
102
102
|
|
@@ -141,13 +141,13 @@ module ZTK
|
|
141
141
|
width = (max_key_length + max_value_length + 2 + 2 + 2)
|
142
142
|
|
143
143
|
rows.each do |row|
|
144
|
-
config.stdout.puts("+#{"-" * width}+")
|
144
|
+
config.ui.stdout.puts("+#{"-" * width}+")
|
145
145
|
headers.each do |header|
|
146
146
|
entry_line = format_entry(header, max_key_length, row.send(header), max_value_length)
|
147
|
-
config.stdout.puts(entry_line)
|
147
|
+
config.ui.stdout.puts(entry_line)
|
148
148
|
end
|
149
149
|
end
|
150
|
-
config.stdout.puts("+#{"-" * width}+")
|
150
|
+
config.ui.stdout.puts("+#{"-" * width}+")
|
151
151
|
|
152
152
|
OpenStruct.new(:rows => rows, :max_key_length => max_key_length, :max_value_length => max_value_length, :width => width)
|
153
153
|
end
|
data/lib/ztk/rescue_retry.rb
CHANGED
@@ -33,17 +33,66 @@ module ZTK
|
|
33
33
|
# The block is yielded and if a valid exception occurs the block will be
|
34
34
|
# re-executed for the set number of attempts.
|
35
35
|
#
|
36
|
-
#
|
36
|
+
# *example code*:
|
37
37
|
#
|
38
|
+
# counter = 0
|
38
39
|
# ZTK::RescueRetry.try(:tries => 3, :on => EOFError) do
|
39
|
-
#
|
40
|
-
#
|
40
|
+
# counter += 1
|
41
|
+
# raise EOFError
|
41
42
|
# end
|
43
|
+
# puts counter.inspect
|
42
44
|
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
45
|
+
# counter = 0
|
46
|
+
# ZTK::RescueRetry.try(:tries => 3) do
|
47
|
+
# counter += 1
|
48
|
+
# raise "OMGWTFBBQ"
|
49
|
+
# end
|
50
|
+
# puts counter.inspect
|
51
|
+
#
|
52
|
+
# counter = 0
|
53
|
+
# ZTK::RescueRetry.try(:tries => 3, :on => EOFError) do
|
54
|
+
# counter += 1
|
55
|
+
# raise "OMGWTFBBQ"
|
56
|
+
# end
|
57
|
+
# puts counter.inspect
|
58
|
+
#
|
59
|
+
# *pry output*:
|
60
|
+
#
|
61
|
+
# [1] pry(main)> counter = 0
|
62
|
+
# => 0
|
63
|
+
# [2] pry(main)> ZTK::RescueRetry.try(:tries => 3, :on => EOFError) do
|
64
|
+
# [2] pry(main)* counter += 1
|
65
|
+
# [2] pry(main)* raise EOFError
|
66
|
+
# [2] pry(main)* end
|
67
|
+
# EOFError: EOFError
|
68
|
+
# from (pry):4:in `block in <main>'
|
69
|
+
# [3] pry(main)> puts counter.inspect
|
70
|
+
# 3
|
71
|
+
# => nil
|
72
|
+
# [4] pry(main)>
|
73
|
+
# [5] pry(main)> counter = 0
|
74
|
+
# => 0
|
75
|
+
# [6] pry(main)> ZTK::RescueRetry.try(:tries => 3) do
|
76
|
+
# [6] pry(main)* counter += 1
|
77
|
+
# [6] pry(main)* raise "OMGWTFBBQ"
|
78
|
+
# [6] pry(main)* end
|
79
|
+
# RuntimeError: OMGWTFBBQ
|
80
|
+
# from (pry):10:in `block in <main>'
|
81
|
+
# [7] pry(main)> puts counter.inspect
|
82
|
+
# 3
|
83
|
+
# => nil
|
84
|
+
# [8] pry(main)>
|
85
|
+
# [9] pry(main)> counter = 0
|
86
|
+
# => 0
|
87
|
+
# [10] pry(main)> ZTK::RescueRetry.try(:tries => 3, :on => EOFError) do
|
88
|
+
# [10] pry(main)* counter += 1
|
89
|
+
# [10] pry(main)* raise "OMGWTFBBQ"
|
90
|
+
# [10] pry(main)* end
|
91
|
+
# RuntimeError: OMGWTFBBQ
|
92
|
+
# from (pry):16:in `block in <main>'
|
93
|
+
# [11] pry(main)> puts counter.inspect
|
94
|
+
# 1
|
95
|
+
# => nil
|
47
96
|
#
|
48
97
|
# @author Zachary Patten <zachary@jovelabs.net>
|
49
98
|
class RescueRetry
|
@@ -75,19 +124,19 @@ module ZTK
|
|
75
124
|
:on => Exception,
|
76
125
|
:delay => 1
|
77
126
|
}.merge(options))
|
78
|
-
options.logger.debug { "options=#{options.send(:table).inspect}" }
|
127
|
+
options.ui.logger.debug { "options=#{options.send(:table).inspect}" }
|
79
128
|
|
80
|
-
!block_given? and Base.log_and_raise(options.logger, RescueRetryError, "You must supply a block!")
|
129
|
+
!block_given? and Base.log_and_raise(options.ui.logger, RescueRetryError, "You must supply a block!")
|
81
130
|
|
82
131
|
begin
|
83
132
|
return block.call
|
84
133
|
rescue options.on => e
|
85
134
|
if ((options.tries -= 1) > 0)
|
86
|
-
options.logger.warn { "Caught #{e.inspect}, we will give it #{options.tries} more tr#{options.tries > 1 ? 'ies' : 'y'}." }
|
135
|
+
options.ui.logger.warn { "Caught #{e.inspect}, we will give it #{options.tries} more tr#{options.tries > 1 ? 'ies' : 'y'}." }
|
87
136
|
sleep(options.delay)
|
88
137
|
retry
|
89
138
|
else
|
90
|
-
options.logger.fatal { "Caught #{e.inspect} and we have no more tries left, sorry, we have to give up now." }
|
139
|
+
options.ui.logger.fatal { "Caught #{e.inspect} and we have no more tries left, sorry, we have to give up now." }
|
91
140
|
raise e
|
92
141
|
end
|
93
142
|
end
|