ztk 0.0.8 → 0.0.9
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 +10 -9
- data/lib/ztk/base.rb +9 -9
- data/lib/ztk/command.rb +1 -1
- data/lib/ztk/config.rb +130 -0
- data/lib/ztk/parallel.rb +11 -2
- data/lib/ztk/spinner.rb +2 -1
- data/lib/ztk/ssh.rb +1 -1
- data/lib/ztk/tcp_socket_check.rb +1 -1
- data/lib/ztk/template.rb +1 -1
- data/lib/ztk/version.rb +1 -1
- data/spec/support/test-config.rb +2 -0
- data/spec/ztk/config_spec.rb +72 -0
- data/spec/ztk/ssh_spec.rb +34 -30
- metadata +9 -4
    
        data/lib/ztk.rb
    CHANGED
    
    | @@ -18,7 +18,7 @@ | |
| 18 18 | 
             
            #
         | 
| 19 19 | 
             
            ################################################################################
         | 
| 20 20 |  | 
| 21 | 
            -
            require  | 
| 21 | 
            +
            require 'ztk/version'
         | 
| 22 22 |  | 
| 23 23 | 
             
            # Main ZTK module
         | 
| 24 24 | 
             
            #
         | 
| @@ -30,13 +30,14 @@ module ZTK | |
| 30 30 | 
             
              # @author Zachary Patten <zachary@jovelabs.net>
         | 
| 31 31 | 
             
              class Error < StandardError; end
         | 
| 32 32 |  | 
| 33 | 
            -
              autoload :Base,  | 
| 34 | 
            -
              autoload :Command,  | 
| 35 | 
            -
              autoload : | 
| 36 | 
            -
              autoload : | 
| 37 | 
            -
              autoload : | 
| 38 | 
            -
              autoload : | 
| 39 | 
            -
              autoload : | 
| 40 | 
            -
              autoload : | 
| 33 | 
            +
              autoload :Base, 'ztk/base'
         | 
| 34 | 
            +
              autoload :Command, 'ztk/command'
         | 
| 35 | 
            +
              autoload :Config, 'ztk/config'
         | 
| 36 | 
            +
              autoload :Logger, 'ztk/logger'
         | 
| 37 | 
            +
              autoload :Parallel, 'ztk/parallel'
         | 
| 38 | 
            +
              autoload :Spinner, 'ztk/spinner'
         | 
| 39 | 
            +
              autoload :SSH, 'ztk/ssh'
         | 
| 40 | 
            +
              autoload :TCPSocketCheck, 'ztk/tcp_socket_check'
         | 
| 41 | 
            +
              autoload :Template, 'ztk/template'
         | 
| 41 42 |  | 
| 42 43 | 
             
            end
         | 
    
        data/lib/ztk/base.rb
    CHANGED
    
    | @@ -22,7 +22,7 @@ require "ostruct" | |
| 22 22 |  | 
| 23 23 | 
             
            module ZTK
         | 
| 24 24 |  | 
| 25 | 
            -
              # ZTK::Base  | 
| 25 | 
            +
              # ZTK::Base Error Class
         | 
| 26 26 | 
             
              class BaseError < Error; end
         | 
| 27 27 |  | 
| 28 28 | 
             
              # ZTK Base Class
         | 
| @@ -35,18 +35,18 @@ module ZTK | |
| 35 35 | 
             
              # and extend functionality as appropriate.
         | 
| 36 36 | 
             
              class Base
         | 
| 37 37 |  | 
| 38 | 
            -
                # @param [Hash] config  | 
| 39 | 
            -
                # @option config [IO] :stdout  | 
| 40 | 
            -
                # @option config [IO] :stderr  | 
| 41 | 
            -
                # @option config [IO] :stdin  | 
| 42 | 
            -
                # @option config [Logger] :logger  | 
| 38 | 
            +
                # @param [Hash] config Configuration options hash.
         | 
| 39 | 
            +
                # @option config [IO] :stdout Instance of IO to be used for STDOUT.
         | 
