diff options
Diffstat (limited to 'lib/un.rb')
| -rw-r--r-- | lib/un.rb | 84 |
1 files changed, 67 insertions, 17 deletions
@@ -22,14 +22,14 @@ # ruby -run -e touch -- [OPTION] FILE # ruby -run -e wait_writable -- [OPTION] FILE # ruby -run -e mkmf -- [OPTION] EXTNAME [OPTION] -# ruby -run -e httpd -- [OPTION] DocumentRoot +# ruby -run -e httpd -- [OPTION] [DocumentRoot] +# ruby -run -e colorize -- [FILE] # ruby -run -e help [COMMAND] require "fileutils" require "optparse" module FileUtils -# @fileutils_label = "" @fileutils_output = $stdout end @@ -47,7 +47,7 @@ def setup(options = "", *long_options) end long_options.each do |s| opt_name, arg_name = s.split(/(?=[\s=])/, 2) - opt_name.sub!(/\A--/, '') + 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 @@ -78,17 +78,19 @@ end # # -p preserve file attributes if possible # -r copy recursively +# -l make hard link instead of copying (implies -r) # -v verbose # def cp - setup("pr") do |argv, options| + setup("prl") do |argv, options| cmd = "cp" cmd += "_r" if options.delete :r + cmd = "cp_lr" if options.delete :l options[:preserve] = true if options.delete :p dest = argv.pop argv = argv[0] if argv.size == 1 - FileUtils.send cmd, argv, dest, options + FileUtils.__send__ cmd, argv, dest, **options end end @@ -109,7 +111,7 @@ def ln options[:force] = true if options.delete :f dest = argv.pop argv = argv[0] if argv.size == 1 - FileUtils.send cmd, argv, dest, options + FileUtils.__send__ cmd, argv, dest, **options end end @@ -125,7 +127,7 @@ def mv setup do |argv, options| dest = argv.pop argv = argv[0] if argv.size == 1 - FileUtils.mv argv, dest, options + FileUtils.mv argv, dest, **options end end @@ -144,7 +146,7 @@ def rm cmd = "rm" cmd += "_r" if options.delete :r options[:force] = true if options.delete :f - FileUtils.send cmd, argv, options + FileUtils.__send__ cmd, argv, **options end end @@ -161,7 +163,7 @@ def mkdir setup("p") do |argv, options| cmd = "mkdir" cmd += "_p" if options.delete :p - FileUtils.send cmd, argv, options + FileUtils.__send__ cmd, argv, **options end end @@ -177,7 +179,7 @@ end def rmdir setup("p") do |argv, options| options[:parents] = true if options.delete :p - FileUtils.rmdir argv, options + FileUtils.rmdir argv, **options end end @@ -202,7 +204,7 @@ def install (group = options.delete :g) and options[:group] = group dest = argv.pop argv = argv[0] if argv.size == 1 - FileUtils.install argv, dest, options + FileUtils.install argv, dest, **options end end @@ -218,7 +220,7 @@ def chmod setup do |argv, options| mode = argv.shift mode = /\A\d/ =~ mode ? mode.oct : mode - FileUtils.chmod mode, argv, options + FileUtils.chmod mode, argv, **options end end @@ -232,7 +234,7 @@ end def touch setup do |argv, options| - FileUtils.touch argv, options + FileUtils.touch argv, **options end end @@ -253,7 +255,7 @@ def wait_writable wait = (wait = options[:w]) ? Float(wait) : 0.2 argv.each do |file| begin - open(file, "r+b") + File.open(file, "r+b") {} rescue Errno::ENOENT break rescue Errno::EACCES => e @@ -304,7 +306,7 @@ end ## # Run WEBrick HTTP server. # -# ruby -run -e httpd -- [OPTION] DocumentRoot +# ruby -run -e httpd -- [OPTION] [DocumentRoot] # # --bind-address=ADDR address to bind # --port=NUM listening port number @@ -313,6 +315,8 @@ end # --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 @@ -321,9 +325,14 @@ end 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, options| - require 'webrick' + begin + require 'webrick' + rescue LoadError + abort "webrick is not found. You may need to `gem install webrick` to install webrick." + end opt = options[:RequestTimeout] and options[:RequestTimeout] = opt.to_i [:Port, :MaxClients].each do |name| opt = options[name] and (options[name] = Integer(opt)) rescue nil @@ -339,6 +348,21 @@ def httpd end options[:Port] ||= 8080 # HTTP Alternate options[:DocumentRoot] = argv.shift || '.' + s = nil + options[:StartCallback] = proc { + logger = s.logger + logger.info("To access this server, open this URL in a browser:") + s.listeners.each do |listener| + if options[:SSLEnable] + addr = listener.addr + addr[3] = "127.0.0.1" if addr[3] == "0.0.0.0" + addr[3] = "::1" if addr[3] == "::" + logger.info(" https://#{Addrinfo.new(addr).inspect_sockaddr}") + else + logger.info(" http://#{listener.connect_address.inspect_sockaddr}") + end + end + } s = WEBrick::HTTPServer.new(options) shut = proc {s.shutdown} siglist = %w"TERM QUIT" @@ -352,6 +376,29 @@ def httpd end ## +# Colorize ruby code. +# +# ruby -run -e colorize -- [FILE] +# + +def colorize + begin + require "irb/color" + rescue LoadError + raise "colorize requires irb 1.1.0 or later" + end + setup do |argv, | + if argv.empty? + puts IRB::Color.colorize_code STDIN.read + return + end + argv.each do |file| + puts IRB::Color.colorize_code File.read(file) + end + end +end + +## # Display help message. # # ruby -run -e help [COMMAND] @@ -364,6 +411,9 @@ def help end module UN # :nodoc: + + VERSION = "0.3.0" + module_function def help(argv, output: $stdout) all = argv.empty? @@ -374,7 +424,7 @@ module UN # :nodoc: messages = {} store = proc {|msg| messages[cmd] = msg} end - open(__FILE__) do |me| + File.open(__FILE__) do |me| while me.gets("##\n") if help = me.gets("\n\n") if all or argv.include?(cmd = help[/^#\s*ruby\s.*-e\s+(\w+)/, 1]) |
