zerg_support 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,5 @@
1
+ v0.1.6. Fixed most issues on Ruby 1.9.
2
+
1
3
  v0.1.5. A second take on the SocketFactory issues.
2
4
 
3
5
  v0.1.4. SocketFactory issues: no lingering, proper closing.
data/Rakefile CHANGED
@@ -14,9 +14,9 @@ Echoe.new('zerg_support') do |p|
14
14
  p.need_zip = !Gem.win_platform?
15
15
  p.rdoc_pattern = /^(lib|bin|tasks|ext)|^BUILD|^README|^CHANGELOG|^TODO|^LICENSE|^COPYING$/
16
16
 
17
- p.development_dependencies = ["echoe >=3.0.2",
18
- "event_machine >=0.12.2",
19
- "flexmock >=0.8.3",
17
+ p.development_dependencies = ['echoe >=3.0.2',
18
+ 'event_machine >=0.12.2',
19
+ 'flexmock >=0.8.3',
20
20
  ]
21
21
  end
22
22
 
@@ -1,6 +1,6 @@
1
1
  #:nodoc: namespace
2
2
  module Zerg::Support::Protocols
3
-
3
+
4
4
  # Protocol for sending and receiving discrete-sized frames over TCP streams.
5
5
  module FrameProtocol
6
6
  # Called when data is available from the TCP stream.
@@ -12,7 +12,7 @@ module FrameProtocol
12
12
  loop do
13
13
  while @frame_protocol_buffer.nil? and i < data.length
14
14
  @frame_protocol_varsize << data[i]
15
- if (data[i] & 0x80) == 0
15
+ if (data[i].ord & 0x80) == 0
16
16
  @frame_protocol_bytes_left =
17
17
  FrameProtocol.decode_natural @frame_protocol_varsize
18
18
  @frame_protocol_buffer = ''
@@ -32,7 +32,7 @@ module FrameProtocol
32
32
  @frame_protocol_buffer << data[i..-1]
33
33
  @frame_protocol_bytes_left -= data.length - i
34
34
  end
35
-
35
+
36
36
  # Override to process incoming frames.
37
37
  def received_frame(frame_data); end
38
38
 
@@ -40,7 +40,7 @@ module FrameProtocol
40
40
  def send_frame(frame_data)
41
41
  send_bytes FrameProtocol.encode_frame(frame_data)
42
42
  end
43
-
43
+
44
44
  # :nodoc: Encodes frame data into data to be sent across a TCP wire.
45
45
  def self.encode_frame(frame_data)
46
46
  encoded_length = FrameProtocol.encode_natural(frame_data.length)
@@ -57,7 +57,7 @@ module FrameProtocol
57
57
  end
58
58
  string
59
59
  end
60
-
60
+
61
61
  #:nodoc: Decodes a natural (non-negative) integer from a string.
62
62
  def self.decode_natural(string)
63
63
  number = 0
@@ -69,7 +69,7 @@ module FrameProtocol
69
69
  multiplier *= 0x80
70
70
  end
71
71
  return number
72
- end
72
+ end
73
73
  end
74
74
 
75
75
  end # namespace Zerg::Support::Protocols
@@ -12,7 +12,7 @@ if RUBY_PLATFORM =~ /win/ and RUBY_PLATFORM !~ /darwin/
12
12
  # command line processing
13
13
  command_line = '"' + binary + '" "' +
14
14
  args.map { |a| a.gsub '"', '""' }.join('" "') + '"'
15
-
15
+
16
16
  # environment processing
17
17
  environment_string = nil
18
18
  if options[:env]
@@ -25,7 +25,7 @@ if RUBY_PLATFORM =~ /win/ and RUBY_PLATFORM !~ /darwin/
25
25
  map { |k| "#{k}=#{environment[k]}" }.join "\0"
26
26
  environment_string << "\0"
27
27
  end
28
-
28
+
29
29
  # redirection processing
30
30
  startup_info = {}
31
31
  files = {}
@@ -47,7 +47,7 @@ if RUBY_PLATFORM =~ /win/ and RUBY_PLATFORM !~ /darwin/
47
47
  end
48
48
  end
49
49
  deferred_opens.each { |d| d.call }
50
-
50
+
51
51
  # process leader
52
52
  creation_flags = 0
53
53
  if options[:pgroup]
@@ -58,18 +58,18 @@ if RUBY_PLATFORM =~ /win/ and RUBY_PLATFORM !~ /darwin/
58
58
  creation_flags |= Process::CREATE_NEW_PROCESS_GROUP
59
59
  end
60
60
  end
61
-
61
+
62
62
  info = Process.create :command_line => command_line,
63
63
  :cwd => options[:chdir] || Dir.pwd,
64
64
  :environment => environment_string,
65
65
  :creation_flags => creation_flags,
66
- :startup_info => startup_info
66
+ :startup_info => startup_info
67
67
  files.each { |name, io| io.close }
68
-
68
+
69
69
  return info[:process_id]
70
70
  end
71
71
  end
72
-
72
+
73
73
  else
74
74
 
75
75
  #:nodoc:
@@ -80,32 +80,34 @@ else
80
80
  def self.spawn(binary, args = [], options = {})
81
81
  if Kernel.respond_to? :spawn
82
82
  # ruby1.9+: spawn!
83
- options = options.dup
84
- env = options.delete(:env)
85
- Kernel.spawn(*([env, binary] + args + [options]))
83
+ if options.has_key? :env
84
+ options = options.dup
85
+ env = options.delete(:env)
86
+ Kernel.spawn(*([env, binary] + args + [options]))
87
+ else
88
+ Kernel.spawn(*([binary] + args + [options]))
89
+ end
86
90
  else
87
91
  # below 1.9: emulate
88
-
92
+
89
93
  # chdir option
90
94
  Dir.chdir options[:chdir] if options[:chdir]
91
-
92
- child_pid = fork do
95
+
96
+ child_pid = Process.fork do
93
97
  Helpers.do_redirects options
94
- Helpers.close_fds options
95
- Helpers.set_process_group options
98
+ Helpers.close_fds options
99
+ Helpers.set_process_group options
96
100
  Helpers.set_environment options
97
101
  Helpers.set_rlimits options
98
-
102
+
99
103
  Kernel.exec(*([binary] + args))
100
104
  end
101
105
  # Get rid of zombies.
102
106
  Process.detach child_pid if options[:pgroup]
103
-
107
+ child_pid
104
108
  end
105
-
106
- return child_pid
107
109
  end
108
- end
110
+ end
109
111
  end
110
112
 
111
113
  # Helpers for spawning processes.
@@ -113,17 +115,17 @@ module Zerg::Support::Process::Helpers
113
115
  # Closes all open file descriptors except for stdin/stdout/stderr
114
116
  def self.close_fds(options)
115
117
  return if options[:close_others] == false
116
-
118
+
117
119
  ObjectSpace.each_object(IO) do |io|
118
120
  next if [STDIN, STDOUT, STDERR].include? io
119
-
121
+
120
122
  begin
121
123
  io.close unless io.closed?
122
124
  rescue Exception
123
125
  end
124
126
  end
125
127
  end
126
-
128
+
127
129
  # Sets process limits (rlimits) according to the given options. The options
128
130
  # follow the convention of Kernel.spawn in ruby1.9
129
131
  def self.set_rlimits(options)
@@ -135,33 +137,33 @@ module Zerg::Support::Process::Helpers
135
137
  Process.setrlimit rconst, v.first, v.last
136
138
  else
137
139
  Process.setrlimit rconst, v
138
- end
139
- end
140
+ end
141
+ end
140
142
  end
141
-
143
+
142
144
  # Sets the process' group according to the given options. The options
143
145
  # follow the convention of Kernel.spawn in ruby1.9
144
146
  def self.set_process_group(options)
145
147
  return unless options[:pgroup]
146
-
148
+
147
149
  if options[:pgroup].kind_of? Numeric and options[:pgroup] > 0
148
150
  Process.setpgid 0, options[:pgroup]
149
151
  else
150
152
  Process.setsid
151
153
  end
152
154
  end
153
-
155
+
154
156
  # Sets the process' environment according to the given options. The options
155
157
  # follow the convention of Kernel.spawn in ruby1.9
156
158
  def self.set_environment(options)
157
159
  return unless options[:env]
158
-
160
+
159
161
  ENV.clear if options[:unsetenv_others]
160
162
  options[:env].each do |key, value|
161
163
  ENV[key] = value
162
164
  end
163
165
  end
164
-
166
+
165
167
  # Performs IO redirections according to the given options. The options
166
168
  # follow the convention of Kernel.spawn in ruby1.9
167
169
  def self.do_redirects(options)
@@ -12,7 +12,7 @@ class TestSpawn < Test::Unit::TestCase
12
12
  File.open(now_cookie, 'w') {}
13
13
  return now_cookie
14
14
  end
15
-
15
+
16
16
  def setup
17
17
  super
18
18
  Thread.abort_on_exception = true
@@ -25,15 +25,15 @@ class TestSpawn < Test::Unit::TestCase
25
25
  File.delete @out_file rescue nil
26
26
  super
27
27
  end
28
-
28
+
29
29
  def test_stdout_redirect
30
30
  pid = Zerg::Support::Process.spawn 'ruby', ['-e', 'print "1234\n"'],
31
31
  STDOUT => @out_file
32
32
  Process.waitpid pid
33
-
33
+
34
34
  assert_equal "1234\n", File.read(@out_file)
35
35
  end
36
-
36
+
37
37
  def test_stdin_redirect
38
38
  File.open(@in_file, 'w') { |f| f.write "1234\n" }
39
39
 
@@ -47,47 +47,46 @@ class TestSpawn < Test::Unit::TestCase
47
47
  pid = Zerg::Support::Process.spawn 'ruby', ['-e', "raise 'zerg_stderr'"],
48
48
  STDERR => @out_file
49
49
  Process.waitpid pid
50
- assert_equal "-e:1: zerg_stderr (RuntimeError)\n", File.read(@out_file)
50
+ assert_match(/zerg_stderr \(RuntimeError\)/m, File.read(@out_file))
51
51
  end
52
-
52
+
53
53
  def test_redirect_cascade
54
54
  pid = Zerg::Support::Process.spawn 'ruby',
55
55
  ['-e', "print 1; raise 'zerg_stderr'"],
56
56
  STDOUT => @out_file, STDERR => STDOUT
57
57
  Process.waitpid pid
58
- assert_operator ["1-e:1: zerg_stderr (RuntimeError)\n",
59
- "-e:1: zerg_stderr (RuntimeError)\n1"],
60
- :include?, File.read(@out_file)
58
+ assert_match(/zerg_stderr \(RuntimeError\)/m, File.read(@out_file))
59
+ assert_match(/1\n/m, File.read(@out_file))
61
60
  end
62
-
61
+
63
62
  def test_redirect_share
64
63
  pid = Zerg::Support::Process.spawn 'ruby',
65
64
  ['-e', "print 1; raise 'zerg_stderr'"],
66
65
  STDOUT => @out_file, STDERR => @out_file
67
66
  Process.waitpid pid
68
- assert_operator ["1-e:1: zerg_stderr (RuntimeError)\n",
69
- "-e:1: zerg_stderr (RuntimeError)\n1"],
70
- :include?, File.read(@out_file)
67
+ assert_match(/zerg_stderr \(RuntimeError\)/m, File.read(@out_file))
68
+ assert_match(/1/, File.read(@out_file))
69
+ assert_no_match(/1\n/m, File.read(@out_file))
71
70
  end
72
-
71
+
73
72
  def test_async
74
73
  t0 = Time.now
75
74
  pid = Zerg::Support::Process.spawn 'ruby', ['-e', 'sleep 0.5']
76
75
  t1 = Time.now
77
76
  Process.waitpid pid
78
77
  t2 = Time.now
79
-
78
+
80
79
  assert_operator t1 - t0, :<, 0.2, 'Spawning is not asynchronous'
81
80
  assert_operator t2 - t0, :>, 0.5,
82
81
  'The spawned program did not sleep for 1 second'
83
82
  end
84
-
83
+
85
84
  def test_set_environment
86
85
  pid = Zerg::Support::Process.spawn 'ruby', ['-e', 'print ENV[\'XA\']'],
87
86
  STDOUT => @out_file, :env => {'XA' => "1234\n"}
88
87
  Process.waitpid pid
89
88
  assert_equal "1234\n", File.read(@out_file)
90
-
89
+
91
90
  pid = Zerg::Support::Process.spawn 'ruby', ['-e', 'print ENV[\'PATH\']'],
92
91
  STDOUT => @in_file, :env => {'XA' => "1234\n"}, :unsetenv_others => true
93
92
  Process.waitpid pid
@@ -95,28 +94,28 @@ class TestSpawn < Test::Unit::TestCase
95
94
  output = File.read(@in_file)
96
95
  assert output == 'nil' || output == '', 'The environment was not cleared'
97
96
  end
98
-
97
+
99
98
  def test_close_fd
100
99
  in_file = File.open(@in_file, 'w')
101
100
  in_file.sync = true
102
101
  in_file.write "1234\n"
103
102
  in_file.close
104
-
103
+
105
104
  in_file = File.open(@in_file, 'r')
106
-
105
+
107
106
  in_fd = in_file.fileno
108
107
  read_fd_code = "File.open(#{in_fd}).read"
109
108
  assert_equal "1234\n", eval(read_fd_code), 'File reading code is broken'
110
-
109
+
111
110
  pid = Zerg::Support::Process.spawn 'ruby', ['-e', "print #{read_fd_code}"],
112
111
  STDOUT => @out_file, STDERR => STDOUT
113
112
  Process.waitpid pid
114
113
  in_file.close
115
114
 
116
- assert_equal "-e:1:", File.read(@out_file)[0, 5],
117
- 'Spawn does not close file descriptors'
115
+ assert_match(/^\-e\:1\:/, File.read(@out_file)[0, 5],
116
+ 'Spawn does not close file descriptors')
118
117
  end
119
-
118
+
120
119
  def test_rlimit_processing
121
120
  if RUBY_PLATFORM =~ /win/ and RUBY_PLATFORM !~ /darwin/
122
121
  Process.const_set :RLIMIT_CPU, 'rlimit_cpu'
@@ -128,11 +127,11 @@ class TestSpawn < Test::Unit::TestCase
128
127
  flexmock(Process).should_receive(:setrlimit).
129
128
  with(Process::RLIMIT_RSS, 64 * 1024 * 1024).once.
130
129
  and_return(nil)
131
-
130
+
132
131
  Zerg::Support::Process::Helpers.set_rlimits :rlimit_cpu => [1, 5],
133
132
  :rlimit_rss => 64 * 1024 * 1024
134
133
  end
135
-
134
+
136
135
  def test_process_group_processing
137
136
  flexmock(Process).should_receive(:setpgid).with(0, 42).once.and_return(nil)
138
137
  flexmock(Process).should_receive(:setsid).with().once.and_return(nil)
@@ -140,16 +139,16 @@ class TestSpawn < Test::Unit::TestCase
140
139
  Zerg::Support::Process::Helpers.set_process_group :pgroup => 42
141
140
  Zerg::Support::Process::Helpers.set_process_group :pgroup => true
142
141
  end
143
-
142
+
144
143
  def test_process_group
145
144
  pid = Zerg::Support::Process.spawn 'ruby', ['-e', "sleep 0.5"],
146
145
  :pgroup => true
147
146
  pinfo = Zerg::Support::Process::process_info pid
148
147
  Process.waitpid pid
149
-
148
+
150
149
  assert pinfo[:state].index('s'), 'Failed to become session leader'
151
150
  end
152
-
151
+
153
152
  def test_rlimits
154
153
  t0 = Time.now
155
154
  pid = Zerg::Support::Process.spawn 'ruby',
@@ -157,8 +156,8 @@ class TestSpawn < Test::Unit::TestCase
157
156
  :rlimit_cpu => 1
158
157
  Process.waitpid pid
159
158
  t1 = Time.now
160
-
159
+
161
160
  assert_operator t1 - t0, :>=, 0.95, 'Spawning failed'
162
161
  assert_operator t1 - t0, :<=, 2.0, 'Failed to apply rlimit_cpu'
163
162
  end
164
- end
163
+ end
@@ -1,29 +1,28 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.name = %q{zerg_support}
5
- s.version = "0.1.5"
4
+ s.name = "zerg_support"
5
+ s.version = "0.1.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Victor Costan"]
9
- s.date = %q{2009-11-11}
10
- s.description = %q{Support libraries used by Zergling.Net deployment code.}
11
- s.email = %q{victor@zergling.net}
9
+ s.date = "2012-12-18"
10
+ s.description = "Support libraries used by Zergling.Net deployment code."
11
+ s.email = "victor@zergling.net"
12
12
  s.extra_rdoc_files = ["CHANGELOG", "lib/zerg_support/event_machine/connection_mocks.rb", "lib/zerg_support/event_machine/protocol_adapter.rb", "lib/zerg_support/gems.rb", "lib/zerg_support/open_ssh.rb", "lib/zerg_support/process.rb", "lib/zerg_support/protocols/frame_protocol.rb", "lib/zerg_support/protocols/object_protocol.rb", "lib/zerg_support/socket_factory.rb", "lib/zerg_support/sockets/protocol_adapter.rb", "lib/zerg_support/sockets/socket_mocks.rb", "lib/zerg_support/spawn.rb", "lib/zerg_support.rb", "LICENSE", "README"]
13
13
  s.files = ["CHANGELOG", "lib/zerg_support/event_machine/connection_mocks.rb", "lib/zerg_support/event_machine/protocol_adapter.rb", "lib/zerg_support/gems.rb", "lib/zerg_support/open_ssh.rb", "lib/zerg_support/process.rb", "lib/zerg_support/protocols/frame_protocol.rb", "lib/zerg_support/protocols/object_protocol.rb", "lib/zerg_support/socket_factory.rb", "lib/zerg_support/sockets/protocol_adapter.rb", "lib/zerg_support/sockets/socket_mocks.rb", "lib/zerg_support/spawn.rb", "lib/zerg_support.rb", "LICENSE", "Manifest", "Rakefile", "README", "RUBYFORGE", "test/fork_tree.rb", "test/test_connection_mocks.rb", "test/test_frame_protocol.rb", "test/test_gems.rb", "test/test_object_protocol.rb", "test/test_open_ssh.rb", "test/test_process.rb", "test/test_socket_factory.rb", "test/test_spawn.rb", "zerg_support.gemspec"]
14
- s.homepage = %q{http://github.com/costan/zerg_support}
14
+ s.homepage = "http://github.com/costan/zerg_support"
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Zerg_support", "--main", "README"]
16
16
  s.require_paths = ["lib"]
17
- s.rubyforge_project = %q{zerglings}
18
- s.rubygems_version = %q{1.3.5}
19
- s.summary = %q{Support libraries used by Zergling.Net deployment code.}
20
- s.test_files = ["test/test_spawn.rb", "test/test_socket_factory.rb", "test/test_gems.rb", "test/test_open_ssh.rb", "test/test_object_protocol.rb", "test/test_frame_protocol.rb", "test/test_process.rb", "test/test_connection_mocks.rb"]
17
+ s.rubyforge_project = "zerglings"
18
+ s.rubygems_version = "1.8.24"
19
+ s.summary = "Support libraries used by Zergling.Net deployment code."
20
+ s.test_files = ["test/test_open_ssh.rb", "test/test_socket_factory.rb", "test/test_frame_protocol.rb", "test/test_connection_mocks.rb", "test/test_process.rb", "test/test_object_protocol.rb", "test/test_gems.rb", "test/test_spawn.rb"]
21
21
 
22
22
  if s.respond_to? :specification_version then
23
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
23
  s.specification_version = 3
25
24
 
26
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
25
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
27
26
  s.add_development_dependency(%q<echoe>, [">= 3.0.2"])
28
27
  s.add_development_dependency(%q<event_machine>, [">= 0.12.2"])
29
28
  s.add_development_dependency(%q<flexmock>, [">= 0.8.3"])
metadata CHANGED
@@ -1,54 +1,69 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: zerg_support
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.6
5
+ prerelease:
5
6
  platform: ruby
6
- authors:
7
+ authors:
7
8
  - Victor Costan
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
-
12
- date: 2009-11-11 00:00:00 -05:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2012-12-18 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: echoe
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.2
17
22
  type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
23
29
  version: 3.0.2
24
- version:
25
- - !ruby/object:Gem::Dependency
30
+ - !ruby/object:Gem::Dependency
26
31
  name: event_machine
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 0.12.2
27
38
  type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
33
45
  version: 0.12.2
34
- version:
35
- - !ruby/object:Gem::Dependency
46
+ - !ruby/object:Gem::Dependency
36
47
  name: flexmock
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.8.3
37
54
  type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
43
61
  version: 0.8.3
44
- version:
45
62
  description: Support libraries used by Zergling.Net deployment code.
46
63
  email: victor@zergling.net
47
64
  executables: []
48
-
49
65
  extensions: []
50
-
51
- extra_rdoc_files:
66
+ extra_rdoc_files:
52
67
  - CHANGELOG
53
68
  - lib/zerg_support/event_machine/connection_mocks.rb
54
69
  - lib/zerg_support/event_machine/protocol_adapter.rb
@@ -64,7 +79,7 @@ extra_rdoc_files:
64
79
  - lib/zerg_support.rb
65
80
  - LICENSE
66
81
  - README
67
- files:
82
+ files:
68
83
  - CHANGELOG
69
84
  - lib/zerg_support/event_machine/connection_mocks.rb
70
85
  - lib/zerg_support/event_machine/protocol_adapter.rb
@@ -93,45 +108,42 @@ files:
93
108
  - test/test_socket_factory.rb
94
109
  - test/test_spawn.rb
95
110
  - zerg_support.gemspec
96
- has_rdoc: true
97
111
  homepage: http://github.com/costan/zerg_support
98
112
  licenses: []
99
-
100
113
  post_install_message:
101
- rdoc_options:
114
+ rdoc_options:
102
115
  - --line-numbers
103
116
  - --inline-source
104
117
  - --title
105
118
  - Zerg_support
106
119
  - --main
107
120
  - README
108
- require_paths:
121
+ require_paths:
109
122
  - lib
110
- required_ruby_version: !ruby/object:Gem::Requirement
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- version: "0"
115
- version:
116
- required_rubygems_version: !ruby/object:Gem::Requirement
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- version: "1.2"
121
- version:
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ required_rubygems_version: !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ! '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '1.2'
122
135
  requirements: []
123
-
124
136
  rubyforge_project: zerglings
125
- rubygems_version: 1.3.5
137
+ rubygems_version: 1.8.24
126
138
  signing_key:
127
139
  specification_version: 3
128
140
  summary: Support libraries used by Zergling.Net deployment code.
129
- test_files:
130
- - test/test_spawn.rb
131
- - test/test_socket_factory.rb
132
- - test/test_gems.rb
141
+ test_files:
133
142
  - test/test_open_ssh.rb
134
- - test/test_object_protocol.rb
143
+ - test/test_socket_factory.rb
135
144
  - test/test_frame_protocol.rb
136
- - test/test_process.rb
137
145
  - test/test_connection_mocks.rb
146
+ - test/test_process.rb
147
+ - test/test_object_protocol.rb
148
+ - test/test_gems.rb
149
+ - test/test_spawn.rb