| 40 | 
            +
                # @option config [IO] :stderr Instance of IO to be used for STDERR.
         | 
| 41 | 
            +
                # @option config [IO] :stdin Instance of IO to be used for STDIN.
         | 
| 42 | 
            +
                # @option config [Logger] :logger Instance of Logger to be used for logging.
         | 
| 43 43 | 
             
                def initialize(config={})
         | 
| 44 | 
            -
                  defined?(Rails) and rails_logger = Rails.logger
         | 
| 44 | 
            +
                  # defined?(Rails) and rails_logger = Rails.logger
         | 
| 45 45 | 
             
                  @config = OpenStruct.new({
         | 
| 46 46 | 
             
                    :stdout => $stdout,
         | 
| 47 47 | 
             
                    :stderr => $stderr,
         | 
| 48 48 | 
             
                    :stdin => $stdin,
         | 
| 49 | 
            -
                    :logger =>  | 
| 49 | 
            +
                    :logger => $logger
         | 
| 50 50 | 
             
                  }.merge(config))
         | 
| 51 51 |  | 
| 52 52 | 
             
                  @config.stdout.respond_to?(:sync=) and @config.stdout.sync = true
         | 
| @@ -85,7 +85,7 @@ module ZTK | |
| 85 85 | 
             
                  if block_given?
         | 
| 86 86 | 
             
                    @config.logger and @config.logger.method(method_name.to_sym).call { yield }
         | 
| 87 87 | 
             
                  else
         | 
| 88 | 
            -
                    raise | 
| 88 | 
            +
                    raise BaseError, "You must supply a block to the log method!"
         | 
| 89 89 | 
             
                  end
         | 
| 90 90 | 
             
                end
         | 
| 91 91 |  | 
    
        data/lib/ztk/command.rb
    CHANGED
    
    
    
        data/lib/ztk/config.rb
    ADDED
    
    | @@ -0,0 +1,130 @@ | |
| 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 | 
            +
             | 
| 21 | 
            +
            require 'ostruct'
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            module ZTK
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              # ZTK::Config Error Class
         | 
| 26 | 
            +
              #
         | 
| 27 | 
            +
              # @author Zachary Patten <zachary@jovelabs.net>
         | 
| 28 | 
            +
              class ConfigError < Error; end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              # Configuration Module
         | 
| 31 | 
            +
              #
         | 
| 32 | 
            +
              # @author Zachary Patten <zachary@jovelabs.net>
         | 
| 33 | 
            +
              module Config
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                # Extend base class with this module.
         | 
| 36 | 
            +
                #
         | 
| 37 | 
            +
                # This will add the *configuration* attribute to the base class and create
         | 
| 38 | 
            +
                # a new *OpenStruct* object assigning it to the *configuration* attribute.
         | 
| 39 | 
            +
                def self.extended(base)
         | 
| 40 | 
            +
                  class << base
         | 
| 41 | 
            +
                    attr_accessor :configuration
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  base.configuration = OpenStruct.new
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                # Loads a configuration from a file.
         | 
| 48 | 
            +
                def from_file(filename)
         | 
| 49 | 
            +
                  self.instance_eval(IO.read(filename), filename, 1)
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                # Yields the configuration OpenStruct object to a block.
         | 
| 53 | 
            +
                #
         | 
| 54 | 
            +
                # @yield [configuration] Pass the configuration OpenStruct object to the
         | 
| 55 | 
            +
                #   specified block.
         | 
| 56 | 
            +
                def config(&block)
         | 
| 57 | 
            +
                  block and block.call(self.configuration)
         | 
| 58 | 
            +
                end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                # Get the value of a configuration key.
         | 
| 61 | 
            +
                #
         | 
| 62 | 
            +
                # @param [Symbol, String] key A symbol or string of the configuration
         | 
| 63 | 
            +
                #   key to return.
         | 
| 64 | 
            +
                #
         | 
| 65 | 
            +
                # @return The value currently assigned to the configuration key.
         | 
| 66 | 
            +
                def [](key)
         | 
