SamovarSourceSamovarOne

class One

Represents a single positional argument in a command.

A One parser extracts exactly one argument from the command line that matches the specified pattern.

Definitions

def initialize(key, description, pattern: //, default: nil, required: false)

Initialize a new positional argument parser.

Signature

parameter key Symbol

The name of the attribute to store the value in.

parameter description String

A description of the argument for help output.

parameter pattern Regexp

A pattern to match valid values.

parameter default Object

The default value if no argument is provided.

parameter required Boolean

Whether the argument is required.

Implementation

def initialize(key, description, pattern: //, default: nil, required: false)
	@key = key
	@description = description
	@pattern = pattern
	@default = default
	@required = required
end

attr :key

The name of the attribute to store the value in.

Signature

attribute Symbol

attr :description

A description of the argument for help output.

Signature

attribute String

attr :pattern

A pattern to match valid values.

Signature

attribute Regexp

attr :default

The default value if no argument is provided.

Signature

attribute Object

attr :required

Whether the argument is required.

Signature

attribute Boolean

def to_s

Generate a string representation for usage output.

Signature

returns String

The usage string.

Implementation

def to_s
	"<#{@key}>"
end

def to_a

Generate an array representation for usage output.

Signature

returns Array

The usage array.

Implementation

def to_a
	usage = [to_s, @description]
	
	if @default
		usage << "(default: #{@default.inspect})"
	elsif @required
		usage << "(required)"
	end
	
	return usage
end

def parse(input, parent = nil, default = nil)

Parse a single argument from the input.

Signature

parameter input Array(String)

The command-line arguments.

parameter parent Command | Nil

The parent command.

parameter default Object | Nil

An override for the default value.

returns String | Object | Nil

The parsed value, or the default if no match.

Implementation

def parse(input, parent = nil, default = nil)
	if input.first =~ @pattern
		input.shift
	elsif default ||= @default
		return default
	elsif @required
		raise MissingValueError.new(parent, @key)
	end
end