class Option
Represents a single command-line option.
An option is a flag-based argument that can have various forms (short, long, with or without values).
Definitions
def initialize(flags, description, key: nil, default: nil, value: nil, type: nil, required: false, &block)
Initialize a new option.
Signature
-
parameter
flags
String
The flags specification (e.g.,
-f/--flag <value>
).-
parameter
description
String
A description of the option for help output.
-
parameter
key
Symbol | Nil
The key to use for storing the value (defaults to derived from flag).
-
parameter
default
Object
The default value if the option is not provided.
-
parameter
value
Object | Nil
A fixed value to use regardless of user input.
-
parameter
type
Class | Proc | Nil
The type to coerce the value to.
-
parameter
required
Boolean
Whether the option is required.
-
yields
{|value| ...}
An optional block to transform the parsed value.
Implementation
def initialize(flags, description, key: nil, default: nil, value: nil, type: nil, required: false, &block)
@flags = Flags.new(flags)
@description = description
if key
@key = key
else
@key = @flags.first.key
end
@default = default
# If the value is given, it overrides the user specified input.
@value = value
@value ||= true if @flags.boolean?
@type = type
@required = required
@block = block
end
attr :flags
The flags for this option.
Signature
-
attribute
Flags
attr :description
A description of the option for help output.
Signature
-
attribute
String
attr :key
The key to use for storing the value.
Signature
-
attribute
Symbol
attr :default
The default value if the option is not provided.
Signature
-
attribute
Object
attr :value
A fixed value to use regardless of user input.
Signature
-
attribute
Object | Nil
attr :type
The type to coerce the value to.
Signature
-
attribute
Class | Proc | Nil
attr :required
Whether the option is required.
Signature
-
attribute
Boolean
attr :block
An optional block to transform the parsed value.
Signature
-
attribute
Proc | Nil
def coerce_type(result)
Coerce the result to the specified type.
Signature
-
parameter
result
Object
The value to coerce.
-
returns
Object
The coerced value.
Implementation
def coerce_type(result)
if @type == Integer
Integer(result)
elsif @type == Float
Float(result)
elsif @type == Symbol
result.to_sym
elsif @type.respond_to? :call
@type.call(result)
elsif @type.respond_to? :new
@type.new(result)
end
end
def coerce(result)
Coerce and transform the result.
Signature
-
parameter
result
Object
The value to coerce and transform.
-
returns
Object
The coerced and transformed value.
Implementation
def coerce(result)
if @type
result = coerce_type(result)
end
if @block
result = @block.call(result)
end
return result
end
def parse(input, parent = nil, default = nil)
Parse this option from the input.
Signature
-
parameter
input
Array(String)
The command-line arguments.
-
parameter
parent
Command | Nil
The parent command (unused, kept for compatibility).
-
parameter
default
Object | Nil
An override for the default value (unused, kept for compatibility).
-
returns
Object | Nil
The parsed value.
Implementation
def parse(input, parent = nil, default = nil)
result = @flags.parse(input)
if result != nil
@value.nil? ? coerce(result) : @value
end
end
def to_s
Generate a string representation for usage output.
Signature
-
returns
String
The usage string.
Implementation
def to_s
@flags
end
def to_a
Generate an array representation for usage output.
Signature
-
returns
Array
The usage array.
Implementation
def to_a
if @default
[@flags, @description, "(default: #{@default})"]
elsif @required
[@flags, @description, "(required)"]
else
[@flags, @description]
end
end