| 67 | 
            +
                  _get(key)
         | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                # Set the value of a configuration key.
         | 
| 71 | 
            +
                #
         | 
| 72 | 
            +
                # @param [Symbol, String] key A symbol or string of the configuration
         | 
| 73 | 
            +
                #   key to set.
         | 
| 74 | 
            +
                # @param value The value which you want to assign to the configuration
         | 
| 75 | 
            +
                #   key.
         | 
| 76 | 
            +
                #
         | 
| 77 | 
            +
                # @return The value assigned to the configuration key.
         | 
| 78 | 
            +
                def []=(key, value)
         | 
| 79 | 
            +
                  _set(key, value)
         | 
| 80 | 
            +
                end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                # @see Hash#keys
         | 
| 83 | 
            +
                def keys
         | 
| 84 | 
            +
                  self.configuration.send(:table).keys
         | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                # @see Hash#has_key?
         | 
| 88 | 
            +
                def has_key?(key)
         | 
| 89 | 
            +
                  self.configuration.send(:table).has_key?(key)
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                # @see Hash#merge
         | 
| 93 | 
            +
                def merge(hash)
         | 
| 94 | 
            +
                  self.configuration.send(:table).merge(hash)
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                # @see Hash#merge!
         | 
| 98 | 
            +
                def merge!(hash)
         | 
| 99 | 
            +
                  self.configuration.send(:table).merge!(hash)
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                # Handles method calls for our configuration keys.
         | 
| 103 | 
            +
                def method_missing(method_symbol, *method_args)
         | 
| 104 | 
            +
                  if method_args.length > 0
         | 
| 105 | 
            +
                    _set(method_symbol, method_args.first)
         | 
| 106 | 
            +
                  end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                  _get(method_symbol)
         | 
| 109 | 
            +
                end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
             | 
| 112 | 
            +
              private
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                def _set(key, value)
         | 
| 115 | 
            +
                  key = key.to_s
         | 
| 116 | 
            +
                  (key =~ /=/) or key += '='
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                  self.configuration.send(key.to_sym, value)
         | 
| 119 | 
            +
                end
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                def _get(key)
         | 
| 122 | 
            +
                  key = key.to_s
         | 
| 123 | 
            +
                  (key !~ /=/) or key = key[0..-2]
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                  self.configuration.send(key.to_sym)
         | 
| 126 | 
            +
                end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
              end
         | 
| 129 | 
            +
             | 
| 130 | 
            +
            end
         | 
    
        data/lib/ztk/parallel.rb
    CHANGED
    
    | @@ -22,7 +22,7 @@ require "base64" | |
| 22 22 |  | 
| 23 23 | 
             
            module ZTK
         | 
| 24 24 |  | 
| 25 | 
            -
              # ZTK::Parallel  | 
| 25 | 
            +
              # ZTK::Parallel Error Class
         | 
| 26 26 | 
             
              #
         | 
| 27 27 | 
             
              # @author Zachary Patten <zachary@jovelabs.net>
         | 
| 28 28 | 
             
              class ParallelError < Error; end
         | 
| @@ -62,6 +62,13 @@ module ZTK | |
| 62 62 | 
             
              # @author Zachary Patten <zachary@jovelabs.net>
         | 
| 63 63 | 
             
              class Parallel < ZTK::Base
         | 
| 64 64 |  | 
| 65 | 
            +
                MAX_FORKS = case RUBY_PLATFORM
         | 
| 66 | 
            +
                when /darwin/ then
         | 
| 67 | 
            +
                  %x( sysctl hw.ncpu ).chomp.split(':').last.strip.to_i
         | 
| 68 | 
            +
                when /linux/ then
         | 
| 69 | 
            +
                  %x( grep -c processor /proc/cpuinfo ).chomp.strip.to_i
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 65 72 | 
             
                # Result Set
         | 
| 66 73 | 
             
                attr_accessor :results
         | 
| 67 74 |  | 
| @@ -71,9 +78,11 @@ module ZTK | |
| 71 78 | 
             
                # @option config [Proc] :after_fork (nil) Proc to call after forking.
         | 
