CommandLine 0.6.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/LICENSE +31 -0
- data/README +380 -0
- data/docs/index.html +1005 -0
- data/lib/commandline.rb +15 -0
- data/lib/commandline/application.rb +320 -0
- data/lib/commandline/optionparser.rb +16 -0
- data/lib/commandline/optionparser/option.rb +180 -0
- data/lib/commandline/optionparser/optiondata.rb +54 -0
- data/lib/commandline/optionparser/optionparser.rb +521 -0
- data/lib/commandline/text/format.rb +1451 -0
- data/lib/commandline/utils.rb +12 -0
- data/lib/open4.rb +79 -0
- data/lib/test/unit/systemtest.rb +58 -0
- metadata +57 -0
data/lib/open4.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# stolen directly from Open3::open3.rb!
|
2
|
+
#
|
3
|
+
# open4.rb: Spawn a program like popen, but with stderr, and pid, too. You might
|
4
|
+
# also want to use this if you want to bypass the shell. (By passing multiple
|
5
|
+
# args, which IO#popen does not allow)
|
6
|
+
#
|
7
|
+
# Usage:
|
8
|
+
# require "open4"
|
9
|
+
#
|
10
|
+
# stdin, stdout, stderr, pid = Open4.popen4('nroff -man')
|
11
|
+
# or
|
12
|
+
# include Open4
|
13
|
+
# stdin, stdout, stderr, pid = popen4('nroff -man')
|
14
|
+
|
15
|
+
module Open4
|
16
|
+
#--{{{
|
17
|
+
#[stdin, stdout, stderr, pid] = popen4(command);
|
18
|
+
def popen4(*cmd)
|
19
|
+
#--{{{
|
20
|
+
pw = IO::pipe # pipe[0] for read, pipe[1] for write
|
21
|
+
pr = IO::pipe
|
22
|
+
pe = IO::pipe
|
23
|
+
|
24
|
+
verbose = $VERBOSE
|
25
|
+
begin
|
26
|
+
$VERBOSE = nil # shut up warning about forking in threads, world writable
|
27
|
+
# dirs, etc
|
28
|
+
cid =
|
29
|
+
fork{
|
30
|
+
# child
|
31
|
+
pw[1].close
|
32
|
+
STDIN.reopen(pw[0])
|
33
|
+
pw[0].close
|
34
|
+
|
35
|
+
pr[0].close
|
36
|
+
STDOUT.reopen(pr[1])
|
37
|
+
pr[1].close
|
38
|
+
|
39
|
+
pe[0].close
|
40
|
+
STDERR.reopen(pe[1])
|
41
|
+
pe[1].close
|
42
|
+
|
43
|
+
STDOUT.sync = true
|
44
|
+
STDERR.sync = true
|
45
|
+
|
46
|
+
exec(*cmd)
|
47
|
+
}
|
48
|
+
ensure
|
49
|
+
$VERBOSE = verbose
|
50
|
+
end
|
51
|
+
|
52
|
+
pw[0].close
|
53
|
+
pr[1].close
|
54
|
+
pe[1].close
|
55
|
+
pi = [pw[1], pr[0], pe[0]]
|
56
|
+
pw[1].sync = true
|
57
|
+
if defined? yield
|
58
|
+
begin
|
59
|
+
yield(cid, *pi)
|
60
|
+
return(Process::waitpid2(cid).last)
|
61
|
+
ensure
|
62
|
+
pi.each{|p| p.close unless p.closed?}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
[cid, pw[1], pr[0], pe[0]]
|
66
|
+
#--}}}
|
67
|
+
end
|
68
|
+
alias open4 popen4
|
69
|
+
module_function :popen4
|
70
|
+
module_function :open4
|
71
|
+
#--}}}
|
72
|
+
end
|
73
|
+
|
74
|
+
if $0 == __FILE__
|
75
|
+
status = Open4::popen4('sh'){|cid,i,o,e|i.puts 'echo 42';i.close; puts o.read;}
|
76
|
+
p [status]
|
77
|
+
p status.exitstatus
|
78
|
+
p status == 0
|
79
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
|
2
|
+
module Test
|
3
|
+
|
4
|
+
module Unit
|
5
|
+
|
6
|
+
class TestCase
|
7
|
+
require 'open4'
|
8
|
+
def run_app(app, *args)
|
9
|
+
cmd = [app, args].flatten.join(" ")
|
10
|
+
out = nil
|
11
|
+
err = nil
|
12
|
+
status = Open4.popen4(cmd) { |cid, stdin, stdout, stderr|
|
13
|
+
out = stdout.read
|
14
|
+
err = stderr.read
|
15
|
+
stdin.close
|
16
|
+
}
|
17
|
+
[out, err, status]
|
18
|
+
end
|
19
|
+
|
20
|
+
def assert_success(app, *args)
|
21
|
+
args.compact!
|
22
|
+
out, err, status = run_app(app, args)
|
23
|
+
assert_equal(true, status.success?,
|
24
|
+
"Failure running #{[app,args].delete_if { |i| i.empty? }.join(" ")} "+
|
25
|
+
"with error(s):\n => stderr: '#{err}'\n => stdout: '#{out}'.")
|
26
|
+
yield(out, err, status) if block_given?
|
27
|
+
end
|
28
|
+
|
29
|
+
def assert_failure(app, *args)
|
30
|
+
out, err, status = run_app(app, args)
|
31
|
+
assert_equal(false, status.success?,
|
32
|
+
"No failure running #{[app,args].delete_if { |i| i.empty? }.join(" ")}.")
|
33
|
+
yield(out, err, status) if block_given?
|
34
|
+
end
|
35
|
+
|
36
|
+
def assert_coredump(app, *args)
|
37
|
+
out, err, status = run_app(app, args)
|
38
|
+
assert_equal(true, status.coredump?,
|
39
|
+
"Running #{[app,args].delete_if { |i| i.empty? }.join(" ")} did not coredump.")
|
40
|
+
yield(out, err, status) if block_given?
|
41
|
+
end
|
42
|
+
def assert_no_coredump(app, *args)
|
43
|
+
out, err, status = run_app(app, args)
|
44
|
+
assert_equal(false, status.coredump?,
|
45
|
+
"Running #{[app,args].delete_if { |i| i.empty? }.join(" ")} caused coredump.")
|
46
|
+
yield(out, err, status) if block_given?
|
47
|
+
end
|
48
|
+
|
49
|
+
def assert_stopped(app, *args)
|
50
|
+
out, err, status = run_app(app, args)
|
51
|
+
assert_equal(true, status.stopped?,
|
52
|
+
"Running #{[app,args].delete_if { |i| i.empty? }.join(" ")} not stopped.")
|
53
|
+
yield(out, err, status) if block_given?
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end#module Unit
|
58
|
+
end#module Test
|
metadata
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.8.10
|
3
|
+
specification_version: 1
|
4
|
+
name: CommandLine
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.6.0
|
7
|
+
date: 2005-06-24
|
8
|
+
summary: Tools to facilitate creation of command line applications and flexible parsing of command line options.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: commandline@freeze.org
|
12
|
+
homepage: http://rubyforge.org/projects/optionparser/
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire: commandline
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
-
|
22
|
+
- ">"
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 0.0.0
|
25
|
+
version:
|
26
|
+
platform: ruby
|
27
|
+
authors:
|
28
|
+
- Jim Freeze
|
29
|
+
files:
|
30
|
+
- docs/index.html
|
31
|
+
- lib/commandline
|
32
|
+
- lib/commandline.rb
|
33
|
+
- lib/open4.rb
|
34
|
+
- lib/test
|
35
|
+
- lib/commandline/application
|
36
|
+
- lib/commandline/application.rb
|
37
|
+
- lib/commandline/optionparser
|
38
|
+
- lib/commandline/optionparser.rb
|
39
|
+
- lib/commandline/text
|
40
|
+
- lib/commandline/utils.rb
|
41
|
+
- lib/commandline/optionparser/option.rb
|
42
|
+
- lib/commandline/optionparser/optiondata.rb
|
43
|
+
- lib/commandline/optionparser/optionparser.rb
|
44
|
+
- lib/commandline/text/format.rb
|
45
|
+
- lib/test/unit
|
46
|
+
- lib/test/unit/systemtest.rb
|
47
|
+
- README
|
48
|
+
- LICENSE
|
49
|
+
test_files: []
|
50
|
+
rdoc_options: []
|
51
|
+
extra_rdoc_files:
|
52
|
+
- README
|
53
|
+
- LICENSE
|
54
|
+
executables: []
|
55
|
+
extensions: []
|
56
|
+
requirements: []
|
57
|
+
dependencies: []
|