getopts.rb

Path: lib/getopts.rb
Last Update: Fri Dec 30 14:55:12 +0000 2011
              getopts.rb -
                      $Release Version: $
                      $Revision: 11708 $
                      $Date: 2007-02-13 08:01:19 +0900 (Tue, 13 Feb 2007) $
                      by Yasuo OHBA(SHL Japan Inc. Technology Dept.)

— this is obsolete; use getoptlong

2000-03-21 modified by Minero Aoki <aamine@dp.u-netsurf.ne.jp>

2002-03-05 rewritten by Akinori MUSHA <knu@ruby-lang.org>

Methods

getopts  

Public Instance methods

getopts is obsolete. Use GetoptLong.

[Source]

     # File lib/getopts.rb, line 24
 24: def getopts(single_options, *options)
 25:   boolopts = {}
 26:   valopts = {}
 27: 
 28:   #
 29:   # set defaults
 30:   #
 31:   single_options.scan(/.:?/) do |opt|
 32:     if opt.size == 1
 33:       boolopts[opt] = false
 34:     else
 35:       valopts[opt[0, 1]] = nil
 36:     end
 37:   end if single_options
 38: 
 39:   options.each do |arg|
 40:     opt, val = arg.split(':', 2)
 41: 
 42:     if val
 43:       valopts[opt] = val.empty? ? nil : val
 44:     else
 45:       boolopts[opt] = false
 46:     end
 47:   end
 48: 
 49:   #
 50:   # scan
 51:   #
 52:   c = 0
 53:   argv = ARGV
 54: 
 55:   while arg = argv.shift
 56:     case arg
 57:     when /\A--(.*)/
 58:       if $1.empty?                      # xinit -- -bpp 24
 59:         break
 60:       end
 61: 
 62:       opt, val = $1.split('=', 2)
 63: 
 64:       if opt.size == 1
 65:         argv.unshift arg
 66:         return nil
 67:       elsif valopts.key? opt            # imclean --src +trash
 68:         valopts[opt] = val || argv.shift or return nil
 69:       elsif boolopts.key? opt           # ruby --verbose
 70:         boolopts[opt] = true
 71:       else
 72:         argv.unshift arg
 73:         return nil
 74:       end
 75: 
 76:       c += 1
 77:     when /\A-(.+)/
 78:       opts = $1
 79: 
 80:       until opts.empty?
 81:         opt = opts.slice!(0, 1)
 82: 
 83:         if valopts.key? opt
 84:           val = opts
 85: 
 86:           if val.empty?                        # ruby -e 'p $:'
 87:             valopts[opt] = argv.shift or return nil
 88:           else                         # cc -ohello ...
 89:             valopts[opt] = val
 90:           end
 91: 
 92:           c += 1
 93:           break
 94:         elsif boolopts.key? opt
 95:           boolopts[opt] = true         # ruby -h
 96:           c += 1
 97:         else
 98:           argv.unshift arg
 99:           return nil
100:         end
101:       end
102:     else
103:       argv.unshift arg
104:       break
105:     end
106:   end
107: 
108:   #
109:   # set
110:   #
111:   $OPT = {}
112: 
113:   boolopts.each do |opt, val|
114:     $OPT[opt] = val
115: 
116:     sopt = opt.gsub(/[^A-Za-z0-9_]/, '_')
117:     eval "$OPT_#{sopt} = val"
118:   end
119:   valopts.each do |opt, val|
120:     $OPT[opt] = val
121: 
122:     sopt = opt.gsub(/[^A-Za-z0-9_]/, '_')
123:     eval "$OPT_#{sopt} = val"
124:   end
125: 
126:   c
127: end

[Validate]