| 72 79 | 
             
                def initialize(config={})
         | 
| 73 80 | 
             
                  super({
         | 
| 74 | 
            -
                    :max_forks =>  | 
| 81 | 
            +
                    :max_forks => MAX_FORKS
         | 
| 75 82 | 
             
                  }.merge(config))
         | 
| 76 83 |  | 
| 84 | 
            +
                  raise ParallelError, "max_forks must be equal to or greater than one!" if @config.max_forks < 1
         | 
| 85 | 
            +
             | 
| 77 86 | 
             
                  @forks = Array.new
         | 
| 78 87 | 
             
                  @results = Array.new
         | 
| 79 88 | 
             
                  GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true
         | 
    
        data/lib/ztk/spinner.rb
    CHANGED
    
    | @@ -22,13 +22,14 @@ require "ostruct" | |
| 22 22 |  | 
| 23 23 | 
             
            module ZTK
         | 
| 24 24 |  | 
| 25 | 
            -
              # ZTK::Spinner  | 
| 25 | 
            +
              # ZTK::Spinner Error Class
         | 
| 26 26 | 
             
              #
         | 
| 27 27 | 
             
              # @author Zachary Patten <zachary@jovelabs.net>
         | 
| 28 28 | 
             
              # @author Stephen Nelson-Smith <stephen@atalanta-systems.com>
         | 
| 29 29 | 
             
              class SpinnerError < Error; end
         | 
| 30 30 |  | 
| 31 31 | 
             
              # Spinner Class
         | 
| 32 | 
            +
              #
         | 
| 32 33 | 
             
              # @author Zachary Patten <zachary@jovelabs.net>
         | 
| 33 34 | 
             
              # @author Stephen Nelson-Smith <stephen@atalanta-systems.com>
         | 
| 34 35 | 
             
              class Spinner
         | 
    
        data/lib/ztk/ssh.rb
    CHANGED
    
    
    
        data/lib/ztk/tcp_socket_check.rb
    CHANGED
    
    
    
        data/lib/ztk/template.rb
    CHANGED
    
    
    
        data/lib/ztk/version.rb
    CHANGED
    
    
| @@ -0,0 +1,72 @@ | |
| 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 | 
            +
             | 
| 21 | 
            +
            require "spec_helper"
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            describe ZTK::Config do
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              subject { class C; extend(ZTK::Config); end; C }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
              before(:all) do
         | 
| 28 | 
            +
                $stdout = File.open("/dev/null", "w")
         | 
| 29 | 
            +
                $stderr = File.open("/dev/null", "w")
         | 
| 30 | 
            +
                $stdin = File.open("/dev/null", "r")
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              describe "class" do
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                it "should be a kind of ZTK::Config" do
         | 
| 36 | 
            +
                  subject.should be_a_kind_of ZTK::Config
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                describe "default config" do
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  it "should have an OpenStruct object for holding the configuration" do
         | 
| 42 | 
            +
                    subject.configuration.should be_an_instance_of OpenStruct
         | 
| 43 | 
            +
                    subject.keys.length.should == 0
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                describe "behaviour" do
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  it "should allow setting of arbratary configuration keys" do
         | 
| 51 | 
            +
                    subject.thing = "something"
         | 
| 52 | 
            +
                    subject.thing.should == "something"
         | 
| 53 | 
            +
                    subject[:thing].should == "something"
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  it "should allow hash bracket style access to configuration keys" do
         | 
| 57 | 
            +
                    subject[:thing] = "nothing"
         | 
| 58 | 
            +
                    subject[:thing].should == "nothing"
         | 
| 59 | 
            +
                  end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  it "should allow loading of configurations from disk" do
         | 
| 62 | 
            +
                    config_file = File.expand_path(File.join(File.dirname(__FILE__), "..", "support", "test-config.rb"))
         | 
| 63 | 
            +
                    subject.from_file(config_file)
         | 
| 64 | 
            +
                    subject.message.should == "Hello World"
         | 
