SamovarSourceSamovarSplit

class Split

Represents a split point in the command-line arguments.

A Split parser divides the argument list at a marker (typically --), allowing you to separate arguments meant for your command from those passed to another tool.

Definitions

def initialize(key, description, marker: "--", default: nil, required: false)

Initialize a new split parser.

Signature

parameter key Symbol

The name of the attribute to store the values after the split.

parameter description String

A description of the split for help output.

parameter marker String

The marker that indicates the split point.

parameter default Object

The default value if no split is present.

parameter required Boolean

Whether the split is required.

Implementation

def initialize(key, description, marker: "--", default: nil, required: false)
	@key = key
	@description = description
	@marker = marker
	@default = default
	@required = required
end

attr :key

The name of the attribute to store the values after the split.

Signature

attribute Symbol

attr :description

A description of the split for help output.

Signature

attribute String

attr :marker

The marker that indicates the split point.

Signature

attribute String

attr :default

The default value if no split is present.

Signature

attribute Object

attr :required

Whether the split 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
	"#{@marker} <#{@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 arguments after the split marker.

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 Array(String) | Object | Nil

The arguments after the split, or the default if no split.

Implementation

def parse(input, parent = nil, default = nil)
	if offset = input.index(@marker)
		input.pop(input.size - offset).tap(&:shift)
	elsif default ||= @default
		return default
	elsif @required
		raise MissingValueError.new(parent, @key)
	end
end