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
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