123456789_123456789_123456789_123456789_123456789_

Class: Bundler::Thor::Option

Do not use. This class is for internal use only.
Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, Argument
Instance Chain:
self, Argument
Inherits: Bundler::Thor::Argument
Defined in: lib/bundler/vendor/thor/lib/thor/parser/option.rb

Constant Summary

Argument - Inherited

VALID_TYPES

Class Method Summary

Argument - Inherited

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(name, options = {}) ⇒ Option

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 7

def initialize(name, options = {})
  @check_default_type = options[:check_default_type]
  options[:required] = false unless options.key?(:required)
  super
  @lazy_default = options[:lazy_default]
  @group        = options[:group].to_s.capitalize if options[:group]
  @aliases      = Array(options[:aliases])
  @hide         = options[:hide]
end

Class Method Details

.parse(key, value)

This parse quick options given as method_options. It makes several assumptions, but you can be more specific using the option method.

parse :foo => "bar"
#=> Option foo with default value bar

parse [:foo, :baz] => "bar"
#=> Option foo with default value bar and alias :baz

parse :foo => :required
#=> Required option foo without default value

parse :foo => 2
#=> Option foo with default value 2 and type numeric

parse :foo => :numeric
#=> Option foo without default value and type numeric

parse :foo => true
#=> Option foo with default value true and type boolean

The valid types are :boolean, :numeric, :hash, :array and :string. If none is given a default type is assumed. This default type accepts arguments as string (–foo=value) or booleans (just –foo).

By default all options are optional, unless :required is given.

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 44

def self.parse(key, value)
  if key.is_a?(Array)
    name, *aliases = key
  else
    name = key
    aliases = []
  end

  name    = name.to_s
  default = value

  type = case value
  when Symbol
    default = nil
    if VALID_TYPES.include?(value)
      value
    elsif required = (value == :required) # rubocop:disable AssignmentInCondition
      :string
    end
  when TrueClass, FalseClass
    :boolean
  when Numeric
    :numeric
  when Hash, Array, String
    value.class.name.downcase.to_sym
  end

  new(name.to_s, :required => required, :type => type, :default => default, :aliases => aliases)
end

Instance Attribute Details

#aliases (readonly)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 3

attr_reader :aliases, :group, :lazy_default, :hide

#dasherized?Boolean (readonly, protected)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 134

def dasherized?
  name.index("-") == 0
end

#group (readonly)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 3

attr_reader :aliases, :group, :lazy_default, :hide

#hide (readonly)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 3

attr_reader :aliases, :group, :lazy_default, :hide

#lazy_default (readonly)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 3

attr_reader :aliases, :group, :lazy_default, :hide

Instance Method Details

#dasherize(str) (protected)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 142

def dasherize(str)
  (str.length > 1 ? "--" : "-") + str.tr("_", "-")
end

#human_name

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 78

def human_name
  @human_name ||= dasherized? ? undasherize(name) : name
end

#switch_name

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 74

def switch_name
  @switch_name ||= dasherized? ? name : dasherize(name)
end

#undasherize(str) (protected)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 138

def undasherize(str)
  str.sub(/^-{1,2}/, "")
end

#usage(padding = 0)

[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 82

def usage(padding = 0)
  sample = if banner && !banner.to_s.empty?
    "#{switch_name}=#{banner}".dup
  else
    switch_name
  end

  sample = "[#{sample}]".dup unless required?

  if boolean?
    sample << ", [#{dasherize('no-' + human_name)}]" unless (name == "force") || name.start_with?("no-")
  end

  if aliases.empty?
    (" " * padding) << sample
  else
    "#{aliases.join(', ')}, #{sample}"
  end
end

#validate! (protected)

Raises:

  • (ArgumentError)
[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 112

def validate!
  raise ArgumentError, "An option cannot be boolean and required." if boolean? && required?
  validate_default_type! if @check_default_type
end

#validate_default_type! (protected)

Raises:

  • (ArgumentError)
[ GitHub ]

  
# File 'lib/bundler/vendor/thor/lib/thor/parser/option.rb', line 117

def validate_default_type!
  default_type = case @default
  when nil
    return
  when TrueClass, FalseClass
    required? ? :string : :boolean
  when Numeric
    :numeric
  when Symbol
    :string
  when Hash, Array, String
    @default.class.name.downcase.to_sym
  end

  raise ArgumentError, "Expected #{@type} default value for '#{switch_name}'; got #{@default.inspect} (#{default_type})" unless default_type == @type
end