Class: OptparseExample

Inherits:
Object
  • Object
show all
Defined in:
lib/sm_transcript/optparseExample.rb

Constant Summary collapse

CODES =
%w[iso-2022-jp shift_jis euc-jp utf8 binary]
CODE_ALIASES =
{ "jis" => "iso-2022-jp", "sjis" => "shift_jis" }

Class Method Summary collapse

Class Method Details

.parse(args) ⇒ Object

Return a structure describing the options.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/sm_transcript/optparseExample.rb', line 17

def self.parse(args)
  # The options specified on the command line will be collected in *options*.
  # We set default values here.
  options = OpenStruct.new
  options.library = []
  options.inplace = false
  options.encoding = "utf8"
  options.transfer_type = :auto
  options.verbose = false

  opts = OptionParser.new do |opts|
    opts.banner = "Usage: example.rb [options]"

    opts.separator ""
    opts.separator "Specific options:"

    # Mandatory argument.
    opts.on("-r", "--require LIBRARY",
            "Require the LIBRARY before executing your script") do |lib|
      options.library << lib
    end

    # Optional argument; multi-line description.
    opts.on("-i", "--inplace [EXTENSION]",
            "Edit ARGV files in place",
            "  (make backup if EXTENSION supplied)") do |ext|
      options.inplace = true
      options.extension = ext || ''
      options.extension.sub!(/\A\.?(?=.)/, ".")  # Ensure extension begins with dot.
    end

    # Cast 'delay' argument to a Float.
    opts.on("--delay N", Float, "Delay N seconds before executing") do |n|
      options.delay = n
    end

    # Cast 'time' argument to a Time object.
    opts.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
      options.time = time
    end

    # Cast to octal integer.
    opts.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger,
            "Specify record separator (default \\0)") do |rs|
      options.record_separator = rs
    end

    # List of arguments.
    opts.on("--list x,y,z", Array, "Example 'list' of arguments") do |list|
      options.list = list
    end

    # Keyword completion.  We are specifying a specific set of arguments (CODES
    # and CODE_ALIASES - notice the latter is a Hash), and the user may provide
    # the shortest unambiguous text.
    code_list = (CODE_ALIASES.keys + CODES).join(',')
    opts.on("--code CODE", CODES, CODE_ALIASES, "Select encoding",
            "  (#{code_list})") do |encoding|
      options.encoding = encoding
    end

    # Optional argument with keyword completion.
    opts.on("--type [TYPE]", [:text, :binary, :auto],
            "Select transfer type (text, binary, auto)") do |t|
      options.transfer_type = t
    end

    # Boolean switch.
    opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
      options.verbose = v
    end

    opts.separator ""
    opts.separator "Common options:"

    # No argument, shows at tail.  This will print an options summary.
    # Try it and see!
    opts.on_tail("-h", "--help", "Show this message") do
      puts opts
      exit
    end

    # Another typical switch to print the version.
    opts.on_tail("--version", "Show version") do
      puts OptionParser::Version.join('.')
      exit
    end
  end

  opts.parse!(args)
  options
end