Top Level Namespace
Defined Under Namespace
Instance Method Summary collapse
-
#chmod ⇒ Object
Change the mode of each FILE to OCTAL-MODE.
-
#cp ⇒ Object
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.
-
#help ⇒ Object
Display help message.
-
#httpd ⇒ Object
Run WEBrick HTTP server.
-
#install ⇒ Object
Copy SOURCE to DEST.
-
#ln ⇒ Object
Create a link to the specified TARGET with LINK_NAME.
-
#mkdir ⇒ Object
Create the DIR, if they do not already exist.
-
#mkmf ⇒ Object
Create makefile using mkmf.
-
#mv ⇒ Object
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
-
#rm ⇒ Object
Remove the FILE.
-
#rmdir ⇒ Object
Remove the DIR.
-
#setup(options = "", *long_options) {|argv, opt_hash| ... } ⇒ Object
:nodoc:.
-
#touch ⇒ Object
Update the access and modification times of each FILE to the current time.
-
#wait_writable ⇒ Object
Wait until the file becomes writable.
Instance Method Details
#chmod ⇒ Object
Change the mode of each FILE to OCTAL-MODE.
ruby -run -e chmod -- [OPTION] OCTAL-MODE FILE
-v verbose
217 218 219 220 221 222 223 |
# File 'lib/un.rb', line 217 def chmod setup do |argv, | mode = argv.shift mode = /\A\d/ =~ mode ? mode.oct : mode FileUtils.chmod mode, argv, ** end end |
#cp ⇒ Object
Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY
ruby -run -e cp -- [OPTION] SOURCE DEST
-p preserve file attributes if possible
-r copy recursively
-v verbose
84 85 86 87 88 89 90 91 92 93 |
# File 'lib/un.rb', line 84 def cp setup("pr") do |argv, | cmd = "cp" cmd += "_r" if .delete :r [:preserve] = true if .delete :p dest = argv.pop argv = argv[0] if argv.size == 1 FileUtils.__send__ cmd, argv, dest, ** end end |
#help ⇒ Object
Display help message.
ruby -run -e help [COMMAND]
367 368 369 370 371 |
# File 'lib/un.rb', line 367 def help setup do |argv,| UN.help(argv) end end |
#httpd ⇒ Object
Run WEBrick HTTP server.
ruby -run -e httpd -- [OPTION] [DocumentRoot]
--bind-address=ADDR address to bind
--port=NUM listening port number
--max-clients=MAX max number of simultaneous clients
--temp-dir=DIR temporary directory
--do-not-reverse-lookup disable reverse lookup
--request-timeout=SECOND request timeout in seconds
--http-version=VERSION HTTP version
--server-name=NAME name of the server host
--server-software=NAME name and version of the server
--ssl-certificate=CERT The SSL certificate file for the server
--ssl-private-key=KEY The SSL private key file for the server certificate
-v verbose
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 |
# File 'lib/un.rb', line 323 def httpd setup("", "BindAddress=ADDR", "Port=PORT", "MaxClients=NUM", "TempDir=DIR", "DoNotReverseLookup", "RequestTimeout=SECOND", "HTTPVersion=VERSION", "ServerName=NAME", "ServerSoftware=NAME", "SSLCertificate=CERT", "SSLPrivateKey=KEY") do |argv, | begin require 'webrick' rescue LoadError abort "webrick is not found. You may need to `gem install webrick` to install webrick." end opt = [:RequestTimeout] and [:RequestTimeout] = opt.to_i [:Port, :MaxClients].each do |name| opt = [name] and ([name] = Integer(opt)) rescue nil end if cert = [:SSLCertificate] key = [:SSLPrivateKey] or raise "--ssl-private-key option must also be given" require 'webrick/https' [:SSLEnable] = true [:SSLCertificate] = OpenSSL::X509::Certificate.new(File.read(cert)) [:SSLPrivateKey] = OpenSSL::PKey.read(File.read(key)) [:Port] ||= 8443 # HTTPS Alternate end [:Port] ||= 8080 # HTTP Alternate [:DocumentRoot] = argv.shift || '.' s = WEBrick::HTTPServer.new() shut = proc {s.shutdown} siglist = %w"TERM QUIT" siglist.concat(%w"HUP INT") if STDIN.tty? siglist &= Signal.list.keys siglist.each do |sig| Signal.trap(sig, shut) end s.start end end |
#install ⇒ Object
Copy SOURCE to DEST.
ruby -run -e install -- [OPTION] SOURCE DEST
-p apply access/modification times of SOURCE files to
corresponding destination files
-m set permission mode (as in chmod), instead of 0755
-o set owner user id, instead of the current owner
-g set owner group id, instead of the current group
-v verbose
197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/un.rb', line 197 def install setup("pm:o:g:") do |argv, | (mode = .delete :m) and [:mode] = /\A\d/ =~ mode ? mode.oct : mode [:preserve] = true if .delete :p (owner = .delete :o) and [:owner] = owner (group = .delete :g) and [:group] = group dest = argv.pop argv = argv[0] if argv.size == 1 FileUtils.install argv, dest, ** end end |
#ln ⇒ Object
Create a link to the specified TARGET with LINK_NAME.
ruby -run -e ln -- [OPTION] TARGET LINK_NAME
-s make symbolic links instead of hard links
-f remove existing destination files
-v verbose
105 106 107 108 109 110 111 112 113 114 |
# File 'lib/un.rb', line 105 def ln setup("sf") do |argv, | cmd = "ln" cmd += "_s" if .delete :s [:force] = true if .delete :f dest = argv.pop argv = argv[0] if argv.size == 1 FileUtils.__send__ cmd, argv, dest, ** end end |
#mkdir ⇒ Object
Create the DIR, if they do not already exist.
ruby -run -e mkdir -- [OPTION] DIR
-p no error if existing, make parent directories as needed
-v verbose
160 161 162 163 164 165 166 |
# File 'lib/un.rb', line 160 def mkdir setup("p") do |argv, | cmd = "mkdir" cmd += "_p" if .delete :p FileUtils.__send__ cmd, argv, ** end end |
#mkmf ⇒ Object
Create makefile using mkmf.
ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION]
-d ARGS run dir_config
-h ARGS run have_header
-l ARGS run have_library
-f ARGS run have_func
-v ARGS run have_var
-t ARGS run have_type
-m ARGS run have_macro
-c ARGS run have_const
--vendor install to vendor_ruby
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 |
# File 'lib/un.rb', line 288 def mkmf setup("d:h:l:f:v:t:m:c:", "vendor") do |argv, | require 'mkmf' opt = [:d] and opt.split(/:/).each {|n| dir_config(*n.split(/,/))} opt = [:h] and opt.split(/:/).each {|n| have_header(*n.split(/,/))} opt = [:l] and opt.split(/:/).each {|n| have_library(*n.split(/,/))} opt = [:f] and opt.split(/:/).each {|n| have_func(*n.split(/,/))} opt = [:v] and opt.split(/:/).each {|n| have_var(*n.split(/,/))} opt = [:t] and opt.split(/:/).each {|n| have_type(*n.split(/,/))} opt = [:m] and opt.split(/:/).each {|n| have_macro(*n.split(/,/))} opt = [:c] and opt.split(/:/).each {|n| have_const(*n.split(/,/))} $configure_args["--vendor"] = true if [:vendor] create_makefile(*argv) end end |
#mv ⇒ Object
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
ruby -run -e mv -- [OPTION] SOURCE DEST
-v verbose
124 125 126 127 128 129 130 |
# File 'lib/un.rb', line 124 def mv setup do |argv, | dest = argv.pop argv = argv[0] if argv.size == 1 FileUtils.mv argv, dest, ** end end |
#rm ⇒ Object
Remove the FILE
ruby -run -e rm -- [OPTION] FILE
-f ignore nonexistent files
-r remove the contents of directories recursively
-v verbose
142 143 144 145 146 147 148 149 |
# File 'lib/un.rb', line 142 def rm setup("fr") do |argv, | cmd = "rm" cmd += "_r" if .delete :r [:force] = true if .delete :f FileUtils.__send__ cmd, argv, ** end end |
#rmdir ⇒ Object
Remove the DIR.
ruby -run -e rmdir -- [OPTION] DIR
-p remove DIRECTORY and its ancestors.
-v verbose
177 178 179 180 181 182 |
# File 'lib/un.rb', line 177 def rmdir setup("p") do |argv, | [:parents] = true if .delete :p FileUtils.rmdir argv, ** end end |
#setup(options = "", *long_options) {|argv, opt_hash| ... } ⇒ Object
:nodoc:
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/un.rb', line 37 def setup( = "", *) caller = caller_locations(1, 1)[0].label opt_hash = {} argv = [] OptionParser.new do |o| .scan(/.:?/) do |s| opt_name = s.delete(":").intern o.on("-" + s.tr(":", " ")) do |val| opt_hash[opt_name] = val end end .each do |s| opt_name, arg_name = s.split(/(?=[\s=])/, 2) opt_name.delete_prefix!('--') s = "--#{opt_name.gsub(/([A-Z]+|[a-z])([A-Z])/, '\1-\2').downcase}#{arg_name}" puts "#{opt_name}=>#{s}" if $DEBUG opt_name = opt_name.intern o.on(s) do |val| opt_hash[opt_name] = val end end o.on("-v") do opt_hash[:verbose] = true end o.on("--help") do UN.help([caller]) exit end o.order!(ARGV) do |x| if /[*?\[{]/ =~ x argv.concat(Dir[x]) else argv << x end end end yield argv, opt_hash end |
#touch ⇒ Object
Update the access and modification times of each FILE to the current time.
ruby -run -e touch -- [OPTION] FILE
-v verbose
233 234 235 236 237 |
# File 'lib/un.rb', line 233 def touch setup do |argv, | FileUtils.touch argv, ** end end |
#wait_writable ⇒ Object
Wait until the file becomes writable.
ruby -run -e wait_writable -- [OPTION] FILE
-n RETRY count to retry
-w SEC each wait time in seconds
-v verbose
249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 |
# File 'lib/un.rb', line 249 def wait_writable setup("n:w:v") do |argv, | verbose = [:verbose] n = [:n] and n = Integer(n) wait = (wait = [:w]) ? Float(wait) : 0.2 argv.each do |file| begin open(file, "r+b") rescue Errno::ENOENT break rescue Errno::EACCES => e raise if n and (n -= 1) <= 0 if verbose puts e STDOUT.flush end sleep wait retry end end end end |