sshkit 1.5.1 → 1.6.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8ca10e8e575b23bb6af6e722b5bf9b20f819d20
4
- data.tar.gz: 34661b9aaffdd53c25d0b846ab6a527033e1089a
3
+ metadata.gz: f6b3d2a602578d1cea808691cd6a94345862e87e
4
+ data.tar.gz: 1f7d65fb072bb2c9e6fd830d49bfa354cf756296
5
5
  SHA512:
6
- metadata.gz: 1ab42dc88a3cd6ab4fa9b66d6dad7ccf92c43922373e6f8dc713e5bca3a4c99e7f15c0f7c303595f92c1f00c8e6649ad6c661119c5e5b308ac497b3c7d97eb39
7
- data.tar.gz: 446e9c9150504729c40a88ab4e16d44c9ee941ed191a58ed7a1970f501307c43e509a7142fb5c7fd635355c9ba6585baef254c93e9f81f1f43632a06a144a9fc
6
+ metadata.gz: 4e0f22c3b4b0bf6e6af4bafc7d3d610c216fea810aebd29ab689819d3953da77f4aa3c5ea599453997f85b5f5bec5fae8fd629c370968a87580755bd23f6044b
7
+ data.tar.gz: c789d68ad2b9025a694dd41b58b55640d55443252729bdbbd7d8460419e5fbe9670fde840b437cf2416380a1e19c28613ddd92c1b55d5a27ae0f8fa1c47a5dc8
data/CHANGELOG.md CHANGED
@@ -8,6 +8,20 @@ appear at the top.
8
8
  * Add your entries here, remember to credit yourself however you want to be
9
9
  credited!
10
10
 
11
+ ## 1.6.0
12
+
13
+ * Fix colorize to use the correct API (@fazibear)
14
+ * Lock colorize (sorry guys) version at >= 0.7.0
15
+
16
+ ## 1.6.0 (Yanked, because of colorize.)
17
+
18
+ * Force dependency on colorize v0.6.0
19
+ * Add your entries here, remember to credit yourself however you want to be
20
+ credited!
21
+ * Remove strip from capture to preserve whitespace. Nick Townsend
22
+ * Add vmware_fusion Vagrant provider. Nick Townsend
23
+ * Add some padding to the pretty log formatter
24
+
11
25
  ## 1.5.1
12
26
 
13
27
  * Use `sudo -u` rather than `sudo su` to switch users. Mat Trudel
data/EXAMPLES.md CHANGED
@@ -103,7 +103,7 @@ etc, this will be improved as the library matures, but we're not there yet.
103
103
  end
104
104
 
105
105
  In this case the `recursive: true` option mirrors the same options which are
