ztk 0.0.6 → 0.0.7

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.
data/lib/ztk.rb CHANGED
@@ -20,7 +20,14 @@
20
20
 
21
21
  require "ztk/version"
22
22
 
23
+ # Main ZTK module
24
+ #
25
+ # @author Zachary Patten <zachary@jovelabs.com>
23
26
  module ZTK
27
+
28
+ # ZTK error class
29
+ #
30
+ # @author Zachary Patten <zachary@jovelabs.com>
24
31
  class Error < StandardError; end
25
32
 
26
33
  autoload :Base, "ztk/base"
@@ -31,4 +38,5 @@ module ZTK
31
38
  autoload :SSH, "ztk/ssh"
32
39
  autoload :TCPSocketCheck, "ztk/tcp_socket_check"
33
40
  autoload :Template, "ztk/template"
41
+
34
42
  end
@@ -20,12 +20,10 @@
20
20
 
21
21
  require "ostruct"
22
22
 
23
- ################################################################################
24
-
25
23
  module ZTK
26
24
 
27
- ################################################################################
28
-
25
+ # ZTK::Command error class
26
+ # @author Zachary Patten <zachary@jovelabs.com>
29
27
  class CommandError < Error; end
30
28
 
31
29
  ################################################################################
@@ -20,27 +20,24 @@
20
20
 
21
21
  require "logger"
22
22
 
23
- ################################################################################
24
-
25
23
  module ZTK
26
24
 
27
- ################################################################################
28
-
25
+ # @author Zachary Patten <zachary@jovelabs.com>
29
26
  class Logger < ::Logger
30
27
 
31
- ################################################################################
32
-
33
28
  SEVERITIES = Severity.constants.inject([]) {|arr,c| arr[Severity.const_get(c)] = c; arr}
34
29
 
35
- ################################################################################
36
-
37
30
  def initialize(*args)
38
31
  super(*args)
39
32
  set_log_level
40
33
  end
41
34
 
42
- ################################################################################
43
35
 
36
+ private
37
+
38
+ # Parses caller entries, extracting the file, line number and method.
39
+ #
40
+ # @param [String] at Entry from the caller Array.
44
41
  def parse_caller(at)
