alib 0.4.0 → 0.5.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/a.rb +12 -1
- data/{alib-0.4.0.gem → alib-0.5.0.gem} +0 -0
- data/lib/{alib-0.4.0.rb → alib-0.5.0.rb} +17 -40
- data/lib/alib-0.5.0/attributes-3.2.0.rb +54 -0
- data/lib/alib-0.5.0/attributes.rb +54 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/autohash.rb +0 -0
- data/lib/alib-0.5.0/binding_of_caller.rb +70 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/bsearch.rb +0 -0
- data/lib/alib-0.5.0/classmethods.rb +39 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/configfile.rb +0 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/find2.rb +0 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/listfile.rb +0 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/logging.rb +71 -7
- data/lib/{alib-0.4.0 → alib-0.5.0}/main.rb +416 -14
- data/lib/alib-0.5.0/main.rb.bak +1029 -0
- data/lib/alib-0.5.0/open4-0.9.1.rb +379 -0
- data/lib/alib-0.5.0/open4.rb +379 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/orderedautohash.rb +0 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/orderedhash.rb +0 -0
- data/lib/alib-0.5.0/prototype-0.3.0.rb +200 -0
- data/lib/alib-0.5.0/prototype.rb +200 -0
- data/lib/alib-0.5.0/stdext.rb +174 -0
- data/lib/{alib-0.4.0 → alib-0.5.0}/util.rb +452 -51
- data/lib/alib.rb +17 -40
- metadata +45 -32
- data/b.rb +0 -1
- data/build +0 -0
- data/install +0 -143
- data/lib/alib-0.4.0/open4.rb +0 -175
data/lib/alib.rb
CHANGED
@@ -3,9 +3,7 @@
|
|
3
3
|
#
|
4
4
|
module ALib
|
5
5
|
#--{{{
|
6
|
-
VERSION = '0.
|
7
|
-
|
8
|
-
def self.version() VERSION end
|
6
|
+
VERSION = '0.5.0'
|
9
7
|
|
10
8
|
require 'pathname'
|
11
9
|
require 'socket'
|
@@ -21,14 +19,19 @@ module ALib
|
|
21
19
|
require 'fcntl'
|
22
20
|
require 'uri'
|
23
21
|
require 'net/http'
|
22
|
+
require 'thread'
|
24
23
|
|
25
|
-
|
26
|
-
|
24
|
+
class ::Object
|
25
|
+
Alib = ALib
|
26
|
+
def alib() ALib end
|
27
|
+
end
|
27
28
|
|
28
29
|
LIBDIR = 'alib-%s/' % VERSION
|
29
30
|
|
30
|
-
|
31
|
+
require LIBDIR + 'classmethods'
|
32
|
+
require LIBDIR + 'stdext'
|
31
33
|
|
34
|
+
AUTOLOAD = {
|
32
35
|
'Util' => 'util',
|
33
36
|
|
34
37
|
'Logging' => 'logging',
|
@@ -54,51 +57,25 @@ module ALib
|
|
54
57
|
'AbstractMain' => 'main',
|
55
58
|
'SimpleMain' => 'main',
|
56
59
|
'ConfigurableMain' => 'main',
|
57
|
-
|
58
60
|
}
|
59
61
|
|
60
62
|
AUTOLOAD.each{|const, basename| autoload const.to_s, LIBDIR + basename.to_s}
|
61
63
|
|
62
|
-
|
64
|
+
SINGLETON_CLASS =
|
63
65
|
class << self
|
64
66
|
self
|
65
67
|
end
|
66
68
|
|
67
|
-
AUTOLOAD.each{ |const, m|
|
68
|
-
|
69
|
-
begin
|
70
|
-
require 'open4'
|
71
|
-
rescue LoadError
|
72
|
-
require LIBDIR + 'open4'
|
73
|
-
end
|
69
|
+
AUTOLOAD.each{ |const, m| SINGLETON_CLASS.module_eval{define_method(m){ALib.send 'const_get', const}} unless Alib.respond_to? m}
|
74
70
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
require LIBDIR +
|
80
|
-
|
81
|
-
end
|
82
|
-
def simple_main &b
|
83
|
-
#--{{{
|
84
|
-
b ? Class::new(ALib::SimpleMain, &b) : ALib::SimpleMain
|
85
|
-
#--}}}
|
86
|
-
end
|
87
|
-
alias_method 'main', 'simple_main'
|
88
|
-
alias_method 'smain', 'simple_main'
|
89
|
-
def configurable_main &b
|
90
|
-
#--{{{
|
91
|
-
b ? Class::new(ALib::ConfigurableMain, &b) : ALib::ConfigurableMain
|
92
|
-
#--}}}
|
71
|
+
%w( open4 attributes prototype binding_of_caller ).each do |lib|
|
72
|
+
begin
|
73
|
+
require lib
|
74
|
+
rescue LoadError
|
75
|
+
require LIBDIR + lib
|
76
|
+
$LOADED_FEATURES << File.basename(lib)
|
93
77
|
end
|
94
|
-
alias_method 'cmain', 'configurable_main'
|
95
|
-
#--}}}
|
96
78
|
end
|
97
79
|
#--}}}
|
98
80
|
end
|
99
81
|
|
100
|
-
Alib = ALib
|
101
|
-
|
102
|
-
class Object
|
103
|
-
def alib() Alib end
|
104
|
-
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.
|
2
|
+
rubygems_version: 0.9.0
|
3
3
|
specification_version: 1
|
4
4
|
name: alib
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date:
|
6
|
+
version: 0.5.0
|
7
|
+
date: 2007-02-18 00:00:00 -07:00
|
8
8
|
summary: alib
|
9
9
|
require_paths:
|
10
|
-
|
10
|
+
- lib
|
11
11
|
email: ara.t.howard@noaa.gov
|
12
12
|
homepage: http://codeforpeople.com/lib/ruby/alib/
|
13
13
|
rubyforge_project:
|
@@ -18,43 +18,56 @@ bindir: bin
|
|
18
18
|
has_rdoc: false
|
19
19
|
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
20
|
requirements:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: ruby
|
27
26
|
signing_key:
|
28
27
|
cert_chain:
|
28
|
+
post_install_message:
|
29
29
|
authors:
|
30
|
-
|
30
|
+
- Ara T. Howard
|
31
31
|
files:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
32
|
+
- a.rb
|
33
|
+
- gemspec.rb
|
34
|
+
- alib-0.5.0.gem
|
35
|
+
- install.rb
|
36
|
+
- lib
|
37
|
+
- lib/alib.rb
|
38
|
+
- lib/alib-0.5.0
|
39
|
+
- lib/alib-0.5.0/logging.rb
|
40
|
+
- lib/alib-0.5.0/bsearch.rb
|
41
|
+
- lib/alib-0.5.0/open4-0.9.1.rb
|
42
|
+
- lib/alib-0.5.0/stdext.rb
|
43
|
+
- lib/alib-0.5.0/attributes.rb
|
44
|
+
- lib/alib-0.5.0/util.rb
|
45
|
+
- lib/alib-0.5.0/prototype.rb
|
46
|
+
- lib/alib-0.5.0/listfile.rb
|
47
|
+
- lib/alib-0.5.0/binding_of_caller.rb
|
48
|
+
- lib/alib-0.5.0/prototype-0.3.0.rb
|
49
|
+
- lib/alib-0.5.0/configfile.rb
|
50
|
+
- lib/alib-0.5.0/main.rb.bak
|
51
|
+
- lib/alib-0.5.0/attributes-3.2.0.rb
|
52
|
+
- lib/alib-0.5.0/open4.rb
|
53
|
+
- lib/alib-0.5.0/autohash.rb
|
54
|
+
- lib/alib-0.5.0/orderedautohash.rb
|
55
|
+
- lib/alib-0.5.0/classmethods.rb
|
56
|
+
- lib/alib-0.5.0/main.rb
|
57
|
+
- lib/alib-0.5.0/orderedhash.rb
|
58
|
+
- lib/alib-0.5.0/find2.rb
|
59
|
+
- lib/alib-0.5.0.rb
|
54
60
|
test_files: []
|
61
|
+
|
55
62
|
rdoc_options: []
|
63
|
+
|
56
64
|
extra_rdoc_files: []
|
65
|
+
|
57
66
|
executables: []
|
67
|
+
|
58
68
|
extensions: []
|
69
|
+
|
59
70
|
requirements: []
|
60
|
-
|
71
|
+
|
72
|
+
dependencies: []
|
73
|
+
|
data/build
DELETED
File without changes
|
data/install
DELETED
@@ -1,143 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rbconfig'
|
3
|
-
require 'find'
|
4
|
-
require 'ftools'
|
5
|
-
require 'tempfile'
|
6
|
-
include Config
|
7
|
-
|
8
|
-
LIBDIR = "lib"
|
9
|
-
LIBDIR_MODE = 0644
|
10
|
-
|
11
|
-
BINDIR = "bin"
|
12
|
-
BINDIR_MODE = 0755
|
13
|
-
|
14
|
-
|
15
|
-
$srcdir = CONFIG["srcdir"]
|
16
|
-
$version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
|
17
|
-
$libdir = File.join(CONFIG["libdir"], "ruby", $version)
|
18
|
-
$archdir = File.join($libdir, CONFIG["arch"])
|
19
|
-
$site_libdir = $:.find {|x| x =~ /site_ruby$/}
|
20
|
-
$bindir = CONFIG["bindir"]
|
21
|
-
$ruby_install_name = CONFIG['ruby_install_name'] || CONFIG['RUBY_INSTALL_NAME']
|
22
|
-
$ruby = File.join($bindir, $ruby_install_name || 'ruby')
|
23
|
-
|
24
|
-
if !$site_libdir
|
25
|
-
$site_libdir = File.join($libdir, "site_ruby")
|
26
|
-
elsif $site_libdir !~ %r/#{Regexp.quote($version)}/
|
27
|
-
$site_libdir = File.join($site_libdir, $version)
|
28
|
-
end
|
29
|
-
|
30
|
-
def install_rb(srcdir=nil, destdir=nil, mode=nil, bin=nil)
|
31
|
-
#{{{
|
32
|
-
path = []
|
33
|
-
dir = []
|
34
|
-
Find.find(srcdir) do |f|
|
35
|
-
next unless FileTest.file?(f)
|
36
|
-
next if (f = f[srcdir.length+1..-1]) == nil
|
37
|
-
next if (/CVS$/ =~ File.dirname(f))
|
38
|
-
path.push f
|
39
|
-
dir |= [File.dirname(f)]
|
40
|
-
end
|
41
|
-
for f in dir
|
42
|
-
next if f == "."
|
43
|
-
next if f == "CVS"
|
44
|
-
File::makedirs(File.join(destdir, f))
|
45
|
-
end
|
46
|
-
for f in path
|
47
|
-
next if (/\~$/ =~ f)
|
48
|
-
next if (/^\./ =~ File.basename(f))
|
49
|
-
unless bin
|
50
|
-
File::install(File.join(srcdir, f), File.join(destdir, f), mode, true)
|
51
|
-
else
|
52
|
-
from = File.join(srcdir, f)
|
53
|
-
to = File.join(destdir, f)
|
54
|
-
shebangify(from) do |sf|
|
55
|
-
$deferr.print from, " -> ", File::catname(from, to), "\n"
|
56
|
-
$deferr.printf "chmod %04o %s\n", mode, to
|
57
|
-
File::install(sf, to, mode, false)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
#}}}
|
62
|
-
end
|
63
|
-
def shebangify f
|
64
|
-
#{{{
|
65
|
-
open(f) do |fd|
|
66
|
-
buf = fd.read 42
|
67
|
-
if buf =~ %r/^\s*#\s*!.*ruby/o
|
68
|
-
ftmp = Tempfile::new("#{ $$ }_#{ File::basename(f) }")
|
69
|
-
begin
|
70
|
-
fd.rewind
|
71
|
-
ftmp.puts "#!#{ $ruby }"
|
72
|
-
while((buf = fd.read(8192)))
|
73
|
-
ftmp.write buf
|
74
|
-
end
|
75
|
-
ftmp.close
|
76
|
-
yield ftmp.path
|
77
|
-
ensure
|
78
|
-
ftmp.close!
|
79
|
-
end
|
80
|
-
else
|
81
|
-
yield f
|
82
|
-
end
|
83
|
-
end
|
84
|
-
#}}}
|
85
|
-
end
|
86
|
-
def ARGV.switch
|
87
|
-
#{{{
|
88
|
-
return nil if self.empty?
|
89
|
-
arg = self.shift
|
90
|
-
return nil if arg == '--'
|
91
|
-
if arg =~ /^-(.)(.*)/
|
92
|
-
return arg if $1 == '-'
|
93
|
-
raise 'unknown switch "-"' if $2.index('-')
|
94
|
-
self.unshift "-#{$2}" if $2.size > 0
|
95
|
-
"-#{$1}"
|
96
|
-
else
|
97
|
-
self.unshift arg
|
98
|
-
nil
|
99
|
-
end
|
100
|
-
#}}}
|
101
|
-
end
|
102
|
-
def ARGV.req_arg
|
103
|
-
#{{{
|
104
|
-
self.shift || raise('missing argument')
|
105
|
-
#}}}
|
106
|
-
end
|
107
|
-
|
108
|
-
|
109
|
-
#
|
110
|
-
# main program
|
111
|
-
#
|
112
|
-
|
113
|
-
libdir = $site_libdir
|
114
|
-
bindir = $bindir
|
115
|
-
|
116
|
-
begin
|
117
|
-
while switch = ARGV.switch
|
118
|
-
case switch
|
119
|
-
when '-d', '--destdir'
|
120
|
-
libdir = ARGV.req_arg
|
121
|
-
when '-l', '--libdir'
|
122
|
-
libdir = ARGV.req_arg
|
123
|
-
when '-b', '--bindir'
|
124
|
-
bindir = ARGV.req_arg
|
125
|
-
when '-r', '--ruby'
|
126
|
-
$ruby = ARGV.req_arg
|
127
|
-
else
|
128
|
-
raise "unknown switch #{switch.dump}"
|
129
|
-
end
|
130
|
-
end
|
131
|
-
rescue
|
132
|
-
STDERR.puts $!.to_s
|
133
|
-
STDERR.puts File.basename($0) +
|
134
|
-
" -d <destdir>" +
|
135
|
-
" -l <libdir>" +
|
136
|
-
" -b <bindir>"
|
137
|
-
" -r <ruby>"
|
138
|
-
exit 1
|
139
|
-
end
|
140
|
-
|
141
|
-
install_rb(LIBDIR, libdir, LIBDIR_MODE)
|
142
|
-
install_rb(BINDIR, bindir, BINDIR_MODE, bin=true)
|
143
|
-
|
data/lib/alib-0.4.0/open4.rb
DELETED
@@ -1,175 +0,0 @@
|
|
1
|
-
require 'fcntl'
|
2
|
-
|
3
|
-
module Open4
|
4
|
-
#--{{{
|
5
|
-
def self.version
|
6
|
-
'0.4.0'
|
7
|
-
end
|
8
|
-
|
9
|
-
def popen4(*cmd)
|
10
|
-
#--{{{
|
11
|
-
pw, pr, pe, ps = IO.pipe, IO.pipe, IO.pipe, IO.pipe
|
12
|
-
|
13
|
-
verbose = $VERBOSE
|
14
|
-
begin
|
15
|
-
$VERBOSE = nil
|
16
|
-
ps.last.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC)
|
17
|
-
|
18
|
-
cid = fork {
|
19
|
-
pw.last.close
|
20
|
-
STDIN.reopen pw.first
|
21
|
-
pw.first.close
|
22
|
-
|
23
|
-
pr.first.close
|
24
|
-
STDOUT.reopen pr.last
|
25
|
-
pr.last.close
|
26
|
-
|
27
|
-
pe.first.close
|
28
|
-
STDERR.reopen pe.last
|
29
|
-
pe.last.close
|
30
|
-
|
31
|
-
STDOUT.sync = STDERR.sync = true
|
32
|
-
|
33
|
-
begin
|
34
|
-
exec(*cmd)
|
35
|
-
raise "exec failed!"
|
36
|
-
rescue Exception => e
|
37
|
-
Marshal.dump(e, ps.last)
|
38
|
-
ps.last.flush
|
39
|
-
end
|
40
|
-
ps.last.close unless (ps.last.closed?)
|
41
|
-
exit!
|
42
|
-
}
|
43
|
-
ensure
|
44
|
-
$VERBOSE = verbose
|
45
|
-
end
|
46
|
-
|
47
|
-
[pw.first, pr.last, pe.last, ps.last].each{|fd| fd.close}
|
48
|
-
|
49
|
-
begin
|
50
|
-
e = Marshal.load ps.first
|
51
|
-
raise(Exception === e ? e : "unknown failure!")
|
52
|
-
rescue EOFError # If we get an EOF error, then the exec was successful
|
53
|
-
42
|
54
|
-
end
|
55
|
-
|
56
|
-
pw.last.sync = true
|
57
|
-
|
58
|
-
pi = [pw.last, pr.first, pe.first]
|
59
|
-
|
60
|
-
if defined? yield
|
61
|
-
begin
|
62
|
-
yield(cid, *pi)
|
63
|
-
Process.waitpid2(cid).last
|
64
|
-
ensure
|
65
|
-
pi.each{|fd| fd.close unless fd.closed?}
|
66
|
-
end
|
67
|
-
else
|
68
|
-
[cid, pw.last, pr.first, pe.first]
|
69
|
-
end
|
70
|
-
#--}}}
|
71
|
-
end
|
72
|
-
alias open4 popen4
|
73
|
-
module_function :popen4
|
74
|
-
module_function :open4
|
75
|
-
|
76
|
-
class Error < ::StandardError; end
|
77
|
-
class SpawnError < Error
|
78
|
-
#--{{{
|
79
|
-
attr 'cmd'
|
80
|
-
attr 'status'
|
81
|
-
def exitstatus
|
82
|
-
@status.exitstatus
|
83
|
-
end
|
84
|
-
def initialize cmd, status
|
85
|
-
@cmd, @status = cmd, status
|
86
|
-
super "cmd <#{ cmd }> failed with <#{ exitstatus }>"
|
87
|
-
end
|
88
|
-
#--}}}
|
89
|
-
end
|
90
|
-
def spawn cmd, opts = {}
|
91
|
-
#--{{{
|
92
|
-
getopt = lambda do |*args|
|
93
|
-
keys, default, ignored = args
|
94
|
-
catch('opt') do
|
95
|
-
[keys].flatten.each do |key|
|
96
|
-
[key, key.to_s, key.to_s.intern].each do |key|
|
97
|
-
throw 'opt', opts[key] if opts.has_key?(key)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
default
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
ignore_exit_failure = getopt[ 'ignore_exit_failure', getopt['quiet', false] ]
|
105
|
-
ignore_exec_failure = getopt[ 'ignore_exec_failure', !getopt['raise', true] ]
|
106
|
-
exitstatus = getopt[ %w( exitstatus exit_status status ), 0 ]
|
107
|
-
stdin = getopt[ ['stdin', 'in', '0', 0] ]
|
108
|
-
stdout = getopt[ ['stdout', 'out', '1', 1] ]
|
109
|
-
stderr = getopt[ ['stderr', 'err', '2', 2] ]
|
110
|
-
pid = getopt[ 'pid' ]
|
111
|
-
|
112
|
-
started = false
|
113
|
-
|
114
|
-
status =
|
115
|
-
begin
|
116
|
-
popen4(cmd) do |c, i, o, e|
|
117
|
-
started = true
|
118
|
-
|
119
|
-
if pid.respond_to? '<<'
|
120
|
-
pid << c
|
121
|
-
end
|
122
|
-
|
123
|
-
it = Thread.new(i,stdin) do |i,stdin|
|
124
|
-
if stdin
|
125
|
-
if stdin.respond_to? :each
|
126
|
-
stdin.each{|buf| i << buf}
|
127
|
-
elsif stdin.respond_to? :read
|
128
|
-
i << stdin.read
|
129
|
-
else
|
130
|
-
i << stdin.to_s
|
131
|
-
end
|
132
|
-
end
|
133
|
-
i.close
|
134
|
-
end
|
135
|
-
|
136
|
-
ot = Thread.new(o,stdout){|o,stdout| o.each{|buf| stdout << buf if stdout}}
|
137
|
-
et = Thread.new(e,stderr){|e,stderr| e.each{|buf| stderr << buf if stderr}}
|
138
|
-
|
139
|
-
it.join
|
140
|
-
ot.join if ot
|
141
|
-
et.join if et
|
142
|
-
end
|
143
|
-
rescue
|
144
|
-
raise unless(not started and ignore_exec_failure)
|
145
|
-
end
|
146
|
-
|
147
|
-
raise SpawnError.new(cmd, status) unless
|
148
|
-
(ignore_exit_failure or (status.nil? and ignore_exec_failure) or (status.exitstatus == exitstatus))
|
149
|
-
|
150
|
-
status
|
151
|
-
#--}}}
|
152
|
-
end
|
153
|
-
module_function :spawn
|
154
|
-
|
155
|
-
def background cmd, opts = {}
|
156
|
-
#--{{{
|
157
|
-
require 'thread'
|
158
|
-
q = Queue.new
|
159
|
-
opts['pid'] = opts[:pid] = q
|
160
|
-
thread = Thread.new(cmd, opts){|cmd, opts| spawn cmd, opts}
|
161
|
-
pid = q.pop
|
162
|
-
sc = class << thread; self; end
|
163
|
-
sc.module_eval {
|
164
|
-
define_method(:pid){ pid }
|
165
|
-
define_method(:spawn_status){ @spawn_status ||= value }
|
166
|
-
define_method(:exitstatus){ spawn_status.exitstatus }
|
167
|
-
}
|
168
|
-
thread
|
169
|
-
#--}}}
|
170
|
-
end
|
171
|
-
alias bg background
|
172
|
-
module_function :background
|
173
|
-
module_function :bg
|
174
|
-
#--}}}
|
175
|
-
end
|