em-systemcommand 0.0.5 → 1.0.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/em-systemcommand.gemspec +2 -0
- data/lib/em-systemcommand.rb +25 -2
- data/lib/em-systemcommand/builder.rb +65 -0
- data/lib/em-systemcommand/pipe_handler.rb +0 -2
- data/lib/em-systemcommand/version.rb +1 -1
- data/spec/em-systemcommand/builder_spec.rb +91 -0
- data/spec/em-systemcommand/pipe_spec.rb +9 -9
- data/spec/em-systmcommand_spec.rb +12 -10
- metadata +72 -11
data/em-systemcommand.gemspec
CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |gem|
|
|
18
18
|
gem.add_development_dependency 'rspec'
|
19
19
|
gem.add_development_dependency 'guard'
|
20
20
|
gem.add_development_dependency 'guard-rspec'
|
21
|
+
gem.add_development_dependency 'rake'
|
21
22
|
|
23
|
+
gem.add_dependency 'escape'
|
22
24
|
gem.add_dependency 'eventmachine'
|
23
25
|
end
|
data/lib/em-systemcommand.rb
CHANGED
@@ -3,6 +3,7 @@ require 'open3'
|
|
3
3
|
require "em-systemcommand/version"
|
4
4
|
require "em-systemcommand/pipe"
|
5
5
|
require "em-systemcommand/pipe_handler"
|
6
|
+
require "em-systemcommand/builder"
|
6
7
|
|
7
8
|
module EventMachine
|
8
9
|
class SystemCommand
|
@@ -17,14 +18,36 @@ module EventMachine
|
|
17
18
|
|
18
19
|
def initialize *args, &block
|
19
20
|
@pipes = {}
|
21
|
+
@command = EM::SystemCommand::Builder.new *args
|
20
22
|
|
21
|
-
|
23
|
+
@execution_proc = block
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.execute *args, &block
|
27
|
+
sys_cmd = EM::SystemCommand.new *args, &block
|
28
|
+
sys_cmd.execute
|
29
|
+
end
|
30
|
+
|
31
|
+
# Executes the command
|
32
|
+
def execute &block
|
33
|
+
raise 'Previous process still exists' unless pipes.empty?
|
34
|
+
|
35
|
+
# clear callbacks
|
36
|
+
@callbacks = []
|
37
|
+
@errbacks = []
|
38
|
+
|
39
|
+
stdin, stdout, stderr, @wait_thr = Open3.popen3 @command.to_s
|
22
40
|
|
23
41
|
@stdin = attach_pipe_handler :stdin, stdin
|
24
42
|
@stdout = attach_pipe_handler :stdout, stdout
|
25
43
|
@stderr = attach_pipe_handler :stderr, stderr
|
26
44
|
|
27
|
-
|
45
|
+
if block
|
46
|
+
block.call self
|
47
|
+
elsif @execution_proc
|
48
|
+
@execution_proc.call self
|
49
|
+
end
|
50
|
+
self
|
28
51
|
end
|
29
52
|
|
30
53
|
def pid
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'escape'
|
2
|
+
|
3
|
+
module EventMachine
|
4
|
+
class SystemCommand
|
5
|
+
class Builder
|
6
|
+
|
7
|
+
def initialize *args
|
8
|
+
unless args.length > 0
|
9
|
+
raise "You have to provide at least one argument as command"
|
10
|
+
end
|
11
|
+
@arr = args
|
12
|
+
end
|
13
|
+
|
14
|
+
def add opt, val = nil
|
15
|
+
if opt.is_a?(Array)
|
16
|
+
opt.each do |element|
|
17
|
+
add *element
|
18
|
+
end
|
19
|
+
else
|
20
|
+
if val
|
21
|
+
@arr << [ opt, val ]
|
22
|
+
else
|
23
|
+
@arr << opt
|
24
|
+
end
|
25
|
+
end
|
26
|
+
self
|
27
|
+
end
|
28
|
+
alias :<< :add
|
29
|
+
|
30
|
+
##
|
31
|
+
# Returns the command string
|
32
|
+
def to_s
|
33
|
+
cmd = @arr.shift
|
34
|
+
@arr.each do |arg|
|
35
|
+
if arg.is_a?(Array)
|
36
|
+
param = arg.shift
|
37
|
+
param = param.to_s if param.is_a?(Symbol)
|
38
|
+
if param =~ /^\-{1,2}(.*)/
|
39
|
+
param = $1
|
40
|
+
end
|
41
|
+
value = arg.shift
|
42
|
+
if param.length == 1
|
43
|
+
cmd << ' ' << "-#{param} #{Escape.shell_single_word(value)}"
|
44
|
+
else
|
45
|
+
cmd << ' ' << "--#{param}=#{Escape.shell_single_word(value)}"
|
46
|
+
end
|
47
|
+
elsif arg.is_a?(Symbol)
|
48
|
+
arg = arg.to_s
|
49
|
+
if arg.length == 1
|
50
|
+
cmd << ' ' << "-#{arg}"
|
51
|
+
else
|
52
|
+
cmd << ' ' << "--#{arg}"
|
53
|
+
end
|
54
|
+
elsif arg.strip =~ /^\-/
|
55
|
+
cmd << ' ' << arg
|
56
|
+
else
|
57
|
+
cmd << ' ' << Escape.shell_single_word(arg)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
cmd
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe EM::SystemCommand::Builder do
|
5
|
+
before :all do
|
6
|
+
@cmd = EM::SystemCommand::Builder.new 'ffmpeg'
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '.new' do
|
10
|
+
it 'should take multiple arguments' do
|
11
|
+
b = EM::SystemCommand::Builder.new 'echo', 'Irgendwas'
|
12
|
+
b.to_s.should == 'echo Irgendwas'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
describe '#add' do
|
18
|
+
before :each do
|
19
|
+
@cmd = EM::SystemCommand::Builder.new 'echo'
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should add options' do
|
23
|
+
@cmd << :n
|
24
|
+
@cmd.to_s.should == 'echo -n'
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should add parameters' do
|
28
|
+
@cmd.add :creative, 'not'
|
29
|
+
@cmd.add :a, 'b'
|
30
|
+
@cmd.add '--something', 'weird$'
|
31
|
+
@cmd.to_s.should == "echo --creative=not -a b --something='weird$'"
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'should add arguments' do
|
35
|
+
@cmd << "A long text. It´s got some $pecial Characters like \" or '. Yeah, so be it"
|
36
|
+
@cmd.to_s.should == "echo 'A long text. It´s got some $pecial Characters like \" or '\\''. Yeah, so be it'"
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should add an array' do
|
40
|
+
@cmd << [
|
41
|
+
[:foo, 'bar'],
|
42
|
+
'-a',
|
43
|
+
:b,
|
44
|
+
'Something'
|
45
|
+
]
|
46
|
+
@cmd.to_s.should == 'echo --foo=bar -a -b Something'
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'should be chainable' do
|
50
|
+
@cmd << :p << 'Something else'
|
51
|
+
@cmd.to_s.should == "echo -p 'Something else'"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#to_s' do
|
56
|
+
it 'should escape argument strings' do
|
57
|
+
EM::SystemCommand::Builder.new('echo', 'Irgendwas"$').to_s.
|
58
|
+
should == "echo 'Irgendwas\"$'"
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should not escape symbol options' do
|
62
|
+
EM::SystemCommand::Builder.new('echo', :n, 'Irgendwas"$').to_s.
|
63
|
+
should == "echo -n 'Irgendwas\"$'"
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should not escape symbol long parameter names' do
|
67
|
+
EM::SystemCommand::Builder.new('echo', [:creative, 'not$'], 'Irgendwas"$').to_s.
|
68
|
+
should == "echo --creative='not$' 'Irgendwas\"$'"
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should not escape symbol short parameter names' do
|
72
|
+
EM::SystemCommand::Builder.new('echo', [:a, 'not$'], 'Irgendwas"$').to_s.
|
73
|
+
should == "echo -a 'not$' 'Irgendwas\"$'"
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should not escape long parameters' do
|
77
|
+
EM::SystemCommand::Builder.new('echo', ['--creative', 'not$'], 'Irgendwas"$').to_s.
|
78
|
+
should == "echo --creative='not$' 'Irgendwas\"$'"
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should not escape short parameters' do
|
82
|
+
EM::SystemCommand::Builder.new('echo', ['-a', 'not$'], 'Irgendwas"$').to_s.
|
83
|
+
should == "echo -a 'not$' 'Irgendwas\"$'"
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should not escape arguments' do
|
87
|
+
EM::SystemCommand::Builder.new('echo', '-n', 'Irgendwas"$').to_s.
|
88
|
+
should == "echo -n 'Irgendwas\"$'"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -5,7 +5,7 @@ describe 'Pipe' do
|
|
5
5
|
context '#receive_data' do
|
6
6
|
it 'should correctly do a carriage return in the output buffer' do
|
7
7
|
EM.run do
|
8
|
-
EM::SystemCommand.
|
8
|
+
EM::SystemCommand.execute %q{ruby -e '$stdout.sync = true; print "12345\r"; puts "321"; print "123"; print "\r3210"; exit 0;'} do |on|
|
9
9
|
on.success do |process|
|
10
10
|
EM.stop_event_loop
|
11
11
|
process.stdout.output.should == "32145\n3210"
|
@@ -20,7 +20,7 @@ describe 'Pipe' do
|
|
20
20
|
it 'should be called on data' do
|
21
21
|
received = []
|
22
22
|
EM.run do
|
23
|
-
EM::SystemCommand.
|
23
|
+
EM::SystemCommand.execute %q{echo -n "123123";} do |on|
|
24
24
|
on.stdout.data do |data|
|
25
25
|
received << data
|
26
26
|
end
|
@@ -36,7 +36,7 @@ describe 'Pipe' do
|
|
36
36
|
it 'should be called once even when there is a linebreak' do
|
37
37
|
received = []
|
38
38
|
EM.run do
|
39
|
-
EM::SystemCommand.
|
39
|
+
EM::SystemCommand.execute %Q{echo "123\n456"} do |on|
|
40
40
|
on.stdout.data do |data|
|
41
41
|
received << data
|
42
42
|
end
|
@@ -55,7 +55,7 @@ describe 'Pipe' do
|
|
55
55
|
it 'should be called on readline' do
|
56
56
|
received = []
|
57
57
|
EM.run do
|
58
|
-
EM::SystemCommand.
|
58
|
+
EM::SystemCommand.execute 'echo "123"; echo "456"' do |on|
|
59
59
|
on.stdout.line do |data|
|
60
60
|
received << data
|
61
61
|
end
|
@@ -71,7 +71,7 @@ describe 'Pipe' do
|
|
71
71
|
it 'should be called on carriage return' do
|
72
72
|
received = []
|
73
73
|
EM.run do
|
74
|
-
EM::SystemCommand.
|
74
|
+
EM::SystemCommand.execute %q{ruby -e '$stdout.sync = true; print "123\r"; print "456\r"; exit 0;'} do |on|
|
75
75
|
on.stdout.line do |data|
|
76
76
|
received << data
|
77
77
|
end
|
@@ -91,7 +91,7 @@ describe 'Pipe' do
|
|
91
91
|
it 'should be called on receive data' do
|
92
92
|
received = []
|
93
93
|
EM.run do
|
94
|
-
EM::SystemCommand.
|
94
|
+
EM::SystemCommand.execute %q{ruby -e '$stdout.sync = true; puts "123"; puts "456"; exit 0'} do |on|
|
95
95
|
on.stdout.update do |data|
|
96
96
|
received << data
|
97
97
|
end
|
@@ -107,7 +107,7 @@ describe 'Pipe' do
|
|
107
107
|
it 'should be called on carriage return'do
|
108
108
|
received = []
|
109
109
|
EM.run do
|
110
|
-
EM::SystemCommand.
|
110
|
+
EM::SystemCommand.execute %q{ruby -e '$stdout.sync = true; print "123\r"; sleep 0.1; print "456\r"; exit 0;'} do |on|
|
111
111
|
on.stdout.update do |data|
|
112
112
|
received << data
|
113
113
|
end
|
@@ -127,7 +127,7 @@ describe 'Pipe' do
|
|
127
127
|
it 'should match in lines on receive_line' do
|
128
128
|
received = []
|
129
129
|
EM.run do
|
130
|
-
EM::SystemCommand.
|
130
|
+
EM::SystemCommand.execute 'echo "-123-"; echo "-456-"' do |on|
|
131
131
|
on.stdout.match /-([0-9]+)-/, in: :line do |match, number|
|
132
132
|
received << number
|
133
133
|
end
|
@@ -143,7 +143,7 @@ describe 'Pipe' do
|
|
143
143
|
it 'should match in output buffer on receive_update' do
|
144
144
|
received = []
|
145
145
|
EM.run do
|
146
|
-
EM::SystemCommand.
|
146
|
+
EM::SystemCommand.execute %q{ruby -e '$stdout.sync = true; print "-123-\r"; sleep 0.1; print "-456-\r"; exit 0'} do |on|
|
147
147
|
on.stdout.match /-([0-9]+)-/, in: :output do |match, number|
|
148
148
|
received << number
|
149
149
|
end
|
@@ -2,10 +2,10 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe EM::SystemCommand do
|
4
4
|
|
5
|
-
it 'should call a success callback when process succeeds'
|
5
|
+
it 'should call a success callback when process succeeds' do
|
6
6
|
called = false
|
7
7
|
EM.run do
|
8
|
-
EM::SystemCommand.
|
8
|
+
EM::SystemCommand.execute 'exit 0;' do |on|
|
9
9
|
on.success do |ps|
|
10
10
|
called = true
|
11
11
|
end
|
@@ -19,11 +19,15 @@ describe EM::SystemCommand do
|
|
19
19
|
|
20
20
|
it 'should take a success callback with process as parameter' do
|
21
21
|
EM.run do
|
22
|
-
EM::SystemCommand.
|
22
|
+
EM::SystemCommand.execute 'exit 0;' do |on|
|
23
23
|
on.success do |ps|
|
24
24
|
EM.stop_event_loop
|
25
25
|
ps.should be_a EM::SystemCommand
|
26
26
|
end
|
27
|
+
|
28
|
+
on.failure do |ps|
|
29
|
+
EM.stop_event_loop
|
30
|
+
end
|
27
31
|
end
|
28
32
|
end
|
29
33
|
end
|
@@ -31,7 +35,7 @@ describe EM::SystemCommand do
|
|
31
35
|
it 'should call a failure callback when process fails' do
|
32
36
|
called = false
|
33
37
|
EM.run do
|
34
|
-
EM::SystemCommand.
|
38
|
+
EM::SystemCommand.execute 'echo "123"; exit 1;' do |on|
|
35
39
|
on.failure do |ps|
|
36
40
|
called = true
|
37
41
|
end
|
@@ -45,7 +49,7 @@ describe EM::SystemCommand do
|
|
45
49
|
|
46
50
|
it 'should take a failure callback with process as parameter' do
|
47
51
|
EM.run do
|
48
|
-
EM::SystemCommand.
|
52
|
+
EM::SystemCommand.execute 'exit 1;' do |on|
|
49
53
|
on.failure do |ps|
|
50
54
|
EM.stop_event_loop
|
51
55
|
ps.should be_a EM::SystemCommand
|
@@ -56,7 +60,7 @@ describe EM::SystemCommand do
|
|
56
60
|
|
57
61
|
it 'should have stdin pipe' do
|
58
62
|
EM.run do
|
59
|
-
ps = EM::SystemCommand.
|
63
|
+
ps = EM::SystemCommand.execute 'echo "123"; exit 1;'
|
60
64
|
ps.stdin.should be_a EM::SystemCommand::Pipe
|
61
65
|
EM.stop_event_loop
|
62
66
|
end
|
@@ -64,7 +68,7 @@ describe EM::SystemCommand do
|
|
64
68
|
|
65
69
|
it 'should have stdout pipe' do
|
66
70
|
EM.run do
|
67
|
-
ps = EM::SystemCommand.
|
71
|
+
ps = EM::SystemCommand.execute 'echo "123"; exit 1;'
|
68
72
|
ps.stdout.should be_a EM::SystemCommand::Pipe
|
69
73
|
EM.stop_event_loop
|
70
74
|
end
|
@@ -72,7 +76,7 @@ describe EM::SystemCommand do
|
|
72
76
|
|
73
77
|
it 'should have stderr pipe' do
|
74
78
|
EM.run do
|
75
|
-
ps = EM::SystemCommand.
|
79
|
+
ps = EM::SystemCommand.execute 'echo "123"; exit 1;'
|
76
80
|
ps.stderr.should be_a EM::SystemCommand::Pipe
|
77
81
|
EM.stop_event_loop
|
78
82
|
end
|
@@ -90,7 +94,5 @@ describe EM::SystemCommand do
|
|
90
94
|
stderr: EM::SystemCommand::Pipe
|
91
95
|
}
|
92
96
|
end
|
93
|
-
|
94
97
|
end
|
95
|
-
|
96
98
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-systemcommand
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: guard
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,31 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: guard-rspec
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
39
65
|
none: false
|
40
66
|
requirements:
|
41
67
|
- - ! '>='
|
@@ -43,10 +69,31 @@ dependencies:
|
|
43
69
|
version: '0'
|
44
70
|
type: :development
|
45
71
|
prerelease: false
|
46
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: escape
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
47
94
|
- !ruby/object:Gem::Dependency
|
48
95
|
name: eventmachine
|
49
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
50
97
|
none: false
|
51
98
|
requirements:
|
52
99
|
- - ! '>='
|
@@ -54,7 +101,12 @@ dependencies:
|
|
54
101
|
version: '0'
|
55
102
|
type: :runtime
|
56
103
|
prerelease: false
|
57
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
58
110
|
description: ! '`em-systemcommand` is a simple abstraction for invoking system commands
|
59
111
|
and handling their output easily with eventmachine.'
|
60
112
|
email:
|
@@ -73,9 +125,11 @@ files:
|
|
73
125
|
- Rakefile
|
74
126
|
- em-systemcommand.gemspec
|
75
127
|
- lib/em-systemcommand.rb
|
128
|
+
- lib/em-systemcommand/builder.rb
|
76
129
|
- lib/em-systemcommand/pipe.rb
|
77
130
|
- lib/em-systemcommand/pipe_handler.rb
|
78
131
|
- lib/em-systemcommand/version.rb
|
132
|
+
- spec/em-systemcommand/builder_spec.rb
|
79
133
|
- spec/em-systemcommand/pipe_spec.rb
|
80
134
|
- spec/em-systmcommand_spec.rb
|
81
135
|
- spec/spec_helper.rb
|
@@ -91,19 +145,26 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
91
145
|
- - ! '>='
|
92
146
|
- !ruby/object:Gem::Version
|
93
147
|
version: '0'
|
148
|
+
segments:
|
149
|
+
- 0
|
150
|
+
hash: 1884745858443868072
|
94
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
152
|
none: false
|
96
153
|
requirements:
|
97
154
|
- - ! '>='
|
98
155
|
- !ruby/object:Gem::Version
|
99
156
|
version: '0'
|
157
|
+
segments:
|
158
|
+
- 0
|
159
|
+
hash: 1884745858443868072
|
100
160
|
requirements: []
|
101
161
|
rubyforge_project:
|
102
|
-
rubygems_version: 1.8.
|
162
|
+
rubygems_version: 1.8.24
|
103
163
|
signing_key:
|
104
164
|
specification_version: 3
|
105
165
|
summary: Sweeter popen3 for EventMachine.
|
106
166
|
test_files:
|
167
|
+
- spec/em-systemcommand/builder_spec.rb
|
107
168
|
- spec/em-systemcommand/pipe_spec.rb
|
108
169
|
- spec/em-systmcommand_spec.rb
|
109
170
|
- spec/spec_helper.rb
|