zerg_support 0.1.5 → 0.1.6

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/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