106
- available to `Net::{SCP,SFTP}`.
106
+ available to [`Net::{SCP,SFTP}`](http://net-ssh.github.io/net-scp/).
107
107
 
108
108
  ## Setting global SSH options
109
109
 
@@ -198,7 +198,7 @@ joined according to the expectations of the machine receiving the commands.
198
198
  execute!(:echo, '"Example Message!" 1>&2; false')
199
199
  end
200
200
 
201
- This will raise `SSHKit::Command:Failed` with the `#message` "Example Message!"
201
+ This will raise `SSHKit::Command::Failed` with the `#message` "Example Message!"
202
202
  which will cause the command to abort.
203
203
 
204
204
  ## Make a test, or run a command which may fail without raising an error:
data/README.md CHANGED
@@ -89,7 +89,7 @@ site_dir = '/opt/sites/example.com'
89
89
  # Let's simulate a backup task, assuming that some servers take longer
90
90
  # then others to complete
91
91
  on all_servers do |host|
92
- in site_dir do
92
+ within site_dir do
93
93
  execute :tar, '-czf', "backup-#{host.hostname}.tar.gz", 'current'
94
94
  # Will run: "/usr/bin/env tar -czf backup-one.example.com.tar.gz current"
95
95
  end
@@ -248,3 +248,11 @@ pooling behaviour entirely by setting the idle_timeout to zero:
248
248
  ```ruby
249
249
  SSHKit::Backend::Netssh.pool.idle_timeout = 0 # disabled
250
250
  ```
251
+
252
+ ## SSHKit Related Blog Posts
253
+
254
+ [SSHKit Gem Basics](http://www.rubyplus.com/articles/591)
255
+
256
+ [SSHKit Gem Part 2](http://www.rubyplus.com/articles/601)
257
+
258
+ [Embedded Capistrano with SSHKit](http://ryandoyle.net/posts/embedded-capistrano-with-sshkit/)
data/Rakefile CHANGED
@@ -3,6 +3,11 @@
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rake/testtask'
5
5
 
6
+ task :default => :test
7
+
8
+ desc "Run all tests"
9
+ task :test => ['test:units', 'test:functional']
10
+
6
11
  namespace :test do
7
12
 
8
13
  Rake::TestTask.new(:units) do |t|
@@ -15,17 +20,8 @@ namespace :test do
15
20
  t.test_files = FileList['test/functional/**/test*.rb']
16
21
  end
17
22
 
18
- task :test do
19
- Rake::Task['test:units'].execute
20
- Rake::Task['test:functional'].execute
21
- end
22
-
23
- task default: :test
24
-
25
23
  end
26
24
 
27
- task :default => 'test:default'
28
-
29
25
  Rake::Task["test:functional"].enhance do
30
26
  warn "Remember there are still some VMs running, kill them with `vagrant halt` if you are finished using them."
31
27
  end
data/Vagrantfile CHANGED
@@ -2,7 +2,12 @@ VAGRANTFILE_API_VERSION = "2"
2
2
 
3
3
  Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
4
4
  config.vm.box = 'precise64'
5
- config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
5
+ config.vm.provider "vmware_fusion" do |vmf|
6
+ vmf.box_url = "http://files.vagrantup.com/precise64_vmware.box"
7
+ end
8
+ config.vm.provider "virtualbox" do |vb|
9
+ config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
10
+ end
6
11
 
7
12
  json_config_path = File.join("test", "boxes.json")
8
13
  list = File.open(json_config_path).read
@@ -28,7 +28,7 @@ module SSHKit
28
28
 
29
29
  def capture(*args)
30
30
  options = { verbosity: Logger::DEBUG }.merge(args.extract_options!)
31
- _execute(*[*args, options]).full_stdout.strip
31
+ _execute(*[*args, options]).full_stdout
32
32
  end
33
33
 
34
34
  private
@@ -108,12 +108,17 @@ module SSHKit
108
108
  private
109
109
 
110
110
  def transfer_summarizer(action)
111
+ last_name = nil
112
+ last_percentage = nil
111
113
  proc do |ch, name, transferred, total|
112
114
  percentage = (transferred.to_f * 100 / total.to_f)
113
115
  unless percentage.nan?
114
116
  message = "#{action} #{name} #{percentage.round(2)}%"
115
- if percentage > 0 && percentage.round % 10 == 0
117
+ percentage_r = (percentage / 10).truncate * 10
118
+ if percentage_r > 0 && (last_name != name || last_percentage != percentage_r)
116
119
  info message
120
+ last_name = name
121
+ last_percentage = percentage_r
117
122
  else
118
123
  debug message
119
124
  end
data/lib/sshkit/color.rb CHANGED
@@ -1,13 +1,27 @@
1
1
  require 'colorize'
2
+
2
3
  module Color
3
- STYLES = [String::COLORS, String::MODES].flat_map(&:keys)
4
+ String.colors.each do |color|
5
+ instance_eval <<-RUBY, __FILE__, __LINE__
6
+ def #{color}(string = '')
7
+ string = yield if block_given?
8
+ colorize? ? string.colorize(:color => :#{color}) : string
9
+ end
10
+ RUBY
11
+ end
12
+
13
+ String.modes.each do |mode|
14
+ instance_eval <<-RUBY, __FILE__, __LINE__
15
+ def #{mode}(string = '')
16
+ string = yield if block_given?
17
+ colorize? ? string.colorize(:mode => :#{mode}) : string
18
+ end
19
+ RUBY
20
+ end
4
21
 
5
- STYLES.each do |style|
6
- instance_eval %{
7
- def #{style}(string='')
8
- string = yield if block_given?
9
- $stdout.tty? ? string.colorize(:#{style}) : string
22
+ class << self
23
+ def colorize?
24
+ ENV['SSHKIT_COLOR'] || $stdout.tty?
10
25
  end
11
- }
12
26
  end
13
27
  end
@@ -152,7 +152,11 @@ module SSHKit
152
152
 
153
153
  def environment_string
154
154
  environment_hash.collect do |key,value|
155
- "#{key.to_s.upcase}=#{value}"
155
+ if key.is_a? Symbol
156
+ "#{key.to_s.upcase}=#{value}"
157
+ else
158
+ "#{key.to_s}=#{value}"
159
+ end
156
160
  end.join(' ')
157
161
  end
158
162
 
@@ -39,7 +39,8 @@ module SSHKit
39
39
 
40
40
  def [](command)
41
41
  if prefix[command].any?
42
- prefixes = prefix[command].join(" ")
42
+ prefixes = prefix[command].map{ |prefix| prefix.respond_to?(:call) ? prefix.call : prefix }
43
+ prefixes = prefixes.join(" ")
43
44
 
44
45
  "#{prefixes} #{command}"
45
46
  else
@@ -19,35 +19,40 @@ module SSHKit
19
19
 
20
20
  def write_command(command)
21
21
  unless command.started?
22
- original_output << level(command.verbosity) + uuid(command) + "Running #{c.yellow(c.bold(String(command)))} on #{c.blue(command.host.to_s)}\n"
22
+ original_output << "%6s %s\n" % [level(command.verbosity),
23
+ uuid(command) + "Running #{c.yellow(c.bold(String(command)))} #{command.host.user ? "as #{c.blue(command.host.user)}@" : "on "}#{c.blue(command.host.to_s)}"]
23
24
  if SSHKit.config.output_verbosity == Logger::DEBUG
24
- original_output << level(Logger::DEBUG) + uuid(command) + "Command: #{c.blue(command.to_command)}" + "\n"
25
+ original_output << "%6s %s\n" % [level(Logger::DEBUG),
26
+ uuid(command) + "Command: #{c.blue(command.to_command)}"]
25
27
  end
26
28
  end
27
29
 
28
30
  if SSHKit.config.output_verbosity == Logger::DEBUG
29
31
  unless command.stdout.empty?
30
32
  command.stdout.lines.each do |line|
31
- original_output << level(Logger::DEBUG) + uuid(command) + c.green("\t" + line)
33
+ original_output << "%6s %s" % [level(Logger::DEBUG),
34
+ uuid(command) + c.green("\t" + line)]
32
35
  original_output << "\n" unless line[-1] == "\n"
33
36
  end
34
37
  end
35
38
 
36
39
  unless command.stderr.empty?
37
40
  command.stderr.lines.each do |line|
38
- original_output << level(Logger::DEBUG) + uuid(command) + c.red("\t" + line)
41
+ original_output << "%6s %s" % [level(Logger::DEBUG),
42
+ uuid(command) + c.red("\t" + line)]
39
43
  original_output << "\n" unless line[-1] == "\n"
40
44
  end
41
45
  end
42
46
  end
43
47
 
44
48
  if command.finished?
45
- original_output << level(command.verbosity) + uuid(command) + "Finished in #{sprintf('%5.3f seconds', command.runtime)} with exit status #{command.exit_status} (#{c.bold { command.failure? ? c.red('failed') : c.green('successful') }}).\n"
49
+ original_output << "%6s %s\n" % [level(command.verbosity),
50
+ uuid(command) + "Finished in #{sprintf('%5.3f seconds', command.runtime)} with exit status #{command.exit_status} (#{c.bold { command.failure? ? c.red('failed') : c.green('successful') }})."]
46
51
  end
47
52
  end
48
53
 
49
54
  def write_log_message(log_message)
50
- original_output << level(log_message.verbosity) + log_message.to_s + "\n"
55
+ original_output << "%6s %s\n" % [level(log_message.verbosity), log_message.to_s]
51
56
  end
52
57
 
53
58
  def c
@@ -20,7 +20,7 @@ module SSHKit
20
20
 
21
21
  def write_command(command)
22
22
  unless command.started?
23
- original_output << "Running #{String(command)} on #{command.host.to_s}\n"
23
+ original_output << "Running #{String(command)} #{command.host.user ? "as #{command.host.user}@" : "on "}#{command.host}\n"
24
24
  if SSHKit.config.output_verbosity == Logger::DEBUG
25
25
  original_output << "Command: #{command.to_command}" + "\n"
26
26
  end
@@ -13,7 +13,7 @@ module SSHKit
13
13
  backend(h, &block).run
14
14
  rescue Exception => e
15
15
  e2 = ExecuteError.new e
16
- raise e2, "Exception while executing on host #{host}: #{e.message}"
16
+ raise e2, "Exception while executing #{host.user ? "as #{host.user}@" : "on host "}#{host}: #{e.message}"
17
17
  end
18
18
  end
19
19
  end
@@ -5,17 +5,25 @@ module SSHKit
5
5
  class Sequential < Abstract
6
6
  attr_writer :wait_interval
7
7
  def execute
8
+ last_host = hosts.pop
9
+
8
10
  hosts.each do |host|
9
- begin
10
- backend(host, &block).run
11
- rescue Exception => e
12
- e2 = ExecuteError.new e
13
- raise e2, "Exception while executing on host #{host}: #{e.message}"
14
- end
11
+ run_backend(host, &block)
15
12
  sleep wait_interval
16
13
  end
14
+
15
+ unless last_host.nil?
16
+ run_backend(last_host, &block)
17
+ end
17
18
  end
18
19
  private
20
+ def run_backend(host, &block)
21
+ backend(host, &block).run
22
+ rescue Exception => e
23
+ e2 = ExecuteError.new e
24
+ raise e2, "Exception while executing #{host.user ? "as #{host.user}@" : "on host "}#{host}: #{e.message}"
25
+ end
26
+
19
27
  def wait_interval
20
28
  @wait_interval || options[:wait] || 2
21
29
  end
@@ -1,3 +1,3 @@
1
1
  module SSHKit
2
- VERSION = "1.5.1"
2
+ VERSION = "1.6.1"
3
3
  end
data/sshkit.gemspec CHANGED
@@ -17,9 +17,9 @@ Gem::Specification.new do |gem|
17
17
  gem.require_paths = ["lib"]
18
18
  gem.version = SSHKit::VERSION
19
19
 
20
- gem.add_runtime_dependency('net-ssh', '>= 2.8.0')
21
- gem.add_runtime_dependency('net-scp', '>= 1.1.2')
22
- gem.add_runtime_dependency('colorize')
20
+ gem.add_runtime_dependency('net-ssh', '>= 2.8.0')
21
+ gem.add_runtime_dependency('net-scp', '>= 1.1.2')
22
+ gem.add_runtime_dependency('colorize', '>= 0.7.0')
23
23
 
24
24
  gem.add_development_dependency('minitest', ['>= 2.11.3', '< 2.12.0'])
25
25
  gem.add_development_dependency('rake')
@@ -14,7 +14,7 @@ module SSHKit
14
14
  Local.new do
15
15
  captured_command_result = capture(:echo, 'foo')
16
16
  end.run
17
- assert_equal 'foo', captured_command_result
17
+ assert_equal "foo\n", captured_command_result
18
18
  end
19
19
 
20
20
  def test_execute_raises_on_non_zero_exit_status_and_captures_stdout_and_stderr
@@ -38,12 +38,15 @@ module SSHKit
38
38
  summarizer = netssh.send(:transfer_summarizer,'Transferring')
39
39
 
40
40
  [
41
- [1, 100, :debug, 'Transferring afile 1.0%'],
42
- [1, 3, :debug, 'Transferring afile 33.33%'],
43
- [0, 1, :debug, 'Transferring afile 0.0%'],
44
- [1, 2, :info, 'Transferring afile 50.0%'],
45
- [0, 0, :warn, 'percentage 0/0'],
46
- [1023, 343, :debug, 'Transferring'],
41
+ [1, 1000, :debug, 'Transferring afile 0.1%'],
42
+ [1, 100, :debug, 'Transferring afile 1.0%'],
43
+ [99, 1000, :debug, 'Transferring afile 9.9%'],
44
+ [15, 100, :info, 'Transferring afile 15.0%'],
45
+ [1, 3, :info, 'Transferring afile 33.33%'],
46
+ [0, 1, :debug, 'Transferring afile 0.0%'],
47
+ [1, 2, :info, 'Transferring afile 50.0%'],
48
+ [0, 0, :warn, 'percentage 0/0'],
49
+ [1023, 343, :info, 'Transferring'],
47
50
  ].each do |transferred,total,method,substring|
48
51
  netssh.expects(method).with { |msg| msg.include?(substring) }
49
52
  summarizer.call(nil,'afile',transferred,total)
@@ -24,27 +24,27 @@ module SSHKit
24
24
 
25
25
  def test_logging_fatal
26
26
  pretty << SSHKit::LogMessage.new(Logger::FATAL, "Test")
27
- assert_equal output.strip, "\e[0;31;49mFATAL\e[0mTest"
27
+ assert_equal output.strip, "\e[0;31;49mFATAL\e[0m Test"
28
28
  end
29
29
 
30
30
  def test_logging_error
31
31
  pretty << SSHKit::LogMessage.new(Logger::ERROR, "Test")
32
- assert_equal output.strip, "\e[0;31;49mERROR\e[0mTest"
32
+ assert_equal output.strip, "\e[0;31;49mERROR\e[0m Test"
33
33
  end
34
34
 
35
35
  def test_logging_warn
36
36
  pretty << SSHKit::LogMessage.new(Logger::WARN, "Test")
37
- assert_equal output.strip, "\e[0;33;49mWARN\e[0mTest".strip
37
+ assert_equal output.strip, "\e[0;33;49mWARN\e[0m Test".strip
38
38
  end
39
39
 
40
40
  def test_logging_info
41
41
  pretty << SSHKit::LogMessage.new(Logger::INFO, "Test")
42
- assert_equal output.strip, "\e[0;34;49mINFO\e[0mTest".strip
42
+ assert_equal output.strip, "\e[0;34;49mINFO\e[0m Test".strip
43
43
  end
44
44
 
45
45
  def test_logging_debug
46
46
  pretty << SSHKit::LogMessage.new(Logger::DEBUG, "Test")
47
- assert_equal output.strip, "\e[0;30;49mDEBUG\e[0mTest".strip
47
+ assert_equal output.strip, "\e[0;30;49mDEBUG\e[0m Test".strip
48
48
  end
49
49
 
50
50
  end
@@ -0,0 +1,16 @@
1
+ require 'helper'
2
+ require 'sshkit'
3
+
4
+ module SSHKit
5
+ class TestColor < UnitTest
6
+
7
+ def test_responds_to_colorize?
8
+ assert Color.respond_to?(:colorize?)
9
+ end
10
+
11
+ def test_not_fails_on_bold_mode
12
+ Color.stubs(:colorize?).returns true
13
+ assert_equal Color.bold("test"), 'test'.bold
14
+ end
15
+ end
16
+ end
@@ -41,6 +41,12 @@ module SSHKit
41
41
  assert_equal "( RAILS_ENV=production FOO=bar /usr/bin/env rails server )", c.to_command
42
42
  end
43
43
 
44
+ def test_including_the_env_with_string_keys
45
+ SSHKit.config = nil
46
+ c = Command.new(:rails, 'server', env: {'FACTER_env' => :production, foo: 'bar'})
47
+ assert_equal "( FACTER_env=production FOO=bar /usr/bin/env rails server )", c.to_command
48
+ end
49
+
44
50
  def test_including_the_env_doesnt_addressively_escape
45
51
  SSHKit.config = nil
46
52
  c = Command.new(:rails, 'server', env: {path: '/example:$PATH'})
@@ -28,6 +28,14 @@ module SSHKit
28
28
  assert_equal map[:rake], "/home/vagrant/.rbenv/bin/rbenv exec bundle exec rake"
29
29
  end
30
30
 
31
+ def test_prefix_procs
32
+ map = CommandMap.new
33
+ map.prefix[:rake].push("/home/vagrant/.rbenv/bin/rbenv exec")
34
+ map.prefix[:rake].push(proc{ "bundle exec" })
35
+
36
+ assert_equal map[:rake], "/home/vagrant/.rbenv/bin/rbenv exec bundle exec rake"
37
+ end
38
+
31
39
  def test_prefix_unshift
32
40
  map = CommandMap.new
33
41
  map.prefix[:rake].push("bundle exec")
@@ -5,6 +5,8 @@ module SSHKit
5
5
 
6
6
  class TestCoordinator < UnitTest
7
7
 
8
+ CloseEnough = 0.01; # 10 msec
9
+
8
10
  def setup
9
11
  super
10
12
  @s = String.new
@@ -17,7 +19,7 @@ module SSHKit
17
19
 
18
20
  def block_to_run
19
21
  lambda do |host|
20
- execute "echo #{Time.now}"
22
+ execute "echo #{Time.now.to_f}"
21
23
  end
22
24
  end
23
25
 
@@ -56,7 +58,7 @@ module SSHKit
56
58
  Coordinator.new(%w{1.example.com 2.example.com}).each &block_to_run
57
59
  end
58
60
  assert_equal 2, results.length
59
- assert_equal *results.map(&:to_i)
61
+ assert_in_delta *results, CloseEnough
60
62
  end
61
63
 
62
64
  def test_the_connection_manager_can_run_things_in_sequence
@@ -64,7 +66,7 @@ module SSHKit
64
66
  Coordinator.new(%w{1.example.com 2.example.com}).each in: :sequence, &block_to_run
65
67
  end
66
68
  assert_equal 2, results.length
67
- assert_operator results.first.to_i, :<, results.last.to_i
69
+ assert_operator (results.last - results.first), :>, 1.0
68
70
  end
69
71
 
70
72
  def test_the_connection_manager_can_run_things_in_sequence_with_wait
@@ -73,7 +75,7 @@ module SSHKit
73
75
  Coordinator.new(%w{1.example.com 2.example.com}).each in: :sequence, wait: 10, &block_to_run
74
76
  end
75
77
  stop = Time.now
76
- assert_operator (stop.to_i - start.to_i), :>=, 10
78
+ assert_operator (stop - start), :>=, 10.0
77
79
  end
78
80
 
79
81
  def test_the_connection_manager_can_run_things_in_groups
@@ -90,18 +92,18 @@ module SSHKit
90
92
  ).each in: :groups, &block_to_run
91
93
  end
92
94
  assert_equal 6, results.length
93
- assert_equal *results[0..1].map(&:to_i)
94
- assert_equal *results[2..3].map(&:to_i)
95
- assert_equal *results[4..5].map(&:to_i)
96
- assert_operator results[0].to_i, :<, results[2].to_i
97
- assert_operator results[3].to_i, :<, results[4].to_i
95
+ assert_in_delta *results[0..1], CloseEnough
96
+ assert_in_delta *results[2..3], CloseEnough
97
+ assert_in_delta *results[4..5], CloseEnough
98
+ assert_operator (results[2] - results[1]), :>, 1.0
99
+ assert_operator (results[4] - results[3]), :>, 1.0
98
100
  end
99
101
 
100
102
  private
101
103
 
102
104
  def results
103
105
  @s.lines.collect do |line|
104
- Time.parse(line.split[1..-1].join(' '))
106
+ line.split(' ').last.to_f
105
107
  end
106
108
  end
107
109
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sshkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Hambley
@@ -9,124 +9,124 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-05-31 00:00:00.000000000 Z
12
+ date: 2014-12-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: net-ssh
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '>='
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: 2.8.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '>='
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: 2.8.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: net-scp
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
- - - '>='
32
+ - - ">="
33
33
  - !ruby/object:Gem::Version
34
34
  version: 1.1.2
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
- - - '>='
39
+ - - ">="
40
40
  - !ruby/object:Gem::Version
41
41
  version: 1.1.2
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: colorize
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
- - - '>='
46
+ - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: 0.7.0
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '0'
55
+ version: 0.7.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: minitest
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - '>='
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  version: 2.11.3
63
- - - <
63
+ - - "<"
64
64
  - !ruby/object:Gem::Version
65
65
  version: 2.12.0
66
66
  type: :development
67
67
  prerelease: false
68
68
  version_requirements: !ruby/object:Gem::Requirement
69
69
  requirements:
70
- - - '>='
70
+ - - ">="
71
71
  - !ruby/object:Gem::Version
72
72
  version: 2.11.3
73
- - - <
73
+ - - "<"
74
74
  - !ruby/object:Gem::Version
75
75
  version: 2.12.0
76
76
  - !ruby/object:Gem::Dependency
77
77
  name: rake
78
78
  requirement: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  - !ruby/object:Gem::Dependency
91
91
  name: turn
92
92
  requirement: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  type: :development
98
98
  prerelease: false
99
99
  version_requirements: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  - !ruby/object:Gem::Dependency
105
105
  name: unindent
106
106
  requirement: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '>='
115
+ - - ">="
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  - !ruby/object:Gem::Dependency
119
119
  name: mocha
120
120
  requirement: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '>='
122
+ - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  type: :development
126
126
  prerelease: false
127
127
  version_requirements: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - '>='
129
+ - - ">="
130
130
  - !ruby/object:Gem::Version
131
131
  version: '0'
132
132
  description: A comprehensive toolkit for remotely running commands in a structured
@@ -138,9 +138,9 @@ executables: []
138
138
  extensions: []
139
139
  extra_rdoc_files: []
140
140
  files:
141
- - .gitignore
142
- - .travis.yml
143
- - .yardopts
141
+ - ".gitignore"
142
+ - ".travis.yml"
143
+ - ".yardopts"
144
144
  - CHANGELOG.md
145
145
  - CONTRIBUTING.md
146
146
  - EXAMPLES.md
@@ -200,6 +200,7 @@ files:
200
200
  - test/unit/core_ext/test_string.rb
201
201
  - test/unit/formatters/test_dot.rb
202
202
  - test/unit/formatters/test_pretty.rb
203
+ - test/unit/test_color.rb
203
204
  - test/unit/test_command.rb
204
205
  - test/unit/test_command_map.rb
205
206
  - test/unit/test_configuration.rb
@@ -216,17 +217,17 @@ require_paths:
216
217
  - lib
217
218
  required_ruby_version: !ruby/object:Gem::Requirement
218
219
  requirements:
219
- - - '>='
220
+ - - ">="
220
221
  - !ruby/object:Gem::Version
221
222
  version: '0'
222
223
  required_rubygems_version: !ruby/object:Gem::Requirement
223
224
  requirements:
224
- - - '>='
225
+ - - ">="
225
226
  - !ruby/object:Gem::Version
226
227
  version: '0'
227
228
  requirements: []
228
229
  rubyforge_project:
229
- rubygems_version: 2.0.3
230
+ rubygems_version: 2.2.2
230
231
  signing_key:
231
232
  specification_version: 4
232
233
  summary: SSHKit makes it easy to write structured, testable SSH commands in Ruby
@@ -245,10 +246,10 @@ test_files:
245
246
  - test/unit/core_ext/test_string.rb
246
247
  - test/unit/formatters/test_dot.rb
247
248
  - test/unit/formatters/test_pretty.rb
249
+ - test/unit/test_color.rb
248
250
  - test/unit/test_command.rb
249
251
  - test/unit/test_command_map.rb
250
252
  - test/unit/test_configuration.rb
251
253
  - test/unit/test_coordinator.rb
252
254
  - test/unit/test_host.rb
253
255
  - test/unit/test_logger.rb
254
- has_rdoc: