runssh 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,52 +16,87 @@
16
16
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
  #
18
18
 
19
- require 'lib/runsshlib'
20
- require 'tmpdir'
21
19
  require 'spec_helper'
20
+ require 'runsshlib'
21
+ require 'tmpdir'
22
+ require 'yaml'
22
23
 
23
24
  describe "RunSSH Configuration class" do
24
25
 
25
- def read_config
26
- File.open(@temp_file) { |io| Marshal.load(io) }
26
+ def read_config from_file=@temp_file
27
+ File.open(from_file) { |io| Marshal.load(io) }
27
28
  end
28
29
 
29
30
  def initial_data
30
31
  @c = RunSSHLib::ConfigFile.new(@temp_file)
31
- @c.add_host_def([:one, :two, :three], :www,
32
- RunSSHLib::HostDef.new('www.example.com', 'me'))
32
+ host = {:host_name => 'www.example.com', :login => "me"}
33
+ @c.add_host_def([:one, :two, :three], :www, RunSSHLib::SshHostDef.new(host))
33
34
  end
34
35
 
35
36
  before(:all) do
36
- @temp_file = File.join(Dir.tmpdir, 'tempfile')
37
+ cleanup_tmp_file # make sure there are no leftovers
38
+ @temp_file = TMP_FILE
37
39
  @temp_file_bak = @temp_file + '.bak'
38
- @h1 = RunSSHLib::HostDef.new('a.b.c')
39
- @h2 = RunSSHLib::HostDef.new('b.b.c', 'meme')
40
+ @h1 = RunSSHLib::SshHostDef.new('a.b.c')
41
+ @h2 = RunSSHLib::SshHostDef.new(:host_name => 'b.b.c',
42
+ :login => 'meme')
40
43
  @tmp_yml = File.join(Dir.tmpdir, 'tempyml')
41
44
  end
42
45
 
43
- it "should save a new empty configuration if none exists" do
44
- RunSSHLib::ConfigFile.new(@temp_file)
45
- read_config.should == {}
46
- end
46
+ describe 'when initializing' do
47
+ it "should save a new empty configuration if none exists" do
48
+ RunSSHLib::ConfigFile.new(@temp_file)
49
+ read_config.should == {'VERSION' => RunSSHLib::ConfigFile::Version}
50
+ end
47
51
 
48
- it "should create a backup while saving" do
49
- c = RunSSHLib::ConfigFile.new(@temp_file)
50
- c.send(:save)
51
- # the 2 files should match
52
- File.read(@temp_file).should == File.read(@temp_file_bak)
53
- end
52
+ it "should create a backup while saving" do
53
+ c = RunSSHLib::ConfigFile.new(@temp_file)
54
+ c.send(:save)
55
+ # the 2 files should match
56
+ File.read(@temp_file).should == File.read(@temp_file_bak)
57
+ end
54
58
 
55
- it "should overwrite existing backup if one already exists" do
56
- # create a new file and a copy of it
57
- c = RunSSHLib::ConfigFile.new(@temp_file)
58
- c.send(:save)
59
- # sanity
60
- File.read(@temp_file).should == File.read(@temp_file_bak)
61
- b = RunSSHLib::ConfigFile.new(@temp_file)
62
- b.add_host_def([:one, :two, :three], :www, @h1)
63
- File.read(@temp_file).should_not == File.read(@temp_file_bak)
59
+ it "should overwrite existing backup if one already exists" do
60
+ # create a new file and a copy of it
61
+ c = RunSSHLib::ConfigFile.new(@temp_file)
62
+ c.send(:save)
63
+ # sanity
64
+ File.read(@temp_file).should == File.read(@temp_file_bak)
65
+ b = RunSSHLib::ConfigFile.new(@temp_file)
66
+ b.add_host_def([:one, :two, :three], :www, @h1)
67
+ File.read(@temp_file).should_not == File.read(@temp_file_bak)
68
+ end
64
69
 
70
+ it "should raise OlderConfigVersionError if missing config version" do
71
+ # create an empty file to represent a config file without a version
72
+ dump_config Hash.new
73
+ expect {
74
+ RunSSHLib::ConfigFile.new(@temp_file)
75
+ }.to raise_error(RunSSHLib::OlderConfigVersionError, 'none')
76
+ end
77
+
78
+ it "should accept older/no config version of old_version=true" do
79
+ dump_config Hash.new
80
+ RunSSHLib::ConfigFile.new(TMP_FILE, true).should be_instance_of(RunSSHLib::ConfigFile)
81
+ end
82
+
83
+ it "should raise ConfigError if version is higher then supported" do
84
+ hsh = Hash.new
85
+ hsh['VERSION'] = 1.1
86
+ dump_config hsh
87
+ expect do
88
+ RunSSHLib::ConfigFile.new(@temp_file)
89
+ end.to raise_error(RunSSHLib::ConfigError, /newer version of runssh!/)
90
+ # even if old_version=true
91
+ expect do
92
+ RunSSHLib::ConfigFile.new(@temp_file, true)
93
+ end.to raise_error(RunSSHLib::ConfigError, /newer version of runssh!/)
94
+ end
95
+
96
+ it "should create new config files with the correct version" do
97
+ cf = RunSSHLib::ConfigFile.new(@temp_file)
98
+ read_config['VERSION'].should eql(RunSSHLib::ConfigFile::Version)
99
+ end
65
100
  end
66
101
 
67
102
  describe "when adding host" do
@@ -95,8 +130,8 @@ describe "RunSSH Configuration class" do
95
130
  c.add_host_def([:one, :two], :h1, @h1)
96
131
  c.add_host_def([:three, :four], :h2, @h2)
97
132
  d = RunSSHLib::ConfigFile.new(@temp_file)
98
- d.get_host([:one, :two, :h1]).should == @h1
99
- d.get_host([:three, :four, :h2]).should == @h2
133
+ d.get_host([:one, :two, :h1]).should eql(@h1)
134
+ d.get_host([:three, :four, :h2]).should eql(@h2)
100
135
  end
101
136
 
102
137
  it "should correctly merge paths with common path" do
@@ -249,15 +284,93 @@ describe "RunSSH Configuration class" do
249
284
  @c.list_groups([:one, :two]).should include(:three, :four)
250
285
  @c.list_groups([:one, :two, :three]).should include(:host, :www)
251
286
  end
287
+
288
+ it "should not return the VERSION as a group" do
289
+ @c.list_groups([]).should_not include('VERSION')
290
+ end
252
291
  end
253
292
 
254
- it "should correctly export and import YAML files" do
255
- yml = File.join(File.dirname(__FILE__), '../fixtures', 'runssh.yml')
256
- c = RunSSHLib::ConfigFile.new(@temp_file)
257
- c.import(yml)
258
- c.export(@tmp_yml)
259
- require 'yaml'
260
- YAML.load_file(@tmp_yml).should == YAML.load_file(yml)
293
+ describe "when importing" do
294
+ let(:yml) { File.join(File.dirname(__FILE__), '../fixtures', 'runssh.yml') }
295
+
296
+ it "should not accept config from different config version" do
297
+ y = YAML.load_file(yml)
298
+ y['VERSION'] = 2.0
299
+ File.open(@tmp_yml, 'w') { |out| YAML.dump(y, out) }
300
+ expect do
301
+ c = RunSSHLib::ConfigFile.new(@temp_file)
302
+ c.import(@tmp_yml)
303
+ end.to raise_error(RunSSHLib::ConfigError, /different version.*2.0/)
304
+ end
305
+
306
+ it "should correctly export and import YAML files" do
307
+ c = RunSSHLib::ConfigFile.new(@temp_file)
308
+ c.import(yml)
309
+ c.export(@tmp_yml)
310
+ YAML.load_file(@tmp_yml).should == YAML.load_file(yml)
311
+ end
312
+ end
313
+
314
+ describe "when updating configuration version" do
315
+ let(:config_v_none) do
316
+ YAML.load_file(File.join(File.dirname(__FILE__), '..',
317
+ 'fixtures', 'runssh_v_none.yml'))
318
+ end
319
+
320
+ it "'config_none_to_10' should correctly convert all old HostDef to SshHostDef" do
321
+ c = RunSSHLib::ConfigFile.new(TMP_FILE, true)
322
+ result = c.send(:config_none_to_10, config_v_none)
323
+ result[:cust1][:dc1][:host2].should be_instance_of(RunSSHLib::SshHostDef)
324
+ result[:cust1][:dc1][:host1].should be_instance_of(RunSSHLib::SshHostDef)
325
+ result[:cust1][:dc2][:host1].should be_instance_of(RunSSHLib::SshHostDef)
326
+ end
327
+
328
+ it "'update_config' should call config_none_to_10 with right parameters" do
329
+ dump_config(config_v_none)
330
+ c = RunSSHLib::ConfigFile.new(TMP_FILE, true)
331
+ c.should_receive(:config_none_to_10).with(config_v_none).and_return(Hash.new)
332
+ c.update_config
333
+ end
334
+
335
+ it "'update_config' should create backup with appropriate name" do
336
+ bf = TMP_FILE + '.none'
337
+ dump_config(config_v_none)
338
+ c = RunSSHLib::ConfigFile.new(TMP_FILE, true)
339
+ c.update_config
340
+ read_config(bf).should eql(config_v_none)
341
+ end
342
+
343
+ it "'update_config' should return the backup file for notifying the user" do
344
+ dump_config(config_v_none)
345
+ c = RunSSHLib::ConfigFile.new(TMP_FILE, true)
346
+ c.update_config.should eql(TMP_FILE + '.none')
347
+ end
348
+
349
+ it "'update_config' should return nil if there was no need for backup" do
350
+ hsh = {'VERSION' => RunSSHLib::ConfigFile::Version}
351
+ dump_config(hsh)
352
+ c = RunSSHLib::ConfigFile.new(TMP_FILE, true)
353
+ c.update_config.should be_nil
354
+ end
355
+
356
+ it "should correctly save the new configuration" do
357
+ dump_config(config_v_none)
358
+ c = RunSSHLib::ConfigFile.new(TMP_FILE, true)
359
+ c.update_config
360
+ new_config = RunSSHLib::ConfigFile.new(TMP_FILE)
361
+ cc = new_config.instance_variable_get(:@config)
362
+ cc['VERSION'].should eql(RunSSHLib::ConfigFile::Version)
363
+ cc[:cust1][:dc1][:host2].should be_instance_of(RunSSHLib::SshHostDef)
364
+ cc[:cust1][:dc1][:host1].should be_instance_of(RunSSHLib::SshHostDef)
365
+ cc[:cust1][:dc2][:host1].should be_instance_of(RunSSHLib::SshHostDef)
366
+ end
367
+
368
+ after(:each) do
369
+ bf = TMP_FILE + '.none'
370
+ if File.exists? bf
371
+ File.delete(bf)
372
+ end
373
+ end
261
374
  end
262
375
 
263
376
  after(:each) do
@@ -272,4 +385,4 @@ describe "RunSSH Configuration class" do
272
385
  end
273
386
  end
274
387
 
275
- end
388
+ end
@@ -16,53 +16,55 @@
16
16
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
17
  #
18
18
 
19
- require 'lib/runsshlib'
20
19
  require 'spec_helper'
20
+ require 'runsshlib'
21
21
 
22
- describe "SshBackend implementation" do
23
- describe "when initializing" do
24
- before(:all) do
25
- @h = RunSSHLib::HostDef.new('a.example.com', 'me')
26
- @o = {:login => 'you'}
22
+ describe RunSSHLib::SshBackend do
23
+ context "shell" do
24
+ let(:test_data) do
25
+ {:host_name => "a",
26
+ :login => "user",
27
+ :remote_cmd => "uptime"}
27
28
  end
28
29
 
29
- it "should override user in host definition with `overrides`" do
30
- s = RunSSHLib::SshBackend.new(@h, @o)
31
- s.instance_variable_get(:@host).should == 'a.example.com'
32
- s.instance_variable_get(:@user).should == 'you'
30
+ it "should handle null user correctly" do
31
+ data = {:host_name => "a"}
32
+ RunSSHLib::SshBackend.should_receive(:exec).
33
+ with(/^ssh\s+#{data[:host_name]}$/).
34
+ and_return(nil)
35
+ RunSSHLib::SshBackend.shell(data)
33
36
  end
34
37
 
35
- it "should accept host definitions if no overrides" do
36
- s = RunSSHLib::SshBackend.new(@h, {})
37
- s.instance_variable_get(:@host).should == 'a.example.com'
38
- s.instance_variable_get(:@user).should == 'me'
38
+ it "should handle user correctly" do
39
+ data = {
40
+ :host_name => "a",
41
+ :login => "user"
42
+ }
43
+ RunSSHLib::SshBackend.should_receive(:exec).
44
+ with(/^ssh\s+-l\s+#{data[:login]}\s+#{data[:host_name]}$/).
45
+ and_return(nil)
46
+ RunSSHLib::SshBackend.shell(data)
39
47
  end
40
- end
41
48
 
42
- describe "shell" do
43
- before(:each) do
44
- @hd1 = RunSSHLib::HostDef.new('a.example.com')
45
- @hd2 = RunSSHLib::HostDef.new('b.example.com', 'user')
46
- end
47
-
48
- it "should handle null user correctly" do
49
- ssh = RunSSHLib::SshBackend.new(@hd1, {})
50
- ssh.should_receive(:exec).with(/^ssh\s+a.example.com$/).and_return(nil)
51
- ssh.shell
49
+ it "should raise error if no :host_name in definition" do
50
+ expect do
51
+ RunSSHLib::SshBackend.shell({:login => 'me'})
52
+ end.to raise_error(RuntimeError, /no hostname/i)
52
53
  end
53
54
 
54
- it "should handle existing user correctly" do
55
- ssh = RunSSHLib::SshBackend.new(@hd2, {})
56
- ssh.should_receive(:exec).with(/^ssh\s+-l\s+user\s+b.example.com$/).
57
- and_return(nil)
58
- ssh.shell
55
+ it "should handle correctly remote commands" do
56
+ RunSSHLib::SshBackend.should_receive(:exec).
57
+ with(/^ssh\s+-l\s+#{test_data[:login]}\s+#{test_data[:host_name]}\s+--\s+"uptime"$/).
58
+ and_return(nil)
59
+ RunSSHLib::SshBackend.shell(test_data)
59
60
  end
60
61
 
61
- it "should use the overriding user instead of configured one" do
62
- ssh = RunSSHLib::SshBackend.new(@hd2, {:login => 'another', })
63
- ssh.should_receive(:exec).with(/^ssh\s+-l\s+another\s+b.example.com$/).
64
- and_return(nil)
65
- ssh.shell
62
+ it "should ignore empty remote commands" do
63
+ data = test_data.merge(:remote_cmd => "")
64
+ RunSSHLib::SshBackend.should_receive(:exec).
65
+ with(/^ssh\s+-l\s+#{data[:login]}\s+#{data[:host_name]}$/).
66
+ and_return(nil)
67
+ RunSSHLib::SshBackend.shell(data)
66
68
  end
67
69
  end
68
70
  end
@@ -0,0 +1,91 @@
1
+ #
2
+ # Copyright (C) 2010 Haim Ashkenazi
3
+ #
4
+ # This program is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU General Public License
6
+ # as published by the Free Software Foundation; either version 2
7
+ # of the License, or (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17
+ #
18
+ require 'spec_helper'
19
+ require 'runsshlib'
20
+
21
+ describe 'SshHostDef' do
22
+ context 'when initialized' do
23
+ let(:data) { {:host_name => 'myname'} }
24
+
25
+ it "should raise ArgumentError if not initialized with host_name" do
26
+ expect {
27
+ RunSSHLib::SshHostDef.new({:login => 'haim'})
28
+ }.to raise_error(ArgumentError, /Missing hostname/)
29
+ end
30
+
31
+ it "should initialize correctly if supplied a hostname as string" do
32
+ shd = RunSSHLib::SshHostDef.new('myname')
33
+ shd.instance_variable_get(:@definition).should eql(data)
34
+ end
35
+
36
+ it "should initialize correctly if supplied with a hash with :host_name" do
37
+ shd = RunSSHLib::SshHostDef.new(data)
38
+ shd.instance_variable_get(:@definition).should eql(data)
39
+ end
40
+ end
41
+
42
+ context 'when testing for equality' do
43
+ let(:definition) do
44
+ { :host_name => 'host', :login => "login" }
45
+ end
46
+
47
+ it "should not equal nil" do
48
+ RunSSHLib::SshHostDef.new(definition).should_not == nil
49
+ end
50
+
51
+ it "should not equal any object" do
52
+ class MyTest
53
+ attr_reader :definition
54
+ def initialize definition
55
+ @definition = definition
56
+ end
57
+ end
58
+
59
+ RunSSHLib::SshHostDef.new(definition).should_not == MyTest.new(definition)
60
+ end
61
+
62
+ it "should return true for == if @definition is equal" do
63
+ h1 = RunSSHLib::SshHostDef.new(definition)
64
+ h2 = RunSSHLib::SshHostDef.new('hostname')
65
+ RunSSHLib::SshHostDef.new(definition).should == h1
66
+ RunSSHLib::SshHostDef.new('hostname').should == h2
67
+ end
68
+
69
+ it "should return true for eql? if @definition is equal" do
70
+ h1 = RunSSHLib::SshHostDef.new(definition)
71
+ h2 = RunSSHLib::SshHostDef.new('hostname')
72
+ RunSSHLib::SshHostDef.new(definition).should eql(h1)
73
+ RunSSHLib::SshHostDef.new('hostname').should eql(h2)
74
+ end
75
+ end
76
+
77
+ context "to_print" do
78
+ it "should run correctly without user" do
79
+ h = RunSSHLib::SshHostDef.new('myhostname')
80
+ p h.to_print
81
+ h.to_print.should match(/^.*host:.*myhostname\n.*login:.*current user$/)
82
+ end
83
+
84
+ it "should run correctly with user" do
85
+ h = RunSSHLib::SshHostDef.new({
86
+ :host_name => 'myhostname', :login => 'me'
87
+ })
88
+ h.to_print.should match(/^.*host:.*myhostname\n.*login:.*me$/)
89
+ end
90
+ end
91
+ end
data/spec/spec_helper.rb CHANGED
@@ -17,6 +17,7 @@
17
17
  #
18
18
  require 'rspec'
19
19
  require 'tmpdir'
20
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
20
21
 
21
22
  # got the idea from:
22
23
  # http://stackoverflow.com/questions/1480537/how-can-i-validate-exits-and-aborts-in-rspec
@@ -83,3 +84,7 @@ def import_fixtures
83
84
  c = RunSSHLib::ConfigFile.new(TMP_FILE)
84
85
  c.import(yml)
85
86
  end
87
+
88
+ def dump_config hsh
89
+ File.open(TMP_FILE, 'w') { |out| Marshal.dump(hsh, out) }
90
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: runssh
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
5
- prerelease: false
4
+ hash: 23
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
- - 1
10
- version: 0.1.1
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Haim Ashkenazi
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-31 00:00:00 +02:00
18
+ date: 2011-01-25 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -35,7 +35,7 @@ dependencies:
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- name: rspec
38
+ name: highline
39
39
  prerelease: false
40
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
41
  none: false
@@ -44,16 +44,32 @@ dependencies:
44
44
  - !ruby/object:Gem::Version
45
45
  hash: 13
46
46
  segments:
47
+ - 1
48
+ - 6
49
+ - 1
50
+ version: 1.6.1
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 11
62
+ segments:
47
63
  - 2
48
- - 0
49
64
  - 1
50
- version: 2.0.1
65
+ - 0
66
+ version: 2.1.0
51
67
  type: :development
52
- version_requirements: *id002
68
+ version_requirements: *id003
53
69
  - !ruby/object:Gem::Dependency
54
70
  name: rcov
55
71
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
72
+ requirement: &id004 !ruby/object:Gem::Requirement
57
73
  none: false
58
74
  requirements:
59
75
  - - ~>
@@ -65,7 +81,55 @@ dependencies:
65
81
  - 9
66
82
  version: 0.9.9
67
83
  type: :development
68
- version_requirements: *id003
84
+ version_requirements: *id004
85
+ - !ruby/object:Gem::Dependency
86
+ name: autotest
87
+ prerelease: false
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ hash: 39
94
+ segments:
95
+ - 4
96
+ - 4
97
+ - 4
98
+ version: 4.4.4
99
+ type: :development
100
+ version_requirements: *id005
101
+ - !ruby/object:Gem::Dependency
102
+ name: autotest-fsevent
103
+ prerelease: false
104
+ requirement: &id006 !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ hash: 17
110
+ segments:
111
+ - 0
112
+ - 2
113
+ - 3
114
+ version: 0.2.3
115
+ type: :development
116
+ version_requirements: *id006
117
+ - !ruby/object:Gem::Dependency
118
+ name: autotest-growl
119
+ prerelease: false
120
+ requirement: &id007 !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ hash: 27
126
+ segments:
127
+ - 0
128
+ - 2
129
+ - 6
130
+ version: 0.2.6
131
+ type: :development
132
+ version_requirements: *id007
69
133
  description: |
70
134
  Runssh is a command line utility to help bookmark many
71
135
  ssh connections in heirarchial groups.
@@ -78,19 +142,30 @@ extensions: []
78
142
  extra_rdoc_files:
79
143
  - README.rdoc
80
144
  files:
145
+ - .autotest
146
+ - .gitignore
147
+ - .rspec
148
+ - Gemfile
149
+ - Gemfile.lock
81
150
  - README.rdoc
82
- - gpl-2.0.txt
83
151
  - Rakefile
152
+ - autotest/discover.rb
153
+ - bin/runssh
154
+ - bin/runssh_comp.sh
155
+ - gpl-2.0.txt
156
+ - lib/runsshlib.rb
84
157
  - lib/runsshlib/cli.rb
85
158
  - lib/runsshlib/config_file.rb
86
159
  - lib/runsshlib/ssh_backend.rb
87
- - lib/runsshlib.rb
88
- - bin/runssh
89
- - bin/runssh_comp.sh
160
+ - lib/runsshlib/ssh_host_def.rb
161
+ - lib/runsshlib/version.rb
162
+ - runssh.gemspec
90
163
  - spec/fixtures/runssh.yml
164
+ - spec/fixtures/runssh_v_none.yml
91
165
  - spec/runsshlib/cli_spec.rb
92
166
  - spec/runsshlib/config_file_spec.rb
93
167
  - spec/runsshlib/ssh_backend_spec.rb
168
+ - spec/runsshlib/ssh_host_def_spec.rb
94
169
  - spec/spec_helper.rb
95
170
  has_rdoc: true
96
171
  homepage: http://github.com/babysnakes/runssh
@@ -100,12 +175,14 @@ post_install_message:
100
175
  rdoc_options:
101
176
  - --main
102
177
  - README.rdoc
178
+ - -c
179
+ - UTF-8
103
180
  require_paths:
104
181
  - lib
105
182
  required_ruby_version: !ruby/object:Gem::Requirement
106
183
  none: false
107
184
  requirements:
108
- - - ~>
185
+ - - ">="
109
186
  - !ruby/object:Gem::Version
110
187
  hash: 57
111
188
  segments:
@@ -125,9 +202,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
202
  requirements: []
126
203
 
127
204
  rubyforge_project:
128
- rubygems_version: 1.3.7
205
+ rubygems_version: 1.4.2
129
206
  signing_key:
130
207
  specification_version: 3
131
208
  summary: CLI utility to bookmark multiple ssh connections with hierarchy.
132
- test_files: []
133
-
209
+ test_files:
210
+ - spec/fixtures/runssh.yml
211
+ - spec/fixtures/runssh_v_none.yml
212
+ - spec/runsshlib/cli_spec.rb
213
+ - spec/runsshlib/config_file_spec.rb
214
+ - spec/runsshlib/ssh_backend_spec.rb
215
+ - spec/runsshlib/ssh_host_def_spec.rb
216
+ - spec/spec_helper.rb