45
42
  if /^(.+?):(\d+)(?::in `(.*)')?/ =~ at
46
43
  file = Regexp.last_match[1]
@@ -52,15 +49,21 @@ module ZTK
52
49
  end
53
50
  end
54
51
 
55
- ################################################################################
56
-
52
+ # Writes a log message if the current log level is at or below the supplied
53
+ # severity.
54
+ #
55
+ # @param [Constant] severity Log level severity.
56
+ # @param [String] message Optional message to prefix the log entry with.
57
+ # @param [String] progname Optional name of the program to prefix the log
58
+ # entry with.
59
+ # @yieldreturn [String] The block should return the desired log message.
57
60
  def add(severity, message = nil, progname = nil, &block)
58
61
  return if (@level > severity)
59
62
 
60
63
  called_by = parse_caller(caller[1])
61
64
  msg = (block && block.call)
62
65
  (msg.nil? || msg.strip.empty?) and return
63
- message = [message, progname, msg].delete_if{ |i| i.nil? }.join(": ")
66
+ message = [message, progname, msg].flatten.compact.join(": ")
64
67
  message = "%19s.%06d|%05d|%5s|%s%s\n" % [Time.now.utc.strftime("%Y-%m-%d|%H:%M:%S"), Time.now.utc.usec, Process.pid, SEVERITIES[severity], called_by, message]
65
68
 
66
69
  @logdev.write(message)
@@ -68,20 +71,15 @@ module ZTK
68
71
  true
69
72
  end
70
73
 
71
- ################################################################################
72
-
74
+ # Sets the log level.
75
+ #
76
+ # @param [String] level Log level to use.
73
77
  def set_log_level(level=nil)
74
78
  defined?(Rails) and (default = (Rails.env.production? ? "INFO" : "DEBUG")) or (default = "INFO")
75
79
  log_level = (ENV['LOG_LEVEL'] || level || default)
76
80
  self.level = ZTK::Logger.const_get(log_level.to_s.upcase)
77
81
  end
78
82
 
79
- ################################################################################
80
-
81
83
  end
82
84
 
83
- ################################################################################
84
-
85
85
  end
86
-
87
- ################################################################################
@@ -20,24 +20,18 @@
20
20
 
21
21
  require "ostruct"
22
22
 
23
- ################################################################################
24
-
25
23
  module ZTK
26
24
 
27
- ################################################################################
28
-
25
+ # ZTK::Spinner error class
26
+ #
27
+ # @author Zachary Patten <zachary@jovelabs.com>
29
28
  class SpinnerError < Error; end
30
29
 
31
- ################################################################################
32
-
30
+ # @author Zachary Patten <zachary@jovelabs.com>
33
31
  class Spinner
34
32
 
35
- ################################################################################
36
-
37
33
  class << self
38
34
 
39
- ################################################################################
40
-
41
35
  def spin(stdout=$stdout)
42
36
  charset = %w( | / - \\ )
43
37
  count = 0
@@ -56,16 +50,8 @@ module ZTK
56
50
  end
57
51
  end
58
52
 
59
- ################################################################################
60
-
61
53
  end
62
54
 
63
- ################################################################################
64
-
65
55
  end
66
56
 
67
- ################################################################################
68
-
69
57
  end
70
-
71
- ################################################################################
@@ -26,6 +26,8 @@ require "net/sftp"
26
26
  module ZTK
27
27
 
28
28
  # ZTK::SSH error class
29
+ #
30
+ # @author Zachary Patten <zachary@jovelabs.com>
29
31
  class SSHError < Error; end
30
32
 
31
33
  # We can get a new instance of SSH like so:
@@ -69,24 +71,36 @@ module ZTK
69
71
  # ssh.config do |config|
70
72
  # config.host_key_verify = true
71
73
  # end
74
+ #
75
+ # @author Zachary Patten <zachary@jovelabs.com>
72
76
  class SSH < ZTK::Base
73
77
 
74
78
  # @param [Hash] config Configuration options hash.
75
79
  # @option config [String] :host_name Server hostname to connect to.
76
80
  # @option config [String] :user Username to use for authentication.
77
- # @option config [String, Array<String>] :keys A single or series of identity files to use for authentication.
81
+ # @option config [String, Array<String>] :keys A single or series of
82
+ # identity files to use for authentication.
78
83
  # @option config [String] :password Password to use for authentication.
79
84
  # @option config [Integer] :timeout SSH connection timeout to use.
80
- # @option config [Boolean] :compression Weither or not to use compression for this session.
81
- # @option config [Integer] :compression_level What level of compression to use.
85
+ # @option config [Boolean] :compression Weither or not to use compression
86
+ # for this session.
87
+ # @option config [Integer] :compression_level What level of compression to
88
+ # use.
82
89
  # @option config [String] :proxy_host_name Server hostname to proxy through.
83
- # @option config [String] :proxy_user Username to use for proxy authentication.
84
- # @option config [String, Array<String>] :proxy_keys A single or series of identity files to use for authentication with the proxy.
90
+ # @option config [String] :proxy_user Username to use for proxy
91
+ # authentication.
92
+ # @option config [String, Array<String>] :proxy_keys A single or series of
93
+ # identity files to use for authentication with the proxy.
85
94
  def initialize(config={})
86
- super(config)
95
+ super({
96
+ :forward_agent => true,
97
+ :compression => false,
98
+ :user_known_hosts_file => '/dev/null'
99
+ }.merge(config))
87
100
  end
88
101
 
89
- # Launches an SSH console, replacing the current process with the console process.
102
+ # Launches an SSH console, replacing the current process with the console
103
+ # process.
90
104
  #
91
105
  # @example Launch a console:
92
106
  # $logger = ZTK::Logger.new(STDOUT)
@@ -107,9 +121,13 @@ module ZTK
107
121
  #
108
122
  # @param [String] command The command to execute.
109
123
  # @param [Hash] options The options hash for executing the command.
110
- # @option options [Boolean] :silence Squelch output to STDOUT and STDERR. If the log level is :debug, STDOUT and STDERR will go to the log file regardless of this setting. STDOUT and STDERR are always returned in the output return value regardless of this setting.
124
+ # @option options [Boolean] :silence Squelch output to STDOUT and STDERR.
125
+ # If the log level is :debug, STDOUT and STDERR will go to the log file
126
+ # regardless of this setting. STDOUT and STDERR are always returned in
127
+ # the output return value regardless of this setting.
111
128
  #
112
- # @return [OpenStruct#output] The output of the command, both STDOUT and STDERR.
129
+ # @return [OpenStruct#output] The output of the command, both STDOUT and
130
+ # STDERR.
113
131
  # @return [OpenStruct#exit] The exit status (i.e. $?).
114
132
  #
115
133
  # @example Execute a command:
@@ -296,11 +314,7 @@ module ZTK
296
314
  log(:debug) { "ssh_options" }
297
315
  log(:debug) { "config(#{@config.inspect})" }
298
316
 
299
- options = {
300
- :forward_agent => true,
301
- :compression => false,
302
- :user_known_hosts_file => '/dev/null'
303
- }
317
+ options = {}
304
318
 
305
319
  # These are plainly documented on the Net::SSH config class.
306
320
  options.merge!(:encryption => @config.encryption) if @config.encryption
@@ -18,34 +18,63 @@
18
18
  #
19
19
  ################################################################################
20
20
 
21
- require "socket"
22
-
23
- ################################################################################
21
+ require 'socket'
22
+ require 'timeout'
24
23
 
25
24
  module ZTK
26
25
 
27
- ################################################################################
28
-
26
+ # ZTK::TCPSocketCheck error class
27
+ #
28
+ # @author Zachary Patten <zachary@jovelabs.com>
29
29
  class TCPSocketCheckError < Error; end
30
30
 
31
- ################################################################################
32
-
31
+ # TCP Socket Checking Class
32
+ #
33
+ # Given a host and port we want to check, we can do something like this:
34
+ # sc = ZTK::TCPSocketCheck.new(:host => "www.github.com", :port => 22)
35
+ #
36
+ # Then if we want to check if this host is responding on the specified port:
37
+ # sc.ready? and puts("They are there!")
38
+ #
39
+ # This works well for protocols that spew forth some data right away for use
40
+ # to read. However, with certain protocols, such as HTTP, we need to send
41
+ # some data first before we get a response.
42
+ #
43
+ # Given we want to check a host and port that requires some giving before we
44
+ # can take:
45
+ # sc = ZTK::TCPSocketCheck.new(:host => "www.google.com", :port => 80, :data => "GET")
46
+ #
47
+ # Then if we want to check if this host is responding on the specified port:
48
+ # sc.ready? and puts("They are there!")
49
+ # The ready? methods timeout is bound to the configuration option *timeout*.
50
+ #
51
+ # If we are waiting for a service to come online, we can do this:
52
+ # sc.wait and puts("They are there!")
53
+ # The wait methods timeout is bound to the configuration option *wait*.
54
+ #
55
+ # @author Zachary Patten <zachary@jovelabs.com>
33
56
  class TCPSocketCheck < ZTK::Base
34
57
 
35
- ################################################################################
36
-
58
+ # @param [Hash] config Configuration options hash.
59
+ # @option config [String] :host Host to connect to.
60
+ # @option config [Integer, String] :port Port to connect to.
61
+ # @option config [String] :data Data to send to host to provoke a response.
62
+ # @option config [Integer] :timeout (5) Set the IO select timeout.
63
+ # @option config [Integer] :wait (60) Set the amount of time before the wait
64
+ # method call will timeout.
37
65
  def initialize(config={})
38
66
  super({
39
- :host => nil,
40
- :port => nil,
41
- :data => nil,
42
67
  :timeout => 5,
43
68
  :wait => 60
44
69
  }.merge(config))
45
70
  end
46
71
 
47
- ################################################################################
48
-
72
+ # Check to see if socket on the host and port specified is ready. This
73
+ # method will timeout and return false after the amount of seconds specified
74
+ # in *config.timeout* has passed if the socket has not become ready.
75
+ #
76
+ # @return [Boolean] Returns true or false depending on weither the socket
77
+ # is ready or not.
49
78
  def ready?
50
79
  if @config.host.nil?
51
80
  message = "You must supply a host!"
@@ -76,8 +105,12 @@ module ZTK
76
105
  (socket && socket.close)
77
106
  end
78
107
 
79
- ################################################################################
80
-
108
+ # Wait for the socket on the host and port specified to become ready. This
109
+ # method will timeout and return false after the amount of seconds specified
110
+ # in *config.wait* has passed if the socket has not become ready.
111
+ #
112
+ # @return [Boolean] Returns true or false depending on weither the socket
113
+ # became ready or not.
81
114
  def wait
82
115
  log(:debug) { "waiting for socket to become available; timeout after #{@config.wait} seconds" }
83
116
  Timeout.timeout(@config.wait) do
@@ -92,12 +125,6 @@ module ZTK
92
125
  false
93
126
  end
94
127
 
95
- ################################################################################
96
-
97
128
  end
98
129
 
99
- ################################################################################
100
-
101
130
  end
102
-
103
- ################################################################################
@@ -20,52 +20,56 @@
20
20
 
21
21
  require "erubis"
22
22
 
23
- ################################################################################
24
-
25
23
  module ZTK
26
24
 
27
- ################################################################################
28
-
25
+ # ZTK::Template error class
26
+ #
27
+ # @author Zachary Patten <zachary@jovelabs.com>
29
28
  class TemplateError < Error; end
30
29
 
31
- ################################################################################
32
-
30
+ # Erubis Templating Class
31
+ #
32
+ # Given a template like this (i.e. "template.erb"):
33
+ # This is a test template!
34
+ # <%= @variable %>
35
+ #
36
+ # We can do this:
37
+ # ZTK::Template.render("template.erb", { :variable => "Hello World" })
38
+ #
39
+ # And get:
40
+ # This is a test template!
41
+ # Hello World
42
+ #
43
+ # @author Zachary Patten <zachary@jovelabs.com>
33
44
  class Template
34
45
 
35
- ################################################################################
36
-
37
46
  class << self
38
47
 
39
- ################################################################################
40
-
48
+ # Renders a template to a string.
49
+ #
50
+ # @param [String] template The ERB template to process.
51
+ # @param [Hash] context A hash containing key-pairs, for which the keys are turned into global variables with their respective values.
52
+ #
53
+ # @return [String] The evaulated template content.
41
54
  def render(template, context=nil)
42
55
  render_template(load_template(template), context)
43
56
  end
44
57
 
45
- ################################################################################
58
+
46
59
  private
47
- ################################################################################
48
60
 
61
+ # Loads the template files contents.
49
62
  def load_template(template)
50
63
  IO.read(template).chomp
51
64
  end
52
65
 
53
- ################################################################################
54
-
66
+ # Renders the template through Erubis.
55
67
  def render_template(template, context={})
56
68
  Erubis::Eruby.new(template).evaluate(context)
57
69
  end
58
70
 
59
- ################################################################################
60
-
61
71
  end
62
72
 
63
- ################################################################################
64
-
65
73
  end
66
74
 
67
- ################################################################################
68
-
69
75
  end
70
-
71
- ################################################################################
@@ -19,5 +19,5 @@
19
19
  ################################################################################
20
20
 
21
21
  module ZTK
22
- VERSION = "0.0.6" unless const_defined?(:VERSION)
22
+ VERSION = "0.0.7" unless const_defined?(:VERSION)
23
23
  end
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.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -205,7 +205,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
205
205
  version: '0'
206
206
  segments:
207
207
  - 0
208
- hash: 3329543031620665477
208
+ hash: -971283166384197742
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: 3329543031620665477
217
+ hash: -971283166384197742
218
218
  requirements: []
219
219
  rubyforge_project:
220
220
  rubygems_version: 1.8.24