getopts.rb

Path: getopts.rb
Last Update: Tue May 24 04:01:17 BST 2005
              getopts.rb -
                      $Release Version: $
                      $Revision: 1.8.2.3 $
                      $Date: 2005/05/24 03:01:17 $
                      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

[Source]

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

Search

Google

Ruby API Docs

Links