SamovarSourceSamovarFlag

class Flag

Represents a single command-line flag.

A flag can be a simple boolean flag or a flag that accepts a value.

Definitions

def self.parse(text)

Parse a flag specification string into a flag instance.

Signature

parameter text String

The flag specification (e.g., -f <value> or --flag).

returns Flag

A flag instance (either class Samovar::ValueFlag or class Samovar::BooleanFlag).

Implementation

def self.parse(text)
	if text =~ /(.*?)\s(\<.*?\>)/
		ValueFlag.new(text, $1, $2)
	elsif text =~ /--\[no\]-(.*?)$/
		BooleanFlag.new(text, "--#{$1}")
	else
		ValueFlag.new(text, text, nil)
	end
end

def initialize(text, prefix, alternatives = nil)

Initialize a new flag.

Signature

parameter text String

The full flag specification text.

parameter prefix String

The primary flag prefix (e.g., --flag).

parameter alternatives Array(String) | Nil

Alternative flag prefixes.

Implementation

def initialize(text, prefix, alternatives = nil)
	@text = text
	@prefix = prefix
	@alternatives = alternatives
end

attr :text

The full flag specification text.

Signature

attribute String

attr :prefix

The primary flag prefix.

Signature

attribute String

attr :alternatives

Alternative flag prefixes.

Signature

attribute Array(String) | Nil

def to_s

Generate a string representation for usage output.

Signature

returns String

The flag text.

Implementation

def to_s
	@text
end

def key

Generate a key name for this flag.

Signature

returns Symbol

The key name.

Implementation

def key
	@key ||= @prefix.sub(/^-*/, "").gsub("-", "_").to_sym
end

def boolean?

Whether this is a boolean flag.

Signature

returns Boolean

False by default.

Implementation

def boolean?
	false
end

def prefix?(token)

Check if the token matches this flag.

Signature

parameter token String

The token to check.

returns Boolean

True if the token matches.

Implementation

def prefix?(token)
	@prefix == token or @alternatives&.include?(token)
end

def completions

The possible flag prefixes for completion.

Signature

returns Array(String)

The flag prefix and alternatives.

Implementation

def completions
	[@prefix, *@alternatives]
end