== Argument Converters An option can specify that its argument is to be converted from the default \String to an instance of another class. === Contents - {Built-In Argument Converters}[#label-Built-In+Argument+Converters] - {Date}[#label-Date] - {DateTime}[#label-DateTime] - {Time}[#label-Time] - {URI}[#label-URI] - {Shellwords}[#label-Shellwords] - {Integer}[#label-Integer] - {Float}[#label-Float] - {Numeric}[#label-Numeric] - {DecimalInteger}[#label-DecimalInteger] - {OctalInteger}[#label-OctalInteger] - {DecimalNumeric}[#label-DecimalNumeric] - {TrueClass}[#label-TrueClass] - {FalseClass}[#label-FalseClass] - {Object}[#label-Object] - {String}[#label-String] - {Array}[#label-Array] - {Regexp}[#label-Regexp] - {Custom Argument Converters}[#label-Custom+Argument+Converters] === Built-In Argument Converters \OptionParser has a number of built-in argument converters, which are demonstrated below. ==== \Date File +date.rb+ defines an option whose argument is to be converted to a \Date object. The argument is converted by method Date#parse. :include: ruby/date.rb Executions: $ ruby date.rb --date 2001-02-03 [#, Date] $ ruby date.rb --date 20010203 [#, Date] $ ruby date.rb --date "3rd Feb 2001" [#, Date] ==== \DateTime File +datetime.rb+ defines an option whose argument is to be converted to a \DateTime object. The argument is converted by method DateTime#parse. :include: ruby/datetime.rb Executions: $ ruby datetime.rb --datetime 2001-02-03T04:05:06+07:00 [#, DateTime] $ ruby datetime.rb --datetime 20010203T040506+0700 [#, DateTime] $ ruby datetime.rb --datetime "3rd Feb 2001 04:05:06 PM" [#, DateTime] ==== \Time File +time.rb+ defines an option whose argument is to be converted to a \Time object. The argument is converted by method Time#httpdate or Time#parse. :include: ruby/time.rb Executions: $ ruby time.rb --time "Thu, 06 Oct 2011 02:26:12 GMT" [2011-10-06 02:26:12 UTC, Time] $ ruby time.rb --time 2010-10-31 [2010-10-31 00:00:00 -0500, Time] ==== \URI File +uri.rb+ defines an option whose argument is to be converted to a \URI object. The argument is converted by method URI#parse. :include: ruby/uri.rb Executions: $ ruby uri.rb --uri https://github.com [#, URI::HTTPS] $ ruby uri.rb --uri http://github.com [#, URI::HTTP] $ ruby uri.rb --uri file://~/var [#, URI::File] ==== \Shellwords File +shellwords.rb+ defines an option whose argument is to be converted to an \Array object by method Shellwords#shellwords. :include: ruby/shellwords.rb Executions: $ ruby shellwords.rb --shellwords "ruby my_prog.rb | less" [["ruby", "my_prog.rb", "|", "less"], Array] $ ruby shellwords.rb --shellwords "here are 'two words'" [["here", "are", "two words"], Array] ==== \Integer File +integer.rb+ defines an option whose argument is to be converted to an \Integer object. The argument is converted by method Kernel#Integer. :include: ruby/integer.rb Executions: $ ruby integer.rb --integer 100 [100, Integer] $ ruby integer.rb --integer -100 [-100, Integer] $ ruby integer.rb --integer 0100 [64, Integer] $ ruby integer.rb --integer 0x100 [256, Integer] $ ruby integer.rb --integer 0b100 [4, Integer] ==== \Float File +float.rb+ defines an option whose argument is to be converted to a \Float object. The argument is converted by method Kernel#Float. :include: ruby/float.rb Executions: $ ruby float.rb --float 1 [1.0, Float] $ ruby float.rb --float 3.14159 [3.14159, Float] $ ruby float.rb --float 1.234E2 [123.4, Float] $ ruby float.rb --float 1.234E-2 [0.01234, Float] ==== \Numeric File +numeric.rb+ defines an option whose argument is to be converted to an instance of \Rational, \Float, or \Integer. The argument is converted by method Kernel#Rational, Kernel#Float, or Kernel#Integer. :include: ruby/numeric.rb Executions: $ ruby numeric.rb --numeric 1/3 [(1/3), Rational] $ ruby numeric.rb --numeric 3.333E-1 [0.3333, Float] $ ruby numeric.rb --numeric 3 [3, Integer] ==== \DecimalInteger File +decimal_integer.rb+ defines an option whose argument is to be converted to an \Integer object. The argument is converted by method Kernel#Integer. :include: ruby/decimal_integer.rb The argument may not be in a binary or hexadecimal format; a leading zero is ignored (not parsed as octal). Executions: $ ruby decimal_integer.rb --decimal_integer 100 [100, Integer] $ ruby decimal_integer.rb --decimal_integer -100 [-100, Integer] $ ruby decimal_integer.rb --decimal_integer 0100 [100, Integer] $ ruby decimal_integer.rb --decimal_integer -0100 [-100, Integer] ==== \OctalInteger File +octal_integer.rb+ defines an option whose argument is to be converted to an \Integer object. The argument is converted by method Kernel#Integer. :include: ruby/octal_integer.rb The argument may not be in a binary or hexadecimal format; it is parsed as octal, regardless of whether it has a leading zero. Executions: $ ruby octal_integer.rb --octal_integer 100 [64, Integer] $ ruby octal_integer.rb --octal_integer -100 [-64, Integer] $ ruby octal_integer.rb --octal_integer 0100 [64, Integer] ==== \DecimalNumeric File +decimal_numeric.rb+ defines an option whose argument is to be converted to an \Integer object. The argument is converted by method Kernel#Integer :include: ruby/decimal_numeric.rb The argument may not be in a binary or hexadecimal format; a leading zero causes the argument to be parsed as octal. Executions: $ ruby decimal_numeric.rb --decimal_numeric 100 [100, Integer] $ ruby decimal_numeric.rb --decimal_numeric -100 [-100, Integer] $ ruby decimal_numeric.rb --decimal_numeric 0100 [64, Integer] ==== \TrueClass File +true_class.rb+ defines an option whose argument is to be converted to +true+ or +false+. The argument is evaluated by method Object#nil?. :include: ruby/true_class.rb The argument may be any of those shown in the examples below. Executions: $ ruby true_class.rb --true_class true [true, TrueClass] $ ruby true_class.rb --true_class yes [true, TrueClass] $ ruby true_class.rb --true_class + [true, TrueClass] $ ruby true_class.rb --true_class false [false, FalseClass] $ ruby true_class.rb --true_class no [false, FalseClass] $ ruby true_class.rb --true_class - [false, FalseClass] $ ruby true_class.rb --true_class nil [false, FalseClass] ==== \FalseClass File +false_class.rb+ defines an option whose argument is to be converted to +true+ or +false+. The argument is evaluated by method Object#nil?. :include: ruby/false_class.rb The argument may be any of those shown in the examples below. Executions: $ ruby false_class.rb --false_class false [false, FalseClass] $ ruby false_class.rb --false_class no [false, FalseClass] $ ruby false_class.rb --false_class - [false, FalseClass] $ ruby false_class.rb --false_class nil [false, FalseClass] $ ruby false_class.rb --false_class true [true, TrueClass] $ ruby false_class.rb --false_class yes [true, TrueClass] $ ruby false_class.rb --false_class + [true, TrueClass] ==== \Object File +object.rb+ defines an option whose argument is not to be converted from \String. :include: ruby/object.rb Executions: $ ruby object.rb --object foo ["foo", String] $ ruby object.rb --object nil ["nil", String] ==== \String File +string.rb+ defines an option whose argument is not to be converted from \String. :include: ruby/string.rb Executions: $ ruby string.rb --string foo ["foo", String] $ ruby string.rb --string nil ["nil", String] ==== \Array File +array.rb+ defines an option whose argument is to be converted from \String to an array of strings, based on comma-separated substrings. :include: ruby/array.rb Executions: $ ruby array.rb --array "" [[], Array] $ ruby array.rb --array foo,bar,baz [["foo", "bar", "baz"], Array] $ ruby array.rb --array "foo, bar, baz" [["foo", " bar", " baz"], Array] ==== \Regexp File +regexp.rb+ defines an option whose argument is to be converted to a \Regexp object. :include: ruby/regexp.rb Executions: $ ruby regexp.rb --regexp foo === Custom Argument Converters You can create custom argument converters. To create a custom converter, call OptionParser#accept with: - An identifier, which may be any object. - An optional match pattern, which defaults to /.*/m. - A block that accepts the argument and returns the converted value. This custom converter accepts any argument and converts it, if possible, to a \Complex object. :include: ruby/custom_converter.rb Executions: $ ruby custom_converter.rb --complex 0 [(0+0i), Complex] $ ruby custom_converter.rb --complex 1 [(1+0i), Complex] $ ruby custom_converter.rb --complex 1+2i [(1+2i), Complex] $ ruby custom_converter.rb --complex 0.3-0.5i [(0.3-0.5i), Complex] This custom converter accepts any 1-word argument and capitalizes it, if possible. :include: ruby/match_converter.rb Executions: $ ruby match_converter.rb --capitalize foo ["Foo", String] $ ruby match_converter.rb --capitalize "foo bar" match_converter.rb:9:in `
': invalid argument: --capitalize foo bar (OptionParser::InvalidArgument)