| 65 | 
            +
                    subject.thing.should == 2
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            end
         | 
    
        data/spec/ztk/ssh_spec.rb
    CHANGED
    
    | @@ -60,39 +60,43 @@ describe ZTK::SSH do | |
| 60 60 |  | 
| 61 61 | 
             
                end
         | 
| 62 62 |  | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 63 | 
            +
                # this stuff doesn't work as is under travis-ci
         | 
| 64 | 
            +
                if !ENV['CI'] && !ENV['TRAVIS']
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                  describe "behaviour" do
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                    it "should be able to connect to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
         | 
| 69 | 
            +
                      stdout = StringIO.new
         | 
| 70 | 
            +
                      subject.config do |config|
         | 
| 71 | 
            +
                        config.stdout = stdout
         | 
| 72 | 
            +
                        config.user = ENV["USER"]
         | 
| 73 | 
            +
                        config.host_name = "127.0.0.1"
         | 
| 74 | 
            +
                      end
         | 
| 75 | 
            +
                      hostname = %x( hostname -f ).chomp
         | 
| 76 | 
            +
                      status = subject.exec("hostname -f")
         | 
| 77 | 
            +
                      status.exit.exitstatus.should == 0
         | 
| 78 | 
            +
                      stdout.rewind
         | 
| 79 | 
            +
                      stdout.read.chomp.should == hostname
         | 
| 80 | 
            +
                    end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                    it "should be able to proxy through 127.0.0.1, connecting to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
         | 
| 83 | 
            +
                      stdout = StringIO.new
         | 
| 84 | 
            +
                      subject.config do |config|
         | 
| 85 | 
            +
                        config.stdout = stdout
         | 
| 86 | 
            +
                        config.user = ENV["USER"]
         | 
| 87 | 
            +
                        config.host_name = "127.0.0.1"
         | 
| 88 | 
            +
                        config.proxy_user = ENV["USER"]
         | 
| 89 | 
            +
                        config.proxy_host_name = "127.0.0.1"
         | 
| 90 | 
            +
                      end
         | 
| 91 | 
            +
                      hostname = %x( hostname -f ).chomp
         | 
| 92 | 
            +
                      status = subject.exec("hostname -f")
         | 
| 93 | 
            +
                      status.exit.exitstatus.should == 0
         | 
| 94 | 
            +
                      stdout.rewind
         | 
| 95 | 
            +
                      stdout.read.chomp.should == hostname
         | 
| 96 | 
            +
                    end
         | 
| 67 97 |  | 
| 68 | 
            -
                it "should be able to connect to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
         | 
| 69 | 
            -
                  stdout = StringIO.new
         | 
| 70 | 
            -
                  subject.config do |config|
         | 
| 71 | 
            -
                    config.stdout = stdout
         | 
| 72 | 
            -
                    config.user = ENV["USER"]
         | 
| 73 | 
            -
                    config.host_name = "127.0.0.1"
         | 
| 74 98 | 
             
                  end
         | 
| 75 | 
            -
                  hostname = %x( hostname -f ).chomp
         | 
| 76 | 
            -
                  status = subject.exec("hostname -f")
         | 
| 77 | 
            -
                  status.exit.exitstatus.should == 0
         | 
| 78 | 
            -
                  stdout.rewind
         | 
| 79 | 
            -
                  stdout.read.chomp.should == hostname
         | 
| 80 | 
            -
                end
         | 
| 81 99 |  | 
| 82 | 
            -
                it "should be able to proxy through 127.0.0.1, connecting to 127.0.0.1 as the current user and execute a command (your key must be in ssh-agent)" do
         | 
| 83 | 
            -
                  stdout = StringIO.new
         | 
| 84 | 
            -
                  subject.config do |config|
         | 
| 85 | 
            -
                    config.stdout = stdout
         | 
| 86 | 
            -
                    config.user = ENV["USER"]
         | 
| 87 | 
            -
                    config.host_name = "127.0.0.1"
         | 
