ztk 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +5 -1
- data/Rakefile +1 -1
- data/lib/ztk/base.rb +3 -1
- data/lib/ztk/command.rb +35 -17
- data/lib/ztk/logger.rb +22 -2
- data/lib/ztk/parallel.rb +66 -31
- data/lib/ztk/spinner.rb +6 -3
- data/lib/ztk/ssh.rb +15 -5
- data/lib/ztk/tcp_socket_check.rb +31 -3
- data/lib/ztk/template.rb +6 -3
- data/lib/ztk/version.rb +2 -2
- data/lib/ztk.rb +3 -3
- data/spec/spec_helper.rb +3 -1
- data/spec/ztk/command_spec.rb +2 -3
- data/spec/ztk/logger_spec.rb +1 -1
- data/spec/ztk/parallel_spec.rb +17 -2
- data/spec/ztk/ssh_spec.rb +1 -2
- data/spec/ztk/tcp_socket_check_spec.rb +1 -2
- data/spec/ztk/template_spec.rb +1 -2
- data/ztk.gemspec +1 -1
- metadata +4 -4
data/README.md
CHANGED
@@ -14,6 +14,10 @@ Issues:
|
|
14
14
|
|
15
15
|
* https://github.com/jovelabs/ztk/issues
|
16
16
|
|
17
|
+
Documentation:
|
18
|
+
|
19
|
+
* http://rubydoc.info/gems/ztk
|
20
|
+
|
17
21
|
Wiki:
|
18
22
|
|
19
23
|
* https://github.com/jovelabs/ztk/wiki
|
@@ -22,7 +26,7 @@ Wiki:
|
|
22
26
|
|
23
27
|
ZTK - Zachary's Tool Kit
|
24
28
|
|
25
|
-
* Author: Zachary Patten <zachary@jovelabs.
|
29
|
+
* Author: Zachary Patten <zachary@jovelabs.net>
|
26
30
|
* Copyright: Copyright (c) Jove Labs
|
27
31
|
* License: Apache License, Version 2.0
|
28
32
|
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
data/lib/ztk/base.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -25,6 +25,8 @@ module ZTK
|
|
25
25
|
# ZTK::Base error class
|
26
26
|
class BaseError < Error; end
|
27
27
|
|
28
|
+
# ZTK Base Class
|
29
|
+
#
|
28
30
|
# This is the base class inherited by most of the other classes in this
|
29
31
|
# library. It provides a standard set of features to control STDOUT, STDERR
|
30
32
|
# and STDIN, a configuration mechanism and logging mechanism.
|
data/lib/ztk/command.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -23,21 +23,41 @@ require "ostruct"
|
|
23
23
|
module ZTK
|
24
24
|
|
25
25
|
# ZTK::Command error class
|
26
|
-
#
|
26
|
+
#
|
27
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
27
28
|
class CommandError < Error; end
|
28
29
|
|
29
|
-
|
30
|
-
|
30
|
+
# Command Execution Class
|
31
|
+
#
|
32
|
+
# We can get a new instance of Command like so:
|
33
|
+
#
|
34
|
+
# cmd = ZTK::Command.new
|
35
|
+
#
|
36
|
+
# If we wanted to redirect STDOUT and STDERR to a StringIO we can do this:
|
37
|
+
#
|
38
|
+
# std_combo = StringIO.new
|
39
|
+
# cmd = ZTK::Command.new(:stdout => std_combo, :stderr => std_combo)
|
40
|
+
#
|
41
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
31
42
|
class Command < ZTK::Base
|
32
43
|
|
33
|
-
################################################################################
|
34
|
-
|
35
44
|
def initialize(config={})
|
36
45
|
super(config)
|
37
46
|
end
|
38
47
|
|
39
|
-
|
40
|
-
|
48
|
+
# Executes a local command.
|
49
|
+
#
|
50
|
+
# @param [String] command The command to execute.
|
51
|
+
# @param [Hash] options The options hash for executing the command.
|
52
|
+
#
|
53
|
+
# @return [OpenStruct#output] The output of the command, both STDOUT and
|
54
|
+
# STDERR.
|
55
|
+
# @return [OpenStruct#exit] The exit status (i.e. $?).
|
56
|
+
#
|
57
|
+
# @example Execute a command:
|
58
|
+
#
|
59
|
+
# cmd = ZTK::Command.new
|
60
|
+
# puts cmd.exec("hostname -f").inspect
|
41
61
|
def exec(command, options={})
|
42
62
|
options = OpenStruct.new({ :exit_code => 0, :silence => false }.merge(options))
|
43
63
|
log(:debug) { "config(#{@config.inspect})" }
|
@@ -65,8 +85,12 @@ module ZTK
|
|
65
85
|
|
66
86
|
Process.waitpid(pid)
|
67
87
|
|
68
|
-
|
69
|
-
|
88
|
+
stdout = parent_stdout_reader.read
|
89
|
+
stderr = parent_stderr_reader.read
|
90
|
+
output = (stdout || '') + (stderr || '')
|
91
|
+
|
92
|
+
@config.stdout.write(stdout) unless options.silence
|
93
|
+
@config.stderr.write(stderr) unless options.silence
|
70
94
|
|
71
95
|
parent_stdout_reader.close
|
72
96
|
parent_stderr_reader.close
|
@@ -79,7 +103,7 @@ module ZTK
|
|
79
103
|
raise CommandError, message
|
80
104
|
end
|
81
105
|
|
82
|
-
$?
|
106
|
+
OpenStruct.new(:output => output, :exit => $?)
|
83
107
|
end
|
84
108
|
|
85
109
|
def upload(*args)
|
@@ -90,12 +114,6 @@ module ZTK
|
|
90
114
|
raise CommandError, "Not Implemented"
|
91
115
|
end
|
92
116
|
|
93
|
-
################################################################################
|
94
|
-
|
95
117
|
end
|
96
118
|
|
97
|
-
################################################################################
|
98
|
-
|
99
119
|
end
|
100
|
-
|
101
|
-
################################################################################
|
data/lib/ztk/logger.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -22,7 +22,27 @@ require "logger"
|
|
22
22
|
|
23
23
|
module ZTK
|
24
24
|
|
25
|
-
#
|
25
|
+
# Standard Logging Class
|
26
|
+
#
|
27
|
+
# Supplies loggers the same as the base ruby logger class, except adds some
|
28
|
+
# extra spice to your log messages. This includes uSec timestamping, PIDs and
|
29
|
+
# caller tree details.
|
30
|
+
#
|
31
|
+
# One can override the logging level on the command line with programs that
|
32
|
+
# use this library like so:
|
33
|
+
# LOG_LEVEL=DEBUG bin/cucumber-chef ssh
|
34
|
+
#
|
35
|
+
# = Typical usage:
|
36
|
+
#
|
37
|
+
# $logger = ZTK::Logger.new("/dev/null")
|
38
|
+
#
|
39
|
+
# $logger.debug { "This is a debug message!" }
|
40
|
+
# $logger.info { "This is a info message!" }
|
41
|
+
# $logger.warn { "This is a warn message!" }
|
42
|
+
# $logger.error { "This is a error message!" }
|
43
|
+
# $logger.fatal { "This is a fatal message!" }
|
44
|
+
#
|
45
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
26
46
|
class Logger < ::Logger
|
27
47
|
|
28
48
|
SEVERITIES = Severity.constants.inject([]) {|arr,c| arr[Severity.const_get(c)] = c; arr}
|
data/lib/ztk/parallel.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, VersIOn 2.0
|
6
6
|
#
|
@@ -20,29 +20,58 @@
|
|
20
20
|
|
21
21
|
require "base64"
|
22
22
|
|
23
|
-
################################################################################
|
24
|
-
|
25
23
|
module ZTK
|
26
24
|
|
27
|
-
|
28
|
-
|
25
|
+
# ZTK::Parallel error class
|
26
|
+
#
|
27
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
29
28
|
class ParallelError < Error; end
|
30
29
|
|
31
|
-
|
32
|
-
|
30
|
+
# Parallel Processing Class
|
31
|
+
#
|
32
|
+
# This class can be used to easily run iterative and linear processes in a parallel manner.
|
33
|
+
#
|
34
|
+
# a_callback = Proc.new do |pid|
|
35
|
+
# puts "Hello from After Callback - PID #{pid}"
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# b_callback = Proc.new do |pid|
|
39
|
+
# puts "Hello from Before Callback - PID #{pid}"
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# parallel = ZTK::Parallel.new
|
43
|
+
# parallel.config do |config|
|
44
|
+
# config.before_fork = b_callback
|
45
|
+
# config.after_fork = a_callback
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
# 3.times do |x|
|
49
|
+
# parallel.process do
|
50
|
+
# x
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
#
|
54
|
+
# parallel.waitall
|
55
|
+
# parallel.results
|
56
|
+
#
|
57
|
+
# The before fork callback is called once in the parent process.
|
58
|
+
#
|
59
|
+
# The after fork callback is called twice, once in the parent process and once
|
60
|
+
# in the child process.
|
61
|
+
#
|
62
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
33
63
|
class Parallel < ZTK::Base
|
34
64
|
|
35
|
-
|
36
|
-
|
65
|
+
# Result Set
|
37
66
|
attr_accessor :results
|
38
67
|
|
39
|
-
|
40
|
-
|
68
|
+
# @param [Hash] config Configuration options hash.
|
69
|
+
# @option config [Integer] :max_forks Maximum number of forks to use.
|
70
|
+
# @option config [Proc] :before_fork (nil) Proc to call before forking.
|
71
|
+
# @option config [Proc] :after_fork (nil) Proc to call after forking.
|
41
72
|
def initialize(config={})
|
42
73
|
super({
|
43
74
|
:max_forks => %x( grep -c processor /proc/cpuinfo ).chomp.to_i,
|
44
|
-
:before_fork => nil,
|
45
|
-
:after_fork => nil
|
46
75
|
}.merge(config))
|
47
76
|
|
48
77
|
@forks = Array.new
|
@@ -50,8 +79,12 @@ module ZTK
|
|
50
79
|
GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true
|
51
80
|
end
|
52
81
|
|
53
|
-
|
54
|
-
|
82
|
+
# Process in parallel.
|
83
|
+
#
|
84
|
+
# @yield Block should execute tasks to be performed in parallel.
|
85
|
+
# @yieldreturn [Object] Block can return any object to be marshalled back to
|
86
|
+
# the parent processes result set.
|
87
|
+
# @return [Integer] Returns the pid of the child process forked.
|
55
88
|
def process(&block)
|
56
89
|
raise ParallelError, "You must supply a block to the process method!" if !block_given?
|
57
90
|
|
@@ -91,9 +124,16 @@ module ZTK
|
|
91
124
|
pid
|
92
125
|
end
|
93
126
|
|
94
|
-
|
95
|
-
|
127
|
+
# Wait for a single fork to finish.
|
128
|
+
#
|
129
|
+
# If a fork successfully finishes, it's return value from the *process*
|
130
|
+
# block is stored into the main result set.
|
131
|
+
#
|
132
|
+
# @return [Array<pid, status, data>] An array containing the pid,
|
133
|
+
# status and data returned from the process block. If wait2() fails nil
|
134
|
+
# is returned.
|
96
135
|
def wait
|
136
|
+
log(:debug) { "wait" }
|
97
137
|
log(:debug) { "forks(#{@forks.inspect})" }
|
98
138
|
pid, status = (Process.wait2(-1) rescue nil)
|
99
139
|
if !pid.nil? && !status.nil? && !(fork = @forks.select{ |f| f[:pid] == pid }.first).nil?
|
@@ -109,30 +149,25 @@ module ZTK
|
|
109
149
|
nil
|
110
150
|
end
|
111
151
|
|
112
|
-
|
113
|
-
|
152
|
+
# Waits for all forks to finish.
|
153
|
+
#
|
154
|
+
# @return [Array<Object>] The results from all of the *process* blocks.
|
114
155
|
def waitall
|
115
|
-
|
156
|
+
log(:debug) { "waitall" }
|
116
157
|
while @forks.count > 0
|
117
|
-
|
118
|
-
result and data << result
|
158
|
+
self.wait
|
119
159
|
end
|
120
|
-
|
160
|
+
@results
|
121
161
|
end
|
122
162
|
|
123
|
-
|
124
|
-
|
163
|
+
# Count of active forks.
|
164
|
+
#
|
165
|
+
# @return [Integer] Current number of active forks.
|
125
166
|
def count
|
126
167
|
log(:debug) { "count(#{@forks.count})" }
|
127
168
|
@forks.count
|
128
169
|
end
|
129
170
|
|
130
|
-
################################################################################
|
131
|
-
|
132
171
|
end
|
133
172
|
|
134
|
-
################################################################################
|
135
|
-
|
136
173
|
end
|
137
|
-
|
138
|
-
################################################################################
|
data/lib/ztk/spinner.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -24,10 +24,13 @@ module ZTK
|
|
24
24
|
|
25
25
|
# ZTK::Spinner error class
|
26
26
|
#
|
27
|
-
# @author Zachary Patten <zachary@jovelabs.
|
27
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
28
|
+
# @author Stephen Nelson-Smith <stephen@atalanta-systems.com>
|
28
29
|
class SpinnerError < Error; end
|
29
30
|
|
30
|
-
#
|
31
|
+
# Spinner Class
|
32
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
33
|
+
# @author Stephen Nelson-Smith <stephen@atalanta-systems.com>
|
31
34
|
class Spinner
|
32
35
|
|
33
36
|
class << self
|
data/lib/ztk/ssh.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -27,23 +27,29 @@ module ZTK
|
|
27
27
|
|
28
28
|
# ZTK::SSH error class
|
29
29
|
#
|
30
|
-
# @author Zachary Patten <zachary@jovelabs.
|
30
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
31
31
|
class SSHError < Error; end
|
32
32
|
|
33
|
+
# SSH Multi-function Class
|
34
|
+
#
|
33
35
|
# We can get a new instance of SSH like so:
|
36
|
+
#
|
34
37
|
# ssh = ZTK::SSH.new
|
35
38
|
#
|
36
39
|
# If we wanted to redirect STDOUT and STDERR to a StringIO we can do this:
|
40
|
+
#
|
37
41
|
# std_combo = StringIO.new
|
38
42
|
# ssh = ZTK::SSH.new(:stdout => std_combo, :stderr => std_combo)
|
39
43
|
#
|
40
44
|
# If you want to specify SSH options you can:
|
45
|
+
#
|
41
46
|
# keys = File.expand_path(File.join(ENV['HOME'], '.ssh', 'id_rsa'))
|
42
47
|
# ssh = ZTK::SSH.new(:host_name => '127.0.0.1', :user => ENV['USER'], :keys => keys)
|
43
48
|
#
|
44
49
|
# = Configuration Examples:
|
45
50
|
#
|
46
51
|
# To proxy through another host, for example SSH to 192.168.1.1 through 192.168.0.1:
|
52
|
+
#
|
47
53
|
# ssh.config do |config|
|
48
54
|
# config.user = ENV['USER']
|
49
55
|
# config.host_name = '192.168.1.1'
|
@@ -52,27 +58,31 @@ module ZTK
|
|
52
58
|
# end
|
53
59
|
#
|
54
60
|
# Specify an identity file:
|
61
|
+
#
|
55
62
|
# ssh.config do |config|
|
56
63
|
# config.keys = File.expand_path(File.join(ENV['HOME'], '.ssh', 'id_rsa'))
|
57
64
|
# config.proxy_keys = File.expand_path(File.join(ENV['HOME'], '.ssh', 'id_rsa'))
|
58
65
|
# end
|
59
66
|
#
|
60
67
|
# Specify a timeout:
|
68
|
+
#
|
61
69
|
# ssh.config do |config|
|
62
70
|
# config.timeout = 30
|
63
71
|
# end
|
64
72
|
#
|
65
73
|
# Specify a password:
|
74
|
+
#
|
66
75
|
# ssh.config do |config|
|
67
76
|
# config.password = 'p@$$w0rd'
|
68
77
|
# end
|
69
78
|
#
|
70
79
|
# Check host keys, the default is false (off):
|
80
|
+
#
|
71
81
|
# ssh.config do |config|
|
72
82
|
# config.host_key_verify = true
|
73
83
|
# end
|
74
84
|
#
|
75
|
-
# @author Zachary Patten <zachary@jovelabs.
|
85
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
76
86
|
class SSH < ZTK::Base
|
77
87
|
|
78
88
|
# @param [Hash] config Configuration options hash.
|
@@ -131,13 +141,13 @@ module ZTK
|
|
131
141
|
# @return [OpenStruct#exit] The exit status (i.e. $?).
|
132
142
|
#
|
133
143
|
# @example Execute a command:
|
134
|
-
#
|
144
|
+
#
|
135
145
|
# ssh = ZTK::SSH.new
|
136
146
|
# ssh.config do |config|
|
137
147
|
# config.user = ENV["USER"]
|
138
148
|
# config.host_name = "127.0.0.1"
|
139
149
|
# end
|
140
|
-
# puts ssh.exec("hostname -f").
|
150
|
+
# puts ssh.exec("hostname -f").inspect
|
141
151
|
def exec(command, options={})
|
142
152
|
log(:debug) { "exec(#{command.inspect}, #{options.inspect})" }
|
143
153
|
log(:debug) { "config(#{@config.inspect})" }
|
data/lib/ztk/tcp_socket_check.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -25,15 +25,38 @@ module ZTK
|
|
25
25
|
|
26
26
|
# ZTK::TCPSocketCheck error class
|
27
27
|
#
|
28
|
-
# @author Zachary Patten <zachary@jovelabs.
|
28
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
29
29
|
class TCPSocketCheckError < Error; end
|
30
30
|
|
31
31
|
# TCP Socket Checking Class
|
32
32
|
#
|
33
|
+
# This class has two basic modes of operation:
|
34
|
+
#
|
35
|
+
# * Read Test
|
36
|
+
#
|
37
|
+
# By default we will perform a read test against the host and port specified.
|
38
|
+
# In this mode we will attempt to connect to the host and port supplied and if
|
39
|
+
# we can read any amount of data, regardless of the content we view this as
|
40
|
+
# success.
|
41
|
+
#
|
42
|
+
# * Write Test
|
43
|
+
#
|
44
|
+
# If data is supplied via the configuration, this will change the mode of
|
45
|
+
# operation to a write test. Certain services, such as HTTP don't send any
|
46
|
+
# data unless you send something first. In this mode we will attempt to
|
47
|
+
# connect to the host and port supplied, once connected we will write the
|
48
|
+
# supplied data to the socket and then attempt to read from the socket. If we
|
49
|
+
# can read any amount of data, reagardless of the conent we view this as
|
50
|
+
# success.
|
51
|
+
#
|
52
|
+
# = Typical usage:
|
53
|
+
#
|
33
54
|
# Given a host and port we want to check, we can do something like this:
|
55
|
+
#
|
34
56
|
# sc = ZTK::TCPSocketCheck.new(:host => "www.github.com", :port => 22)
|
35
57
|
#
|
36
58
|
# Then if we want to check if this host is responding on the specified port:
|
59
|
+
#
|
37
60
|
# sc.ready? and puts("They are there!")
|
38
61
|
#
|
39
62
|
# This works well for protocols that spew forth some data right away for use
|
@@ -42,17 +65,22 @@ module ZTK
|
|
42
65
|
#
|
43
66
|
# Given we want to check a host and port that requires some giving before we
|
44
67
|
# can take:
|
68
|
+
#
|
45
69
|
# sc = ZTK::TCPSocketCheck.new(:host => "www.google.com", :port => 80, :data => "GET")
|
46
70
|
#
|
47
71
|
# Then if we want to check if this host is responding on the specified port:
|
72
|
+
#
|
48
73
|
# sc.ready? and puts("They are there!")
|
74
|
+
#
|
49
75
|
# The ready? methods timeout is bound to the configuration option *timeout*.
|
50
76
|
#
|
51
77
|
# If we are waiting for a service to come online, we can do this:
|
78
|
+
#
|
52
79
|
# sc.wait and puts("They are there!")
|
80
|
+
#
|
53
81
|
# The wait methods timeout is bound to the configuration option *wait*.
|
54
82
|
#
|
55
|
-
# @author Zachary Patten <zachary@jovelabs.
|
83
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
56
84
|
class TCPSocketCheck < ZTK::Base
|
57
85
|
|
58
86
|
# @param [Hash] config Configuration options hash.
|
data/lib/ztk/template.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -24,23 +24,26 @@ module ZTK
|
|
24
24
|
|
25
25
|
# ZTK::Template error class
|
26
26
|
#
|
27
|
-
# @author Zachary Patten <zachary@jovelabs.
|
27
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
28
28
|
class TemplateError < Error; end
|
29
29
|
|
30
30
|
# Erubis Templating Class
|
31
31
|
#
|
32
32
|
# Given a template like this (i.e. "template.erb"):
|
33
|
+
#
|
33
34
|
# This is a test template!
|
34
35
|
# <%= @variable %>
|
35
36
|
#
|
36
37
|
# We can do this:
|
38
|
+
#
|
37
39
|
# ZTK::Template.render("template.erb", { :variable => "Hello World" })
|
38
40
|
#
|
39
41
|
# And get:
|
42
|
+
#
|
40
43
|
# This is a test template!
|
41
44
|
# Hello World
|
42
45
|
#
|
43
|
-
# @author Zachary Patten <zachary@jovelabs.
|
46
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
44
47
|
class Template
|
45
48
|
|
46
49
|
class << self
|
data/lib/ztk/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -19,5 +19,5 @@
|
|
19
19
|
################################################################################
|
20
20
|
|
21
21
|
module ZTK
|
22
|
-
VERSION = "0.0.
|
22
|
+
VERSION = "0.0.8" unless const_defined?(:VERSION)
|
23
23
|
end
|
data/lib/ztk.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -22,12 +22,12 @@ require "ztk/version"
|
|
22
22
|
|
23
23
|
# Main ZTK module
|
24
24
|
#
|
25
|
-
# @author Zachary Patten <zachary@jovelabs.
|
25
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
26
26
|
module ZTK
|
27
27
|
|
28
28
|
# ZTK error class
|
29
29
|
#
|
30
|
-
# @author Zachary Patten <zachary@jovelabs.
|
30
|
+
# @author Zachary Patten <zachary@jovelabs.net>
|
31
31
|
class Error < StandardError; end
|
32
32
|
|
33
33
|
autoload :Base, "ztk/base"
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -27,4 +27,6 @@ SimpleCov.start do
|
|
27
27
|
add_filter '/spec/'
|
28
28
|
end if ENV["COVERAGE"]
|
29
29
|
|
30
|
+
$logger = ZTK::Logger.new("test.log")
|
31
|
+
|
30
32
|
################################################################################
|
data/spec/ztk/command_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -25,7 +25,6 @@ describe ZTK::Command do
|
|
25
25
|
subject { ZTK::Command.new }
|
26
26
|
|
27
27
|
before(:all) do
|
28
|
-
$logger = ZTK::Logger.new("/dev/null")
|
29
28
|
$stdout = File.open("/dev/null", "w")
|
30
29
|
$stderr = File.open("/dev/null", "w")
|
31
30
|
$stdin = File.open("/dev/null", "r")
|
@@ -70,7 +69,7 @@ describe ZTK::Command do
|
|
70
69
|
end
|
71
70
|
hostname = %x( hostname -f ).chomp
|
72
71
|
status = subject.exec("hostname -f")
|
73
|
-
status.exitstatus.should == 0
|
72
|
+
status.exit.exitstatus.should == 0
|
74
73
|
stdout.rewind
|
75
74
|
stdout.read.chomp.should == hostname
|
76
75
|
end
|
data/spec/ztk/logger_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
data/spec/ztk/parallel_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -25,7 +25,6 @@ describe ZTK::Parallel do
|
|
25
25
|
subject { ZTK::Parallel.new }
|
26
26
|
|
27
27
|
before(:all) do
|
28
|
-
$logger = ZTK::Logger.new("/dev/null")
|
29
28
|
$stdout = File.open("/dev/null", "w")
|
30
29
|
$stderr = File.open("/dev/null", "w")
|
31
30
|
$stdin = File.open("/dev/null", "r")
|
@@ -83,6 +82,22 @@ describe ZTK::Parallel do
|
|
83
82
|
subject.results.include?(Process.pid).should be false
|
84
83
|
end
|
85
84
|
|
85
|
+
it "should be able to incrementally wait the forks" do
|
86
|
+
3.times do |x|
|
87
|
+
subject.process do
|
88
|
+
Process.pid
|
89
|
+
end
|
90
|
+
end
|
91
|
+
3.times do
|
92
|
+
subject.wait
|
93
|
+
end
|
94
|
+
puts subject.results.inspect
|
95
|
+
subject.results.all?{ |r| r.should be_kind_of Integer }
|
96
|
+
subject.results.all?{ |r| r.should > 0 }
|
97
|
+
subject.results.uniq.count.should == 3
|
98
|
+
subject.results.include?(Process.pid).should be false
|
99
|
+
end
|
100
|
+
|
86
101
|
end
|
87
102
|
|
88
103
|
end
|
data/spec/ztk/ssh_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -25,7 +25,6 @@ describe ZTK::SSH do
|
|
25
25
|
subject { ZTK::SSH.new }
|
26
26
|
|
27
27
|
before(:all) do
|
28
|
-
$logger = ZTK::Logger.new("test.log")
|
29
28
|
$stdout = File.open("/dev/null", "w")
|
30
29
|
$stderr = File.open("/dev/null", "w")
|
31
30
|
$stdin = File.open("/dev/null", "r")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -25,7 +25,6 @@ describe ZTK::TCPSocketCheck do
|
|
25
25
|
subject { ZTK::TCPSocketCheck.new }
|
26
26
|
|
27
27
|
before(:all) do
|
28
|
-
$logger = ZTK::Logger.new("/dev/null")
|
29
28
|
$stdout = File.open("/dev/null", "w")
|
30
29
|
$stderr = File.open("/dev/null", "w")
|
31
30
|
$stdin = File.open("/dev/null", "r")
|
data/spec/ztk/template_spec.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
################################################################################
|
2
2
|
#
|
3
|
-
# Author: Zachary Patten <zachary@jovelabs.
|
3
|
+
# Author: Zachary Patten <zachary@jovelabs.net>
|
4
4
|
# Copyright: Copyright (c) Jove Labs
|
5
5
|
# License: Apache License, Version 2.0
|
6
6
|
#
|
@@ -25,7 +25,6 @@ describe ZTK::Template do
|
|
25
25
|
subject { ZTK::Template }
|
26
26
|
|
27
27
|
before(:all) do
|
28
|
-
$logger = ZTK::Logger.new("/dev/null")
|
29
28
|
$stdout = File.open("/dev/null", "w")
|
30
29
|
$stderr = File.open("/dev/null", "w")
|
31
30
|
$stdin = File.open("/dev/null", "r")
|
data/ztk.gemspec
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path('../lib/ztk/version', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.authors = ["Zachary Patten"]
|
6
|
-
gem.email = ["zachary@jovelabs.
|
6
|
+
gem.email = ["zachary@jovelabs.net"]
|
7
7
|
gem.description = %q{Zachary's Tool Kit}
|
8
8
|
gem.summary = %q{Contains various classes and utilities I find I regularly need.}
|
9
9
|
gem.homepage = "https://github.com/jovelabs/ztk"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ztk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -157,7 +157,7 @@ dependencies:
|
|
157
157
|
version: '0'
|
158
158
|
description: Zachary's Tool Kit
|
159
159
|
email:
|
160
|
-
- zachary@jovelabs.
|
160
|
+
- zachary@jovelabs.net
|
161
161
|
executables:
|
162
162
|
- ztk
|
163
163
|
extensions: []
|
@@ -205,7 +205,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
205
205
|
version: '0'
|
206
206
|
segments:
|
207
207
|
- 0
|
208
|
-
hash: -
|
208
|
+
hash: -3183770896296440620
|
209
209
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
210
210
|
none: false
|
211
211
|
requirements:
|
@@ -214,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
214
214
|
version: '0'
|
215
215
|
segments:
|
216
216
|
- 0
|
217
|
-
hash: -
|
217
|
+
hash: -3183770896296440620
|
218
218
|
requirements: []
|
219
219
|
rubyforge_project:
|
220
220
|
rubygems_version: 1.8.24
|