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.



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/command_kit/options/option.rb', line 86

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)


46
47
48
# File 'lib/command_kit/options/option.rb', line 46

def block
  @block
end

#descString (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.

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)


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

def desc
  @desc
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.



117
118
119
# File 'lib/command_kit/options/option.rb', line 117

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:



180
181
182
# File 'lib/command_kit/options/option.rb', line 180

def default_value
  @value && @value.default_value
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)


126
127
128
# File 'lib/command_kit/options/option.rb', line 126

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 characer between the option and option value.

Returns:

  • ('=', ' ', nil)


135
136
137
138
139
140
141
# File 'lib/command_kit/options/option.rb', line 135

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:



169
170
171
# File 'lib/command_kit/options/option.rb', line 169

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.



149
150
151
# File 'lib/command_kit/options/option.rb', line 149

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)


158
159
160
# File 'lib/command_kit/options/option.rb', line 158

def value?
  !@value.nil?
end