rutty 2.3.2 → 2.4.0
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/Gemfile +8 -3
- data/Gemfile.lock +22 -11
- data/README.md +62 -5
- data/Rakefile +33 -27
- data/VERSION +1 -1
- data/bin/rutty +8 -8
- data/lib/rutty/actions.rb +171 -98
- data/lib/rutty/helpers.rb +33 -3
- data/lib/rutty/node.rb +13 -1
- data/lib/rutty/thread_pool/pool.rb +80 -0
- data/lib/rutty/thread_pool/worker.rb +103 -0
- data/lib/rutty/version.rb +2 -2
- data/rutty.gemspec +105 -54
- data/test/helper.rb +20 -4
- data/test/test_action_add_node.rb +2 -5
- data/test/test_action_dsh.rb +20 -19
- data/test/test_action_init.rb +4 -8
- data/test/test_action_list_nodes.rb +1 -4
- data/test/test_action_scp.rb +50 -0
- data/test/test_node.rb +13 -0
- data/test/test_nodes.rb +10 -1
- metadata +303 -50
- data/.gitignore +0 -24
    
        data/test/helper.rb
    CHANGED
    
    | @@ -7,7 +7,22 @@ $LOAD_PATH.unshift(File.dirname(__FILE__)) | |
| 7 7 | 
             
            require 'rutty'
         | 
| 8 8 |  | 
| 9 9 | 
             
            class Test::Unit::TestCase
         | 
| 10 | 
            -
               | 
| 10 | 
            +
              # Terminal escape sequences for colors
         | 
| 11 | 
            +
              module Colors
         | 
| 12 | 
            +
                CLEAR   = '\\e\[0m'
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                RED     = '\\e\[31m'
         | 
| 15 | 
            +
                YELLOW  = '\\e\[33m'
         | 
| 16 | 
            +
                GREEN   = '\\e\[32m'
         | 
| 17 | 
            +
                CYAN    = '\\e\[36m'
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                RED_BG  = '\\e\[41m'
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                BOLD    = '\\e\[1m'
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              TMP_DIR = File.join(File.dirname(__FILE__), '..', 'tmp')
         | 
| 25 | 
            +
              TEST_CONF_DIR = File.join(TMP_DIR, 'config')
         | 
| 11 26 | 
             
              TEST_GENERAL_CONF = File.join(TEST_CONF_DIR, 'defaults.yaml')
         | 
| 12 27 | 
             
              TEST_NODES_CONF = File.join(TEST_CONF_DIR, 'nodes.yaml')
         | 
| 13 28 |  | 
| @@ -20,16 +35,16 @@ class Test::Unit::TestCase | |
| 20 35 | 
             
              end
         | 
| 21 36 |  | 
| 22 37 | 
             
              def clean_test_config!
         | 