| 88 | 
            -
                    config.proxy_user = ENV["USER"]
         | 
| 89 | 
            -
                    config.proxy_host_name = "127.0.0.1"
         | 
| 90 | 
            -
                  end
         | 
| 91 | 
            -
                  hostname = %x( hostname -f ).chomp
         | 
| 92 | 
            -
                  status = subject.exec("hostname -f")
         | 
| 93 | 
            -
                  status.exit.exitstatus.should == 0
         | 
| 94 | 
            -
                  stdout.rewind
         | 
| 95 | 
            -
                  stdout.read.chomp.should == hostname
         | 
| 96 100 | 
             
                end
         | 
| 97 101 |  | 
| 98 102 | 
             
              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. | 
| 4 | 
            +
              version: 0.0.9
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2012-09- | 
| 12 | 
            +
            date: 2012-09-18 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: erubis
         | 
| @@ -175,6 +175,7 @@ files: | |
| 175 175 | 
             
            - lib/ztk.rb
         | 
| 176 176 | 
             
            - lib/ztk/base.rb
         | 
| 177 177 | 
             
            - lib/ztk/command.rb
         | 
| 178 | 
            +
            - lib/ztk/config.rb
         | 
| 178 179 | 
             
            - lib/ztk/logger.rb
         | 
| 179 180 | 
             
            - lib/ztk/parallel.rb
         | 
| 180 181 | 
             
            - lib/ztk/spinner.rb
         | 
| @@ -183,8 +184,10 @@ files: | |
| 183 184 | 
             
            - lib/ztk/template.rb
         | 
| 184 185 | 
             
            - lib/ztk/version.rb
         | 
| 185 186 | 
             
            - spec/spec_helper.rb
         | 
| 187 | 
            +
            - spec/support/test-config.rb
         | 
| 186 188 | 
             
            - spec/support/test-template.txt.erb
         | 
| 187 189 | 
             
            - spec/ztk/command_spec.rb
         | 
| 190 | 
            +
            - spec/ztk/config_spec.rb
         | 
| 188 191 | 
             
            - spec/ztk/logger_spec.rb
         | 
| 189 192 | 
             
            - spec/ztk/parallel_spec.rb
         | 
| 190 193 | 
             
            - spec/ztk/ssh_spec.rb
         | 
| @@ -205,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 205 208 | 
             
                  version: '0'
         | 
| 206 209 | 
             
                  segments:
         | 
| 207 210 | 
             
                  - 0
         | 
| 208 | 
            -
                  hash: - | 
| 211 | 
            +
                  hash: -1649300180131473211
         | 
| 209 212 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 210 213 | 
             
              none: false
         | 
| 211 214 | 
             
              requirements:
         | 
| @@ -214,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 214 217 | 
             
                  version: '0'
         | 
| 215 218 | 
             
                  segments:
         | 
| 216 219 | 
             
                  - 0
         | 
| 217 | 
            -
                  hash: - | 
| 220 | 
            +
                  hash: -1649300180131473211
         | 
| 218 221 | 
             
            requirements: []
         | 
| 219 222 | 
             
            rubyforge_project: 
         | 
| 220 223 | 
             
            rubygems_version: 1.8.24
         | 
| @@ -223,8 +226,10 @@ specification_version: 3 | |
| 223 226 | 
             
            summary: Contains various classes and utilities I find I regularly need.
         | 
| 224 227 | 
             
            test_files:
         | 
| 225 228 | 
             
            - spec/spec_helper.rb
         | 
| 229 | 
            +
            - spec/support/test-config.rb
         | 
| 226 230 | 
             
            - spec/support/test-template.txt.erb
         | 
| 227 231 | 
             
            - spec/ztk/command_spec.rb
         | 
| 232 | 
            +
            - spec/ztk/config_spec.rb
         | 
| 228 233 | 
             
            - spec/ztk/logger_spec.rb
         | 
| 229 234 | 
             
            - spec/ztk/parallel_spec.rb
         | 
| 230 235 | 
             
            - spec/ztk/ssh_spec.rb
         |