Class: CommandKit::Options::Option Private

Inherits:
Object
  • Object
show all
Defined in:
lib/command_kit/options/option.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Represents a defined option.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, short: nil, long: self.class.default_long_opt(name), equals: false, value: nil, desc:) {|(value)| ... } ⇒ Option

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Initializes the option.

Parameters:

  • name (Symbol)

    The name of the option.

  • short (String, nil) (defaults to: nil)

    Optional short-flag for the option.

  • long (String, nil) (defaults to: self.class.default_long_opt(name))

    Optional explicit long-flag for the option.

  • equals (Boolean) (defaults to: false)

    Specifies whether the option is of the form (--opt=value).

  • value (Hash{Symbol => Object}, true, false, nil) (defaults to: nil)

    Keyword arguments for CommandKit::Options::OptionValue#initialize, or nil if the option has no additional value.

  • desc (String)

    The description for the option.

Options Hash (value:):

  • type (Class, Hash, Array, Regexp)

    The type of the option's value.

  • usage (String, nil)

    The usage string for the option's value.

Yields:

  • ((value))

    If a block is given, it will be called when the option is parsed.

Yield Parameters:

  • value (Object, nil)

    The given block will be passed the parsed option's value.

Raises:

  • (TypeError)

    The value keyword argument was not a Hash, true, false, or nil.



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/command_kit/options/option.rb', line 81

def initialize(name, short:   nil,
                     long:    self.class.default_long_opt(name),
                     equals:  false,
                     value:   nil,
                     desc:    ,
                     &block)
  @name    = name
  @short   = short
  @long    = long
  @equals  = equals
  @value   = case value
             when Hash       then OptionValue.new(**value)
             when true       then OptionValue.new()
             when false, nil then nil
             else
               raise(TypeError,"value: keyword must be Hash, true, false, or nil")
             end
  @desc    = desc
  @block   = block
end

Instance Attribute Details

#blockProc? (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The optional block that will receive the parsed option value.

Returns:

  • (Proc, nil)


41
42
43
# File 'lib/command_kit/options/option.rb', line 41

def block
  @block
end

#longString (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The option's long-flag.

Returns:

  • (String)


31
32
33
# File 'lib/command_kit/options/option.rb', line 31

def long
  @long
end

#nameSymbol (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The option's name.

Returns:

  • (Symbol)


21
22
23
# File 'lib/command_kit/options/option.rb', line 21

def name
  @name
end

#shortString? (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The option's optional short-flag.

Returns:

  • (String, nil)


26
27
28
# File 'lib/command_kit/options/option.rb', line 26

def short
  @short
end

#valueOptionValue? (readonly)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The option value's type.

Returns:



36
37
38
# File 'lib/command_kit/options/option.rb', line 36

def value
  @value
end

Class Method Details

.default_long_opt(name) ⇒ String

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The default long option (ex: --long-opt) for the given option name (ex: :long_opt).

Parameters:

  • name (Symbol)

    The option name.

Returns:

  • (String)

    The long-flag for the option.



112
113
114
# File 'lib/command_kit/options/option.rb', line 112

def self.default_long_opt(name)
  "--#{Inflector.dasherize(name)}"
end

Instance Method Details

#default_valueObject?

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The option value's default value.

Returns:

  • (Object, nil)

See Also:



175
176
177
# File 'lib/command_kit/options/option.rb', line 175

def default_value
  @value && @value.default_value
end

#descString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Note:

If #default_value returns a value, the description will contain the Default: value the option will be initialized with.

The option description.

Returns:

  • (String)


188
189
190
191
192
193
194
# File 'lib/command_kit/options/option.rb', line 188

def desc
  if (value = default_value)
    "#{@desc} (Default: #{value})"
  else
    @desc
  end
end

#equals?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Specifies if the option is of the form --opt=VALUE.

Returns:

  • (Boolean)


121
122
123
# File 'lib/command_kit/options/option.rb', line 121

def equals?
  @equals
end

#separator'=', ...

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The separator character between the option and option value.

Returns:

  • ('=', ' ', nil)


130
131
132
133
134
135
136
# File 'lib/command_kit/options/option.rb', line 130

def separator
  if @value
    if equals? then '='
    else            ' '
    end
  end
end

#typeClass?

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

The option value's type.

Returns:

  • (Class, nil)

See Also:



164
165
166
# File 'lib/command_kit/options/option.rb', line 164

def type
  @value && @value.type
end

#usageArray<String>

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Usage strings for the option.

Returns:

  • (Array<String>)

    The usage strings.



144
145
146
# File 'lib/command_kit/options/option.rb', line 144

def usage
  [*@short, "#{@long}#{separator}#{@value && @value.usage}"]
end

#value?Boolean

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Determines if the option has a value.

Returns:

  • (Boolean)


153
154
155
# File 'lib/command_kit/options/option.rb', line 153

def value?
  !@value.nil?
end