mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 7234f04b42
			
		
	
	
		7234f04b42
		
	
	
	
	
		
			
			* sample/optparse/opttest.rb: adjust indent and block stypes. use do/end wholly, put spaces around operators, and deep indent in parentheses. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42099 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			125 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable file
		
	
	
	
	
| #!/usr/bin/ruby -I.
 | |
| 
 | |
| require 'optparse'
 | |
| require 'optparse/time'
 | |
| require 'pp'
 | |
| 
 | |
| # keywords
 | |
| CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary]
 | |
| CODE_ALIASES = {"jis" => "iso-2022-jp", "sjis" => "shift_jis"}
 | |
| POSSIBLE_CODES = "(#{(CODES+CODE_ALIASES.keys).join(',')})"
 | |
| 
 | |
| ARGV.options do
 | |
|   |opts|
 | |
|   opts.banner << " argv..."
 | |
| 
 | |
|   # separator
 | |
|   opts.on_tail
 | |
|   opts.on_tail("common options:")
 | |
| 
 | |
|   # no argument, shows at tail
 | |
|   opts.on_tail("--help", "show this message") do
 | |
|     puts opts
 | |
|     exit
 | |
|   end
 | |
| 
 | |
|   # mandatory argument
 | |
|   opts.on("-r", "--require=LIBRARY", String,
 | |
|           "require the LIBRARY, before",
 | |
|           "executing your script") do
 | |
|     |lib|
 | |
|     @library = lib
 | |
|   end
 | |
| 
 | |
|   # optional argument
 | |
|   opts.on("-i", "--inplace=[EXTENSION]",
 | |
|           "edit ARGV files in place", # multiline description
 | |
|           "(make backup if EXTENSION supplied)") do
 | |
|     |inplace|
 | |
|     @inplace = inplace || ''
 | |
|   end
 | |
| 
 | |
|   opts.on("-N=[NUM]", Integer) do
 | |
|     |num|
 | |
|     @number = num
 | |
|   end
 | |
| 
 | |
|   # additional class
 | |
|   opts.on("-t", "--[no-]time[=TIME]", Time, "it's the time") do
 | |
|     |time|
 | |
|     @time = time
 | |
|   end
 | |
| 
 | |
|   # limit argument syntax
 | |
|   opts.on("-[0-7]", "-F", "--irs=[OCTAL]", OptionParser::OctalInteger,
 | |
|           "specify record separator", "(\\0, if no argument)") do
 | |
|     |irs|
 | |
|     @irs = irs
 | |
|   end
 | |
| 
 | |
|   # boolean switch(default true)
 | |
|   @exec = true
 | |
|   opts.on("-n", "--no-exec[=FLAG]", TrueClass, "not really execute") do
 | |
|     |exec|
 | |
|     @exec = exec
 | |
|   end
 | |
| 
 | |
|   # array
 | |
|   opts.on("-a", "--list[=LIST,LIST]", Array, "list") do
 | |
|     |list|
 | |
|     @list = list
 | |
|   end
 | |
| 
 | |
|   # fixed size array
 | |
|   opts.on("--pair[=car,cdr]", Array, "pair") do
 | |
|     |x, y|
 | |
|     @x = x
 | |
|     @y = y
 | |
|   end
 | |
| 
 | |
|   # keyword completion
 | |
|   opts.on("--code=CODE", CODES, CODE_ALIASES, "select coding system",
 | |
|           "("+CODES.join(",")+",", " "+CODE_ALIASES.keys.join(",")+")") do
 | |
|     |c|
 | |
|     @code = c
 | |
|   end
 | |
| 
 | |
|   # optional argument with keyword completion
 | |
|   opts.on("--type[=TYPE]", [:text, :binary], "select type(text, binary)") do
 | |
|     |t|
 | |
|     @type = t
 | |
|   end
 | |
| 
 | |
|   # boolean switch with optional argument(default false)
 | |
|   opts.on("-v", "--[no-]verbose=[FLAG]", "run verbosely") do
 | |
|     |v|
 | |
|     @verbose = v
 | |
|   end
 | |
| 
 | |
|   # easy way, set local variable
 | |
|   opts.on("-q", "--quit", "quit when ARGV is empty") do
 | |
|     |q|
 | |
|     @quit = q
 | |
|   end
 | |
| 
 | |
|   # adding on the fly
 | |
|   opts.on("--add=SWITCH=[ARG]", "add option on the fly", /\A(\w+)(?:=.+)?\Z/) do
 | |
|     |opt, var|
 | |
|     opts.on("--#{opt}", "added in runtime", &eval("proc {|x|@#{var}=x}"))
 | |
|   end
 | |
| 
 | |
|   opts.on_head("specific options:")
 | |
| 
 | |
|   # no argument
 | |
|   opts.on_tail("--version", "show version") do
 | |
|     puts OptionParser::Version.join('.')
 | |
|     exit
 | |
|   end
 | |
|   opts.parse!
 | |
| end
 | |
| 
 | |
| pp self
 | |
| begin print ARGV.options; exit end if @quit
 | |
| ARGV.options = nil		# no more parse
 | |
| puts "ARGV = #{ARGV.join(' ')}" if !ARGV.empty?
 | |
| #opts.variable.each {|sym| puts "#{sym} = #{opts.send(sym).inspect}"}
 |