class TTY::Option::Parameters

A collection to hold all parameters

Attributes

arguments[R]

A list of arguments

environments[R]

A list of environments

keywords[R]

A list of keywords

list[R]

A list of all parameters

options[R]

A list of options

Public Class Methods

define_param_query(name) click to toggle source

Define a predicate method to check if a parameter is supported

@api private

# File lib/tty/option/parameters.rb, line 23
def self.define_param_query(name)
  define_method(:"#{name}?") do |param|
    public_send(:"#{name}s").map(&:key).include?(param)
  end
end
define_query(name) click to toggle source

Define a query for parameter types

@api private

# File lib/tty/option/parameters.rb, line 14
def self.define_query(name)
  define_method(:"#{name}?") do
    !public_send(name).empty?
  end
end
new() click to toggle source

A parameters list

@api private

# File lib/tty/option/parameters.rb, line 57
def initialize
  @arguments = []
  @environments = []
  @keywords = []
  @options = []
  @list = []

  @registered_keys = Set.new
  @registered_shorts = Set.new
  @registered_longs = Set.new
end

Public Instance Methods

<<(parameter) click to toggle source

Add parameter

@param [TTY::Option::Parameter] parameter

@api public

# File lib/tty/option/parameters.rb, line 74
def <<(parameter)
  check_key_uniqueness!(parameter.key)

  if parameter.to_sym == :option
    check_short_option_uniqueness!(parameter.short_name)
    check_long_option_uniqueness!(parameter.long_name)
  end

  @list << parameter
  arr = instance_variable_get("@#{parameter.to_sym}s")
  arr.send :<<, parameter
  self
end
Also aliased as: add
add(parameter)
Alias for: <<
delete(*keys) click to toggle source

Delete a parameter from the list

@example

delete(:foo, :bar, :baz)

@param [Array<Symbol>] keys

the keys to delete

@api public

# File lib/tty/option/parameters.rb, line 98
def delete(*keys)
  deleted = []
  @list.delete_if { |p| keys.include?(p.key) && (deleted << p) }
  deleted.each do |param|
    params_list = instance_variable_get("@#{param.to_sym}s")
    params_list.delete(param)
  end
  @registered_keys.subtract(keys)
  @registered_shorts.replace(@options.map(&:short))
  @registered_longs.replace(@options.map(&:long))
  deleted
end
dup() click to toggle source

Make a deep copy of the list of parameters

@api public

Calls superclass method
# File lib/tty/option/parameters.rb, line 125
def dup
  super.tap do |params|
    params.instance_variables.each do |var|
      dupped = DeepDup.deep_dup(params.instance_variable_get(var))
      params.instance_variable_set(var, dupped)
    end
  end
end
each(&block) click to toggle source

Enumerate all parameters

@api public

# File lib/tty/option/parameters.rb, line 114
def each(&block)
  if block_given?
    @list.each(&block)
  else
    to_enum(:each)
  end
end

Private Instance Methods

check_key_uniqueness!(key) click to toggle source

@api private

# File lib/tty/option/parameters.rb, line 137
def check_key_uniqueness!(key)
  if @registered_keys.include?(key)
    raise ParameterConflict,
          "already registered parameter #{key.inspect}"
  else
    @registered_keys << key
  end
end
check_long_option_uniqueness!(long_name) click to toggle source

@api private

# File lib/tty/option/parameters.rb, line 159
def check_long_option_uniqueness!(long_name)
  return if long_name.empty?

  if @registered_longs.include?(long_name)
    raise ParameterConflict,
          "already registered long option #{long_name}"
  else
    @registered_longs << long_name
  end
end
check_short_option_uniqueness!(short_name) click to toggle source

@api private

# File lib/tty/option/parameters.rb, line 147
def check_short_option_uniqueness!(short_name)
  return if short_name.empty?

  if @registered_shorts.include?(short_name)
    raise ParameterConflict,
          "already registered short option #{short_name}"
  else
    @registered_shorts << short_name
  end
end