| 23 | 
            -
                %x(rm -rf #{ | 
| 38 | 
            +
                %x(rm -rf #{TMP_DIR}) if File.exists? TMP_DIR
         | 
| 24 39 | 
             
              end
         | 
| 25 40 |  | 
| 26 41 | 
             
              def seed_nodes
         | 
| 27 | 
            -
                out = %x(#{RUTTY_BIN} add_node localhost -c #{TEST_CONF_DIR} -k ~/.ssh/id_rsa -u #{ENV['USER']}  | 
| 42 | 
            +
                out = %x(#{RUTTY_BIN} add_node localhost -c #{TEST_CONF_DIR} -k ~/.ssh/id_rsa -u #{ENV['USER']} -g localhost,test -p 22)
         | 
| 28 43 | 
             
                assert_match /Added localhost/, out
         | 
| 29 44 | 
             
              end
         | 
| 30 45 |  | 
| 31 46 | 
             
              def seed_bad_node
         | 
| 32 | 
            -
                out = %x(#{RUTTY_BIN} add_node example.com -c #{TEST_CONF_DIR}  | 
| 47 | 
            +
                out = %x(#{RUTTY_BIN} add_node example.com -c #{TEST_CONF_DIR} -g example,test,broken)
         | 
| 33 48 | 
             
                assert_match /Added example\.com/, out
         | 
| 34 49 | 
             
              end
         | 
| 35 50 |  | 
| @@ -45,6 +60,7 @@ class Test::Unit::TestCase | |
| 45 60 | 
             
              end
         | 
| 46 61 | 
             
            end
         | 
| 47 62 |  | 
| 63 | 
            +
            # Used to make private methods in a class public temporarily.
         | 
| 48 64 | 
             
            class Class
         | 
| 49 65 | 
             
              def publicize_methods
         | 
| 50 66 | 
             
                saved_private_instance_methods = self.private_instance_methods
         | 
| @@ -8,12 +8,9 @@ class TestActionAddNode < Test::Unit::TestCase | |
| 8 8 | 
             
                should "properly create a new node entry when called" do
         | 
| 9 9 | 
             
                  require 'yaml'
         | 
| 10 10 |  | 
| 11 | 
            -
                  output = %x(#{RUTTY_BIN} add_node -c #{TEST_CONF_DIR} example.com -k /home/user/.ssh/id_rsa -u root -p 22333  | 
| 11 | 
            +
                  output = %x(#{RUTTY_BIN} add_node -c #{TEST_CONF_DIR} example.com -k /home/user/.ssh/id_rsa -u root -p 22333 -g example,testing)
         | 
| 12 12 |  | 
| 13 | 
            -
                   | 
| 14 | 
            -
                  clear = '\\e\[0m'
         | 
| 15 | 
            -
                  
         | 
| 16 | 
            -
                  assert_match /#{green}Added example\.com#{clear}/, output
         | 
| 13 | 
            +
                  assert_match /#{Colors::GREEN}Added example\.com#{Colors::CLEAR}/, output
         | 
| 17 14 |  | 
| 18 15 | 
             
                  nodes = YAML.load(File.open(TEST_NODES_CONF).read)
         | 
| 19 16 |  | 
    
        data/test/test_action_dsh.rb
    CHANGED
    
    | @@ -8,10 +8,7 @@ class TestActionDSH < Test::Unit::TestCase | |
| 8 8 | 
             
                should "report no defined nodes when no nodes defined" do
         | 
| 9 9 | 
             
                  output = %x(#{RUTTY_BIN} -c #{TEST_CONF_DIR} -a uptime)
         | 
| 10 10 |  | 
| 11 | 
            -
                   | 
| 12 | 
            -
                  clear = '\\e\[0m'
         | 
| 13 | 
            -
                  
         | 
| 14 | 
            -
                  assert_match /^#{yellow}No nodes defined#{clear}$/, output.rstrip
         | 
| 11 | 
            +
                  assert_match /^#{Colors::YELLOW}No nodes defined#{Colors::CLEAR}$/, output.rstrip
         | 
| 15 12 | 
             
                end
         | 
| 16 13 |  | 
| 17 14 | 
             
                should "display a critical error state when unable to connect" do
         | 
| @@ -19,35 +16,39 @@ class TestActionDSH < Test::Unit::TestCase | |
| 19 16 |  | 
| 20 17 | 
             
                  output = %x(#{RUTTY_BIN} -c #{TEST_CONF_DIR} -a uptime)
         | 
| 21 18 |  | 
| 22 | 
            -
                   | 
| 23 | 
            -
                  yellow = '\\e\[33m'
         | 
| 24 | 
            -
                  red = '\\e\[31m'
         | 
| 25 | 
            -
                  clear = '\\e\[0m'
         | 
| 26 | 
            -
                  
         | 
| 27 | 
            -
                  assert_match /^#{yellow}#{red_bg}example\.com#{clear}\s+#{red}ERROR: Connection timeout#{clear}$/, output.rstrip
         | 
| 19 | 
            +
                  assert_match /^#{Colors::YELLOW}#{Colors::RED_BG}example\.com#{Colors::CLEAR}\s+#{Colors::RED}ERROR: Connection timeout#{Colors::CLEAR}$/, output.rstrip
         | 
| 28 20 | 
             
                end
         | 
| 29 21 |  | 
| 30 | 
            -
                should "display a general error state when an  | 
| 22 | 
            +
                should "display a general error state when an exit code > 0 is returned" do
         | 
| 31 23 | 
             
                  seed_nodes
         | 
| 32 24 |  | 
| 33 25 | 
             
                  output = %x(#{RUTTY_BIN} -c #{TEST_CONF_DIR} -a foobar)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  assert_match /^#{Colors::BOLD}#{Colors::RED}localhost#{Colors::CLEAR}\s+.*command not found.*$/, output.rstrip
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
                
         | 
| 30 | 
            +
                should "display the proper output on success" do
         | 
| 31 | 
            +
                  seed_nodes
         | 
| 34 32 |  | 
| 35 | 
            -
                   | 
| 36 | 
            -
                  red = '\\e\[31m'
         | 
| 37 | 
            -
                  clear = '\\e\[0m'
         | 
| 33 | 
            +
                  output = %x(#{RUTTY_BIN} -c #{TEST_CONF_DIR} -a whoami)
         | 
| 38 34 |  | 
| 39 | 
            -
                  assert_match /^#{ | 
| 35 | 
            +
                  assert_match /^#{Colors::GREEN}localhost#{Colors::CLEAR}\s+#{ENV['USER']}$/, output.rstrip
         | 
| 40 36 | 
             
                end
         | 
| 41 37 |  | 
| 42 | 
            -
                should "display  | 
| 38 | 
            +
                should "display successful statistics output" do
         | 
| 43 39 | 
             
                  seed_nodes
         | 
| 44 40 |  | 
| 45 41 | 
             
                  output = %x(#{RUTTY_BIN} -c #{TEST_CONF_DIR} -a whoami)
         | 
| 46 42 |  | 
| 47 | 
            -
                   | 
| 48 | 
            -
             | 
| 43 | 
            +
                  assert_match /\n+#{Colors::GREEN}1 host\(s\), 0 error\(s\), \d+(?:\.\d+)? seconds?#{Colors::CLEAR}/, output
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
                
         | 
| 46 | 
            +
                should "display error-state statistics output" do
         | 
| 47 | 
            +
                  seed_bad_node
         | 
| 48 | 
            +
                  
         | 
| 49 | 
            +
                  output = %x(#{RUTTY_BIN} -c #{TEST_CONF_DIR} -a whoami)
         | 
| 49 50 |  | 
| 50 | 
            -
                  assert_match  | 
| 51 | 
            +
                  assert_match /\n+#{Colors::RED}1 host\(s\), 1 error\(s\), \d+(?:\.\d+)? seconds?#{Colors::CLEAR}/, output
         | 
| 51 52 | 
             
                end
         | 
| 52 53 | 
             
              end
         | 
| 53 54 | 
             
            end
         | 
    
        data/test/test_action_init.rb
    CHANGED
    
    | @@ -17,10 +17,8 @@ class TestActionInit < Test::Unit::TestCase | |
| 17 17 | 
             
                  ensure_fresh_config!
         | 
| 18 18 |  | 
| 19 19 | 
             
                  out = %x(#{RUTTY_BIN} init #{TEST_CONF_DIR})
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                   | 
| 22 | 
            -
                  clear = '\\e\[0m'
         | 
| 23 | 
            -
                  exists = "#{cyan}exists#{clear}"
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  exists = "#{Colors::CYAN}exists#{Colors::CLEAR}"
         | 
| 24 22 |  | 
| 25 23 | 
             
                  assert_match /^\s+#{exists}\s+#{TEST_CONF_DIR}$/o, out
         | 
| 26 24 | 
             
                  assert_match /^\s+#{exists}\s+#{TEST_GENERAL_CONF}$/o, out
         | 
| @@ -29,10 +27,8 @@ class TestActionInit < Test::Unit::TestCase | |
| 29 27 |  | 
| 30 28 | 
             
                should "report that it has created the file structure if it doesn't exist" do
         | 
| 31 29 | 
             
                  out = %x(#{RUTTY_BIN} init #{TEST_CONF_DIR})
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                   | 
| 34 | 
            -
                  clear = '\\e\[0m'
         | 
| 35 | 
            -
                  create = "#{green}create#{clear}"
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  create = "#{Colors::GREEN}create#{Colors::CLEAR}"
         | 
| 36 32 |  | 
| 37 33 | 
             
                  assert_match /^\s+#{create}\s+#{TEST_CONF_DIR}$/o, out
         | 
| 38 34 | 
             
                  assert_match /^\s+#{create}\s+#{TEST_GENERAL_CONF}$/o, out
         | 
| @@ -8,10 +8,7 @@ class TestActionListNodes < Test::Unit::TestCase | |
| 8 8 | 
             
                should "report no defined nodes when no nodes are defined" do
         | 
| 9 9 | 
             
                  output = %x(#{RUTTY_BIN} list_nodes -c #{TEST_CONF_DIR} 2>&1)
         | 
| 10 10 |  | 
| 11 | 
            -
                   | 
| 12 | 
            -
                  clear = '\\e\[0m'
         | 
| 13 | 
            -
                  
         | 
| 14 | 
            -
                  assert_match /#{yellow}No nodes defined#{clear}/, output
         | 
| 11 | 
            +
                  assert_match /#{Colors::YELLOW}No nodes defined#{Colors::CLEAR}/, output
         | 
| 15 12 | 
             
                end
         | 
| 16 13 |  | 
| 17 14 | 
             
                should "properly list defined nodes in ASCII table format" do
         | 
| @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            require 'helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class TestActionSCP < Test::Unit::TestCase
         | 
| 4 | 
            +
              context "The 'rutty scp' action" do
         | 
| 5 | 
            +
                setup { ensure_fresh_config! }
         | 
| 6 | 
            +
                teardown { clean_test_config! }
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                should "correctly upload a file to a node" do
         | 
| 9 | 
            +
                  seed_nodes
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  @test_file_src = File.join(File.expand_path(TMP_DIR), 'TEST')
         | 
| 12 | 
            +
                  @test_file_dest = @test_file_src.dup << "2"
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  File.open(@test_file_src, 'w') { |f| f.write "Hello, this is a test." }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  @out = %x(#{RUTTY_BIN} scp -c #{TEST_CONF_DIR} -a #{@test_file_src} #{@test_file_dest} 2>&1)
         | 
| 17 | 
            +
                  
         | 
| 18 | 
            +
                  assert_file_exists "#{@test_file_dest}"
         | 
| 19 | 
            +
                  assert_equal "Hello, this is a test.", File.read("#{@test_file_dest}")
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                should "display the correct output on success" do
         | 
| 23 | 
            +
                  seed_nodes
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  @test_file_src = File.join(File.expand_path(TMP_DIR), 'TEST')
         | 
| 26 | 
            +
                  @test_file_dest = @test_file_src.dup << "2"
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  File.open(@test_file_src, 'w') { |f| f.write "Hello, this is a test." }
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  @out = %x(#{RUTTY_BIN} scp -c #{TEST_CONF_DIR} -a #{@test_file_src} #{@test_file_dest} 2>&1)
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  assert_match /^#{Colors::GREEN}localhost#{Colors::CLEAR}\n+/, @out
         | 
| 33 | 
            +
                  assert_match /\n+#{Colors::GREEN}1 host\(s\), 0 error\(s\), \d+(?:\.\d+)? seconds?#{Colors::CLEAR}/, @out
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                should "display the correct output on error" do
         | 
| 37 | 
            +
                  seed_bad_node
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                  @test_file_src = File.join(File.expand_path(TMP_DIR), 'TEST')
         | 
| 40 | 
            +
                  @test_file_dest = @test_file_src.dup << "2"
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  File.open(@test_file_src, 'w') { |f| f.write "Hello, this is a test." }
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  @out = %x(#{RUTTY_BIN} scp -c #{TEST_CONF_DIR} -a #{@test_file_src} #{@test_file_dest} 2>&1)
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                  assert_match /^#{Colors::YELLOW}#{Colors::RED_BG}example\.com#{Colors::CLEAR}\s+#{Colors::RED}ERROR: Connection timeout#{Colors::CLEAR}\n+/, @out
         | 
| 47 | 
            +
                  assert_match /\n+#{Colors::RED}1 host\(s\), 1 error\(s\), \d+(?:\.\d+)? seconds?#{Colors::CLEAR}/, @out
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
            end
         | 
    
        data/test/test_node.rb
    CHANGED
    
    | @@ -1,6 +1,18 @@ | |
| 1 1 | 
             
            require 'helper'
         | 
| 2 2 |  | 
| 3 3 | 
             
            class TestNode < Test::Unit::TestCase
         | 
| 4 | 
            +
              context "The Rutty::Node class" do
         | 
| 5 | 
            +
                should "respond to its methods" do
         | 
| 6 | 
            +
                  assert_respond_to Rutty::Node, :load_config
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                should "raise an exception on #load_config calls" do
         | 
| 10 | 
            +
                  assert_raises RuntimeError do
         | 
| 11 | 
            +
                    Rutty::Node.load_config 'foo'
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 4 16 | 
             
              context "A Rutty::Node instance" do
         | 
| 5 17 | 
             
                setup do 
         | 
| 6 18 | 
             
                  hash = { :foo => "blah", :test => "hello" }
         | 
| @@ -12,6 +24,7 @@ class TestNode < Test::Unit::TestCase | |
| 12 24 | 
             
                  node = Rutty::Node.new Hash.new, @defaults
         | 
| 13 25 |  | 
| 14 26 | 
             
                  assert_respond_to node, :has_tag?
         | 
| 27 | 
            +
                  assert_respond_to node, :==
         | 
| 15 28 | 
             
                  assert_respond_to node, :<=>
         | 
| 16 29 | 
             
                end
         | 
| 17 30 |  | 
    
        data/test/test_nodes.rb
    CHANGED
    
    | @@ -65,7 +65,6 @@ class TestNodes < Test::Unit::TestCase | |
| 65 65 |  | 
| 66 66 | 
             
                should "generate the correct Proc string to eval" do
         | 
| 67 67 | 
             
                  Rutty::Nodes.publicize_methods do
         | 
| 68 | 
            -
                     # New sql-like tag query. Need the parser for this.
         | 
| 69 68 | 
             
                      require 'treetop'
         | 
| 70 69 | 
             
                      require 'rutty/treetop/syntax_nodes'
         | 
| 71 70 | 
             
                      require 'rutty/treetop/tag_query'
         | 
| @@ -84,6 +83,16 @@ class TestNodes < Test::Unit::TestCase | |
| 84 83 | 
             
                  end
         | 
| 85 84 | 
             
                end
         | 
| 86 85 |  | 
| 86 | 
            +
                should "raise an exception on malformed tag query strings" do
         | 
| 87 | 
            +
                  Rutty::Nodes.publicize_methods do
         | 
| 88 | 
            +
                    ["'foo' ARND 'bar'", "'fail", "'failure' AND )'foo'"].each do |str|
         | 
| 89 | 
            +
                      assert_raises Rutty::InvalidTagQueryString do
         | 
| 90 | 
            +
                        @nodes.get_tag_query_filter str
         | 
| 91 | 
            +
                      end
         | 
| 92 | 
            +
                    end
         | 
| 93 | 
            +
                  end
         | 
| 94 | 
            +
                end
         | 
| 95 | 
            +
                
         | 
| 87 96 | 
             
                should "filter out nodes matching provided criteria" do
         | 
| 88 97 | 
             
                  assert_equal [@node1, @node2], @nodes.filter(OpenStruct.new :port => 22)
         | 
| 89 98 | 
             
                  assert_equal [@node2], @nodes.filter(OpenStruct.new :user => 'google')
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: rutty
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 31
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 2
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 2. | 
| 8 | 
            +
              - 4
         | 
| 9 | 
            +
              - 0
         | 
| 10 | 
            +
              version: 2.4.0
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Josh Lindsey
         | 
| @@ -15,16 +15,158 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2010-11- | 
| 18 | 
            +
            date: 2010-11-24 00:00:00 -05:00
         | 
| 19 19 | 
             
            default_executable: rutty
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 22 | 
            -
              name: bundler
         | 
| 23 | 
            -
              prerelease: false
         | 
| 24 22 | 
             
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 25 23 | 
             
                none: false
         | 
| 26 24 | 
             
                requirements: 
         | 
| 27 | 
            -
                - -  | 
| 25 | 
            +
                - - ~>
         | 
| 26 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 27 | 
            +
                    hash: 57
         | 
| 28 | 
            +
                    segments: 
         | 
| 29 | 
            +
                    - 4
         | 
| 30 | 
            +
                    - 0
         | 
| 31 | 
            +
                    - 3
         | 
| 32 | 
            +
                    version: 4.0.3
         | 
| 33 | 
            +
              type: :runtime
         | 
| 34 | 
            +
              name: commander
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: *id001
         | 
| 37 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 38 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 39 | 
            +
                none: false
         | 
| 40 | 
            +
                requirements: 
         | 
| 41 | 
            +
                - - ~>
         | 
| 42 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 43 | 
            +
                    hash: 3
         | 
| 44 | 
            +
                    segments: 
         | 
| 45 | 
            +
                    - 1
         | 
| 46 | 
            +
                    - 4
         | 
| 47 | 
            +
                    - 2
         | 
| 48 | 
            +
                    version: 1.4.2
         | 
| 49 | 
            +
              type: :runtime
         | 
| 50 | 
            +
              name: terminal-table
         | 
| 51 | 
            +
              prerelease: false
         | 
| 52 | 
            +
              version_requirements: *id002
         | 
| 53 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 54 | 
            +
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 55 | 
            +
                none: false
         | 
| 56 | 
            +
                requirements: 
         | 
| 57 | 
            +
                - - ~>
         | 
| 58 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 59 | 
            +
                    hash: 11
         | 
| 60 | 
            +
                    segments: 
         | 
| 61 | 
            +
                    - 1
         | 
| 62 | 
            +
                    - 4
         | 
| 63 | 
            +
                    - 6
         | 
| 64 | 
            +
                    version: 1.4.6
         | 
| 65 | 
            +
              type: :runtime
         | 
| 66 | 
            +
              name: json
         | 
| 67 | 
            +
              prerelease: false
         | 
| 68 | 
            +
              version_requirements: *id003
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 70 | 
            +
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 71 | 
            +
                none: false
         | 
| 72 | 
            +
                requirements: 
         | 
| 73 | 
            +
                - - ~>
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 75 | 
            +
                    hash: 33
         | 
| 76 | 
            +
                    segments: 
         | 
| 77 | 
            +
                    - 2
         | 
| 78 | 
            +
                    - 0
         | 
| 79 | 
            +
                    - 23
         | 
| 80 | 
            +
                    version: 2.0.23
         | 
| 81 | 
            +
              type: :runtime
         | 
| 82 | 
            +
              name: net-ssh
         | 
| 83 | 
            +
              prerelease: false
         | 
| 84 | 
            +
              version_requirements: *id004
         | 
| 85 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 86 | 
            +
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 87 | 
            +
                none: false
         | 
| 88 | 
            +
                requirements: 
         | 
| 89 | 
            +
                - - ~>
         | 
| 90 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 91 | 
            +
                    hash: 31
         | 
| 92 | 
            +
                    segments: 
         | 
| 93 | 
            +
                    - 1
         | 
| 94 | 
            +
                    - 0
         | 
| 95 | 
            +
                    - 4
         | 
| 96 | 
            +
                    version: 1.0.4
         | 
| 97 | 
            +
              type: :runtime
         | 
| 98 | 
            +
              name: net-scp
         | 
| 99 | 
            +
              prerelease: false
         | 
| 100 | 
            +
              version_requirements: *id005
         | 
| 101 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 102 | 
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         | 
| 103 | 
            +
                none: false
         | 
| 104 | 
            +
                requirements: 
         | 
| 105 | 
            +
                - - ~>
         | 
| 106 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 107 | 
            +
                    hash: 15
         | 
| 108 | 
            +
                    segments: 
         | 
| 109 | 
            +
                    - 2
         | 
| 110 | 
            +
                    - 1
         | 
| 111 | 
            +
                    - 2
         | 
| 112 | 
            +
                    version: 2.1.2
         | 
| 113 | 
            +
              type: :runtime
         | 
| 114 | 
            +
              name: builder
         | 
| 115 | 
            +
              prerelease: false
         | 
| 116 | 
            +
              version_requirements: *id006
         | 
| 117 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 118 | 
            +
              requirement: &id007 !ruby/object:Gem::Requirement 
         | 
| 119 | 
            +
                none: false
         | 
| 120 | 
            +
                requirements: 
         | 
| 121 | 
            +
                - - ~>
         | 
| 122 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 123 | 
            +
                    hash: 23
         | 
| 124 | 
            +
                    segments: 
         | 
| 125 | 
            +
                    - 1
         | 
| 126 | 
            +
                    - 4
         | 
| 127 | 
            +
                    - 8
         | 
| 128 | 
            +
                    version: 1.4.8
         | 
| 129 | 
            +
              type: :runtime
         | 
| 130 | 
            +
              name: treetop
         | 
| 131 | 
            +
              prerelease: false
         | 
| 132 | 
            +
              version_requirements: *id007
         | 
| 133 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 134 | 
            +
              requirement: &id008 !ruby/object:Gem::Requirement 
         | 
| 135 | 
            +
                none: false
         | 
| 136 | 
            +
                requirements: 
         | 
| 137 | 
            +
                - - ~>
         | 
| 138 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 139 | 
            +
                    hash: 25
         | 
| 140 | 
            +
                    segments: 
         | 
| 141 | 
            +
                    - 1
         | 
| 142 | 
            +
                    - 0
         | 
| 143 | 
            +
                    - 7
         | 
| 144 | 
            +
                    version: 1.0.7
         | 
| 145 | 
            +
              type: :runtime
         | 
| 146 | 
            +
              name: fastthread
         | 
| 147 | 
            +
              prerelease: false
         | 
| 148 | 
            +
              version_requirements: *id008
         | 
| 149 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 150 | 
            +
              requirement: &id009 !ruby/object:Gem::Requirement 
         | 
| 151 | 
            +
                none: false
         | 
| 152 | 
            +
                requirements: 
         | 
| 153 | 
            +
                - - ~>
         | 
| 154 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 155 | 
            +
                    hash: 1
         | 
| 156 | 
            +
                    segments: 
         | 
| 157 | 
            +
                    - 1
         | 
| 158 | 
            +
                    - 5
         | 
| 159 | 
            +
                    - 1
         | 
| 160 | 
            +
                    version: 1.5.1
         | 
| 161 | 
            +
              type: :development
         | 
| 162 | 
            +
              name: jeweler
         | 
| 163 | 
            +
              prerelease: false
         | 
| 164 | 
            +
              version_requirements: *id009
         | 
| 165 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 166 | 
            +
              requirement: &id010 !ruby/object:Gem::Requirement 
         | 
| 167 | 
            +
                none: false
         | 
| 168 | 
            +
                requirements: 
         | 
| 169 | 
            +
                - - ~>
         | 
| 28 170 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 29 171 | 
             
                    hash: 23
         | 
| 30 172 | 
             
                    segments: 
         | 
| @@ -33,27 +175,55 @@ dependencies: | |
| 33 175 | 
             
                    - 0
         | 
| 34 176 | 
             
                    version: 1.0.0
         | 
| 35 177 | 
             
              type: :development
         | 
| 36 | 
            -
               | 
| 178 | 
            +
              name: bundler
         | 
| 179 | 
            +
              prerelease: false
         | 
| 180 | 
            +
              version_requirements: *id010
         | 
| 37 181 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 38 | 
            -
               | 
| 182 | 
            +
              requirement: &id011 !ruby/object:Gem::Requirement 
         | 
| 183 | 
            +
                none: false
         | 
| 184 | 
            +
                requirements: 
         | 
| 185 | 
            +
                - - ">="
         | 
| 186 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 187 | 
            +
                    hash: 3
         | 
| 188 | 
            +
                    segments: 
         | 
| 189 | 
            +
                    - 0
         | 
| 190 | 
            +
                    version: "0"
         | 
| 191 | 
            +
              type: :development
         | 
| 192 | 
            +
              name: shoulda
         | 
| 39 193 | 
             
              prerelease: false
         | 
| 40 | 
            -
               | 
| 194 | 
            +
              version_requirements: *id011
         | 
| 195 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 196 | 
            +
              requirement: &id012 !ruby/object:Gem::Requirement 
         | 
| 41 197 | 
             
                none: false
         | 
| 42 198 | 
             
                requirements: 
         | 
| 43 199 | 
             
                - - ">="
         | 
| 44 200 | 
             
                  - !ruby/object:Gem::Version 
         | 
| 45 | 
            -
                    hash:  | 
| 201 | 
            +
                    hash: 3
         | 
| 46 202 | 
             
                    segments: 
         | 
| 47 | 
            -
                    - 1
         | 
| 48 | 
            -
                    - 4
         | 
| 49 203 | 
             
                    - 0
         | 
| 50 | 
            -
                    version:  | 
| 204 | 
            +
                    version: "0"
         | 
| 51 205 | 
             
              type: :development
         | 
| 52 | 
            -
               | 
| 206 | 
            +
              name: rcov
         | 
| 207 | 
            +
              prerelease: false
         | 
| 208 | 
            +
              version_requirements: *id012
         | 
| 53 209 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 54 | 
            -
               | 
| 210 | 
            +
              requirement: &id013 !ruby/object:Gem::Requirement 
         | 
| 211 | 
            +
                none: false
         | 
| 212 | 
            +
                requirements: 
         | 
| 213 | 
            +
                - - ~>
         | 
| 214 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 215 | 
            +
                    hash: 15
         | 
| 216 | 
            +
                    segments: 
         | 
| 217 | 
            +
                    - 1
         | 
| 218 | 
            +
                    - 0
         | 
| 219 | 
            +
                    - 12
         | 
| 220 | 
            +
                    version: 1.0.12
         | 
| 221 | 
            +
              type: :development
         | 
| 222 | 
            +
              name: xml-simple
         | 
| 55 223 | 
             
              prerelease: false
         | 
| 56 | 
            -
               | 
| 224 | 
            +
              version_requirements: *id013
         | 
| 225 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 226 | 
            +
              requirement: &id014 !ruby/object:Gem::Requirement 
         | 
| 57 227 | 
             
                none: false
         | 
| 58 228 | 
             
                requirements: 
         | 
| 59 229 | 
             
                - - ">="
         | 
| @@ -63,11 +233,57 @@ dependencies: | |
| 63 233 | 
             
                    - 0
         | 
| 64 234 | 
             
                    version: "0"
         | 
| 65 235 | 
             
              type: :development
         | 
| 66 | 
            -
               | 
| 236 | 
            +
              name: ruby-debug
         | 
| 237 | 
            +
              prerelease: false
         | 
| 238 | 
            +
              version_requirements: *id014
         | 
| 67 239 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 68 | 
            -
               | 
| 240 | 
            +
              requirement: &id015 !ruby/object:Gem::Requirement 
         | 
| 241 | 
            +
                none: false
         | 
| 242 | 
            +
                requirements: 
         | 
| 243 | 
            +
                - - ">="
         | 
| 244 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 245 | 
            +
                    hash: 23
         | 
| 246 | 
            +
                    segments: 
         | 
| 247 | 
            +
                    - 1
         | 
| 248 | 
            +
                    - 0
         | 
| 249 | 
            +
                    - 0
         | 
| 250 | 
            +
                    version: 1.0.0
         | 
| 251 | 
            +
              type: :development
         | 
| 252 | 
            +
              name: bundler
         | 
| 69 253 | 
             
              prerelease: false
         | 
| 70 | 
            -
               | 
| 254 | 
            +
              version_requirements: *id015
         | 
| 255 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 256 | 
            +
              requirement: &id016 !ruby/object:Gem::Requirement 
         | 
| 257 | 
            +
                none: false
         | 
| 258 | 
            +
                requirements: 
         | 
| 259 | 
            +
                - - ">="
         | 
| 260 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 261 | 
            +
                    hash: 1
         | 
| 262 | 
            +
                    segments: 
         | 
| 263 | 
            +
                    - 1
         | 
| 264 | 
            +
                    - 5
         | 
| 265 | 
            +
                    - 1
         | 
| 266 | 
            +
                    version: 1.5.1
         | 
| 267 | 
            +
              type: :development
         | 
| 268 | 
            +
              name: jeweler
         | 
| 269 | 
            +
              prerelease: false
         | 
| 270 | 
            +
              version_requirements: *id016
         | 
| 271 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 272 | 
            +
              requirement: &id017 !ruby/object:Gem::Requirement 
         | 
| 273 | 
            +
                none: false
         | 
| 274 | 
            +
                requirements: 
         | 
| 275 | 
            +
                - - ">="
         | 
| 276 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 277 | 
            +
                    hash: 3
         | 
| 278 | 
            +
                    segments: 
         | 
| 279 | 
            +
                    - 0
         | 
| 280 | 
            +
                    version: "0"
         | 
| 281 | 
            +
              type: :development
         | 
| 282 | 
            +
              name: thoughtbot-shoulda
         | 
| 283 | 
            +
              prerelease: false
         | 
| 284 | 
            +
              version_requirements: *id017
         | 
| 285 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 286 | 
            +
              requirement: &id018 !ruby/object:Gem::Requirement 
         | 
| 71 287 | 
             
                none: false
         | 
| 72 288 | 
             
                requirements: 
         | 
| 73 289 | 
             
                - - ">="
         | 
| @@ -79,11 +295,11 @@ dependencies: | |
| 79 295 | 
             
                    - 12
         | 
| 80 296 | 
             
                    version: 1.0.12
         | 
| 81 297 | 
             
              type: :development
         | 
| 82 | 
            -
               | 
| 83 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 84 | 
            -
              name: commander
         | 
| 298 | 
            +
              name: xml-simple
         | 
| 85 299 | 
             
              prerelease: false
         | 
| 86 | 
            -
               | 
| 300 | 
            +
              version_requirements: *id018
         | 
| 301 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 302 | 
            +
              requirement: &id019 !ruby/object:Gem::Requirement 
         | 
| 87 303 | 
             
                none: false
         | 
| 88 304 | 
             
                requirements: 
         | 
| 89 305 | 
             
                - - ">="
         | 
| @@ -95,11 +311,11 @@ dependencies: | |
| 95 311 | 
             
                    - 3
         | 
| 96 312 | 
             
                    version: 4.0.3
         | 
| 97 313 | 
             
              type: :runtime
         | 
| 98 | 
            -
               | 
| 99 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 100 | 
            -
              name: terminal-table
         | 
| 314 | 
            +
              name: commander
         | 
| 101 315 | 
             
              prerelease: false
         | 
| 102 | 
            -
               | 
| 316 | 
            +
              version_requirements: *id019
         | 
| 317 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 318 | 
            +
              requirement: &id020 !ruby/object:Gem::Requirement 
         | 
| 103 319 | 
             
                none: false
         | 
| 104 320 | 
             
                requirements: 
         | 
| 105 321 | 
             
                - - ">="
         | 
| @@ -111,11 +327,27 @@ dependencies: | |
| 111 327 | 
             
                    - 2
         | 
| 112 328 | 
             
                    version: 1.4.2
         | 
| 113 329 | 
             
              type: :runtime
         | 
| 114 | 
            -
               | 
| 330 | 
            +
              name: terminal-table
         | 
| 331 | 
            +
              prerelease: false
         | 
| 332 | 
            +
              version_requirements: *id020
         | 
| 115 333 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| 116 | 
            -
               | 
| 334 | 
            +
              requirement: &id021 !ruby/object:Gem::Requirement 
         | 
| 335 | 
            +
                none: false
         | 
| 336 | 
            +
                requirements: 
         | 
| 337 | 
            +
                - - ">="
         | 
| 338 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 339 | 
            +
                    hash: 11
         | 
| 340 | 
            +
                    segments: 
         | 
| 341 | 
            +
                    - 1
         | 
| 342 | 
            +
                    - 4
         | 
| 343 | 
            +
                    - 6
         | 
| 344 | 
            +
                    version: 1.4.6
         | 
| 345 | 
            +
              type: :runtime
         | 
| 346 | 
            +
              name: json
         | 
| 117 347 | 
             
              prerelease: false
         | 
| 118 | 
            -
               | 
| 348 | 
            +
              version_requirements: *id021
         | 
| 349 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 350 | 
            +
              requirement: &id022 !ruby/object:Gem::Requirement 
         | 
| 119 351 | 
             
                none: false
         | 
| 120 352 | 
             
                requirements: 
         | 
| 121 353 | 
             
                - - ">="
         | 
| @@ -127,11 +359,11 @@ dependencies: | |
| 127 359 | 
             
                    - 23
         | 
| 128 360 | 
             
                    version: 2.0.23
         | 
| 129 361 | 
             
              type: :runtime
         | 
| 130 | 
            -
               | 
| 131 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 132 | 
            -
              name: net-scp
         | 
| 362 | 
            +
              name: net-ssh
         | 
| 133 363 | 
             
              prerelease: false
         | 
| 134 | 
            -
               | 
| 364 | 
            +
              version_requirements: *id022
         | 
| 365 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 366 | 
            +
              requirement: &id023 !ruby/object:Gem::Requirement 
         | 
| 135 367 | 
             
                none: false
         | 
| 136 368 | 
             
                requirements: 
         | 
| 137 369 | 
             
                - - ">="
         | 
| @@ -143,11 +375,11 @@ dependencies: | |
| 143 375 | 
             
                    - 4
         | 
| 144 376 | 
             
                    version: 1.0.4
         | 
| 145 377 | 
             
              type: :runtime
         | 
| 146 | 
            -
               | 
| 147 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 148 | 
            -
              name: builder
         | 
| 378 | 
            +
              name: net-scp
         | 
| 149 379 | 
             
              prerelease: false
         | 
| 150 | 
            -
               | 
| 380 | 
            +
              version_requirements: *id023
         | 
| 381 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 382 | 
            +
              requirement: &id024 !ruby/object:Gem::Requirement 
         | 
| 151 383 | 
             
                none: false
         | 
| 152 384 | 
             
                requirements: 
         | 
| 153 385 | 
             
                - - ">="
         | 
| @@ -159,11 +391,11 @@ dependencies: | |
| 159 391 | 
             
                    - 2
         | 
| 160 392 | 
             
                    version: 2.1.2
         | 
| 161 393 | 
             
              type: :runtime
         | 
| 162 | 
            -
               | 
| 163 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 164 | 
            -
              name: treetop
         | 
| 394 | 
            +
              name: builder
         | 
| 165 395 | 
             
              prerelease: false
         | 
| 166 | 
            -
               | 
| 396 | 
            +
              version_requirements: *id024
         | 
| 397 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 398 | 
            +
              requirement: &id025 !ruby/object:Gem::Requirement 
         | 
| 167 399 | 
             
                none: false
         | 
| 168 400 | 
             
                requirements: 
         | 
| 169 401 | 
             
                - - ">="
         | 
| @@ -175,7 +407,25 @@ dependencies: | |
| 175 407 | 
             
                    - 8
         | 
| 176 408 | 
             
                    version: 1.4.8
         | 
| 177 409 | 
             
              type: :runtime
         | 
| 178 | 
            -
               | 
| 410 | 
            +
              name: treetop
         | 
| 411 | 
            +
              prerelease: false
         | 
| 412 | 
            +
              version_requirements: *id025
         | 
| 413 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 414 | 
            +
              requirement: &id026 !ruby/object:Gem::Requirement 
         | 
| 415 | 
            +
                none: false
         | 
| 416 | 
            +
                requirements: 
         | 
| 417 | 
            +
                - - ">="
         | 
| 418 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 419 | 
            +
                    hash: 25
         | 
| 420 | 
            +
                    segments: 
         | 
| 421 | 
            +
                    - 1
         | 
| 422 | 
            +
                    - 0
         | 
| 423 | 
            +
                    - 7
         | 
| 424 | 
            +
                    version: 1.0.7
         | 
| 425 | 
            +
              type: :runtime
         | 
| 426 | 
            +
              name: fastthread
         | 
| 427 | 
            +
              prerelease: false
         | 
| 428 | 
            +
              version_requirements: *id026
         | 
| 179 429 | 
             
            description: "\n      RuTTY is a DSH (distributed / dancer's shell) written in Ruby. It's used to run commands \n      on multiple remote servers at once, based on a tagging system. Also allows for multiple\n      SCP-style uploads.\n    "
         | 
| 180 430 | 
             
            email: josh@cloudspace.com
         | 
| 181 431 | 
             
            executables: 
         | 
| @@ -186,7 +436,6 @@ extra_rdoc_files: | |
| 186 436 | 
             
            - LICENSE
         | 
| 187 437 | 
             
            - README.md
         | 
| 188 438 | 
             
            files: 
         | 
| 189 | 
            -
            - .gitignore
         | 
| 190 439 | 
             
            - .yardopts
         | 
| 191 440 | 
             
            - Gemfile
         | 
| 192 441 | 
             
            - Gemfile.lock
         | 
| @@ -204,6 +453,8 @@ files: | |
| 204 453 | 
             
            - lib/rutty/node.rb
         | 
| 205 454 | 
             
            - lib/rutty/nodes.rb
         | 
| 206 455 | 
             
            - lib/rutty/proc_classes.rb
         | 
| 456 | 
            +
            - lib/rutty/thread_pool/pool.rb
         | 
| 457 | 
            +
            - lib/rutty/thread_pool/worker.rb
         | 
| 207 458 | 
             
            - lib/rutty/treetop/syntax_nodes.rb
         | 
| 208 459 | 
             
            - lib/rutty/treetop/tag_query.rb
         | 
| 209 460 | 
             
            - lib/rutty/treetop/tag_query.treetop
         | 
| @@ -214,6 +465,7 @@ files: | |
| 214 465 | 
             
            - test/test_action_dsh.rb
         | 
| 215 466 | 
             
            - test/test_action_init.rb
         | 
| 216 467 | 
             
            - test/test_action_list_nodes.rb
         | 
| 468 | 
            +
            - test/test_action_scp.rb
         | 
| 217 469 | 
             
            - test/test_actions.rb
         | 
| 218 470 | 
             
            - test/test_config.rb
         | 
| 219 471 | 
             
            - test/test_consts.rb
         | 
| @@ -223,11 +475,11 @@ files: | |
| 223 475 | 
             
            - test/test_runner.rb
         | 
| 224 476 | 
             
            has_rdoc: true
         | 
| 225 477 | 
             
            homepage: http://github.com/jlindsey/rutty
         | 
| 226 | 
            -
            licenses:  | 
| 227 | 
            -
             | 
| 478 | 
            +
            licenses: 
         | 
| 479 | 
            +
            - MIT
         | 
| 228 480 | 
             
            post_install_message: 
         | 
| 229 | 
            -
            rdoc_options: 
         | 
| 230 | 
            -
             | 
| 481 | 
            +
            rdoc_options: []
         | 
| 482 | 
            +
             | 
| 231 483 | 
             
            require_paths: 
         | 
| 232 484 | 
             
            - lib
         | 
| 233 485 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| @@ -261,6 +513,7 @@ test_files: | |
| 261 513 | 
             
            - test/test_action_dsh.rb
         | 
| 262 514 | 
             
            - test/test_action_init.rb
         | 
| 263 515 | 
             
            - test/test_action_list_nodes.rb
         | 
| 516 | 
            +
            - test/test_action_scp.rb
         | 
| 264 517 | 
             
            - test/test_actions.rb
         | 
| 265 518 | 
             
            - test/test_config.rb
         | 
| 266 519 | 
             
            - test/test_consts.rb
         |