Spec-Zone.ru › Ruby 2.7

модуль Bundler::Thor::Base::ClassMethods

Открытые методы экземпляров

all_commands() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 374
def all_commands
  @all_commands ||= from_superclass(:all_commands, Hash.new)
  @all_commands.merge!(commands)
end

Возвращает команды для данного класса Bundler::Thor и всех его подклассов.

Возвращает

Hash

Упорядоченный хэш с именами команд в качестве ключей и объектами Bundler::Thor::Command в качестве значений.

Также алиасировано как: all_tasks
all_tasks()
Псевдоним для: all_commands
allow_incompatible_default_type!() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 164
def allow_incompatible_default_type!
  @check_default_type = false
end

Если вы хотите использовать значения по умолчанию, которые не соответствуют типу опции, либо укажите `check_default_type: false`, либо вызовите `allow_incompatible_default_type!`

argument(name, options = {}) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 236
def argument(name, options = {})
  is_thor_reserved_word?(name, :argument)
  no_commands { attr_accessor name }

  required = if options.key?(:optional)
    !options[:optional]
  elsif options.key?(:required)
    options[:required]
  else
    options[:default].nil?
  end

  remove_argument name

  if required
    arguments.each do |argument|
      next if argument.required?
      raise ArgumentError, "You cannot have #{name.to_s.inspect} as required argument after " \
                          "the non-required argument #{argument.human_name.inspect}."
    end
  end

  options[:required] = required

  arguments << Bundler::Thor::Argument.new(name, options)
end

Добавляет аргумент в класс и создаёт для него attr_accessor.

Аргументы отличаются от опций по нескольким аспектам. Во-первых, способ их парсинга из командной строки: аргументы извлекаются по позиции:

thor command NAME

Вместо:

thor command --name=NAME

Кроме того, аргументы используются внутри вашего кода как аксессоры (self.argument), в то время как опции хранятся в хэше (self.options).

Наконец, аргументы не могут иметь тип :default или :boolean, но могут быть необязательными (указав :optional => :true или :required => false), хотя обязательный аргумент не может следовать за необязательным. Если вы попробуете, будет выброшено исключение.

Параметры

name<Symbol>

Имя аргумента.

options<Hash>

Описание ниже.

Опции

:desc - Описание аргумента. :required - Требуется ли аргумент. :optional - Необязательный аргумент. :type - Тип аргумента, может быть :string, :hash, :array, :numeric. :default - Значение по умолчанию для данного аргумента. Не может быть обязательным и иметь значение по умолчанию. :banner - String для отображения в справке.

Ошибки

ArgumentError

Выбрасывается, если вы указываете обязательный аргумент после необязательного.

arguments() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 268
def arguments
  @arguments ||= from_superclass(:arguments, [])
end

Возвращает аргументы этого класса, проверяя цепочку предков.

Возвращает

Массив

check_default_type!() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 158
def check_default_type!
  @check_default_type = true
end

Если вы хотите вызывать ошибку, когда значение по умолчанию опции не соответствует типу, вызовите check_default_type!. Это будет по умолчанию; для совместимости будет выведено предупреждение о устаревании, если необходимо.

check_unknown_options!() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 143
def check_unknown_options!
  @check_unknown_options = true
end

Если вы хотите вызывать ошибку для неизвестных опций, вызовите check_unknown_options!. Это отключено по умолчанию для поддержки динамических вызовов.

class_option(name, options = {}) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 303
def class_option(name, options = {})
  build_option(name, options, class_options)
end

Добавляет опцию в набор опций класса

Параметры

name<Symbol>

Имя аргумента.

options<Hash>

Описание ниже.

Опции

:desc

– Описание аргумента.

:required

– Требуется ли аргумент.

:default

– Значение по умолчанию для данного аргумента.

:group

– Группа для этой опции. Используется для группировки опций в выводе.

:aliases

– Псевдонимы для этой опции. Примечание: Bundler::Thor использует соглашение о названии опций с одним тире и одной буквой. Таким образом, псевдонимы, как “-something”, не будут распознаны; используйте либо “--something”, либо “-s”.

:type

– Тип аргумента, может быть :string, :hash, :array, :numeric или :boolean.

:banner

– String для отображения в справке.

:hide

– Если вы хотите скрыть эту опцию из справки.

class_options(options = nil) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 281
def class_options(options = nil)
  @class_options ||= from_superclass(:class_options, {})
  build_options(options, @class_options) if options
  @class_options
end

Добавляет набор опций в набор опций класса.

class_options :foo => false, :bar => :required, :baz => :string

Если вы предпочитаете более подробное объявление, используйте class_option.

Параметры

Hash[Symbol => Object]

commands() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 363
def commands
  @commands ||= Hash.new
end

Возвращает команды для данного класса Bundler::Thor.

Возвращает

Hash

Упорядоченный хэш с именами команд в качестве ключей и объектами Bundler::Thor::Command в качестве значений.

Также алиасировано как: tasks
exit_on_failure?() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 520
def exit_on_failure?
  Bundler::Thor.deprecation_warning "Bundler::Thor exit with status 0 on errors. To keep this behavior, you must define `exit_on_failure?` in `#{self.name}`"
  false
end

Флаг, который заставляет процесс завершиться со статусом 1, если произошла какая-либо ошибка.

group(name = nil) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 349
def group(name = nil)
  if name
    @group = name.to_s
  else
    @group ||= from_superclass(:group, "standard")
  end
end

Определяет группу. Используется при вызове thor list, чтобы указать, что будут показаны только команды из предварительно определённой группы. По умолчанию - стандартная группа.

Параметры

name<String|Symbol>

namespace(name = nil) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 458
def namespace(name = nil)
  if name
    @namespace = name.to_s
  else
    @namespace ||= Bundler::Thor::Util.namespace_from_thor_class(self)
  end
end

Устанавливает пространство имён для класса Bundler::Thor или Bundler::Thor::Group. По умолчанию пространство имён извлекается из имени класса. Если ваш класс Bundler::Thor называется Scripts::MyScript, метод help, например, будет вызываться как:

thor scripts:my_script -h

Если вы измените пространство имён:

namespace :my_scripts

Вы меняете способ вызова ваших команд:

thor my_scripts -h

Наконец, если вы измените пространство имён на default:

namespace :default

Ваши команды могут быть вызваны с сокращением. Вместо:

thor :my_command
no_commands(&block) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 422
def no_commands(&block)
  no_commands_context.enter(&block)
end

Все методы, определённые внутри данного блока, не добавляются как команды.

Так вы можете сделать:

class MyScript < Bundler::Thor
  no_commands do
    def this_is_not_a_command
    end
  end
end

Вы также можете добавить метод и удалить его из списка команд:

class MyScript < Bundler::Thor
  def this_is_not_a_command
  end
  remove_command :this_is_not_a_command
end
Также алиасировано как: no_tasks
no_commands?() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 432
def no_commands?
  no_commands_context.entered?
end
END_OF_DOCUMENT_MARKER
no_commands_context() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 428
def no_commands_context
  @no_commands_context ||= NestedContext.new
end
no_tasks(&block)
Псевдоним для: no_commands
public_command(*names) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 498
def public_command(*names)
  names.each do |name|
    class_eval "def #{name}(*); super end"
  end
end

Позволяет использовать приватные методы родительского класса в дочерних классах в качестве команд.

Параметры

names<Array>:: Method names to be used as commands

Примеры

public_command :foo
public_command :foo, :bar, :baz
Также алиас для: public_task
public_task(*names)
Псевдоним для: public_command
remove_argument(*names) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 318
def remove_argument(*names)
  options = names.last.is_a?(Hash) ? names.pop : {}

  names.each do |name|
    arguments.delete_if { |a| a.name == name.to_s }
    undef_method name, "#{name}=" if options[:undefine]
  end
end

Удаляет предварительно определённый аргумент. Если задано :undefine, удаляются и аксессоры.

Параметры

names<Array>

Аргументы для удаления

Примеры

remove_argument :foo
remove_argument :foo, :bar, :baz, :undefine => true
remove_class_option(*names) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 337
def remove_class_option(*names)
  names.each do |name|
    class_options.delete(name)
  end
end

Удаляет предварительно определённый параметр класса.

Параметры

names<Array>

Class параметры для удаления

Примеры

remove_class_option :foo
remove_class_option :foo, :bar, :baz
remove_command(*names) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 392
def remove_command(*names)
  options = names.last.is_a?(Hash) ? names.pop : {}

  names.each do |name|
    commands.delete(name.to_s)
    all_commands.delete(name.to_s)
    undef_method name if options[:undefine]
  end
end

Удаляет заданную команду из класса Bundler::Thor. Это обычно делается, если вы наследуете от другого класса и не хотите, чтобы она была доступна.

По умолчанию удаляется только отображение команды. Но вы можете указать :undefine => true, чтобы удалить метод из класса также.

Параметры

name<Symbol|String>

Имя команды для удаления

options<Hash>

Можно задать :undefine => true, если вы хотите, чтобы метод команды также был удалён из класса.

Также алиас для: remove_task
remove_task(*names)
Псевдоним для: remove_command
start(given_args = ARGV, config = {}) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 474
def start(given_args = ARGV, config = {})
  config[:shell] ||= Bundler::Thor::Base.shell.new
  dispatch(nil, given_args.dup, nil, config)
rescue Bundler::Thor::Error => e
  config[:debug] || ENV["THOR_DEBUG"] == "1" ? (raise e) : config[:shell].error(e.message)
  exit(false) if exit_on_failure?
rescue Errno::EPIPE
  # This happens if a thor command is piped to something like `head`,
  # which closes the pipe when it's done reading. This will also
  # mean that if the pipe is closed, further unnecessary
  # computation will not occur.
  exit(true)
end

Парсит команду и параметры из заданных аргументов, инициализирует класс и вызывает команду. Этот метод используется, когда аргументы должны быть обработаны из массива. Если вы находитесь внутри Ruby и хотите использовать класс Bundler::Thor, вы можете просто его инициализировать:

script = MyScript.new(args, options, config)
script.invoke(:command, first_arg, second_arg, third_arg)
strict_args_position!() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 189
def strict_args_position!
  @strict_args_position = true
end

Если вам нужны только строковые аргументы (полезно при наследовании классов thor), вызовите strict_args_position! Этот параметр отключён по умолчанию, чтобы разрешить динамические вызовы.

tasks()
Псевдоним для: commands

Защищённые методы экземпляра

basename() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 664
def basename
  File.basename($PROGRAM_NAME).split(" ").first
end

Имя файла программы, вызвавшей класс thor.

from_superclass(method, default = nil) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 642
def from_superclass(method, default = nil)
  if self == baseclass || !superclass.respond_to?(method, true)
    default
  else
    value = superclass.send(method)

    # Ruby implements `dup` on Object, but raises a `TypeError`
    # if the method is called on immediates. As a result, we
    # don't have a good way to check whether dup will succeed
    # without calling it and rescuing the TypeError.
    begin
      value.dup
    rescue TypeError
      value
    end

  end
end

Извлекает значение из родительского класса. Если достигает базового класса, возвращает значение по умолчанию.

inherited(klass) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 614
def inherited(klass)
  super(klass)
  Bundler::Thor::Base.register_klass_file(klass)
  klass.instance_variable_set(:@no_commands, 0)
end

Каждый раз, когда кто-то наследует от класса Bundler::Thor, регистрирует klass и файл в базовом классе.

Вызывает метод родительского класса
method_added(meth) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 622
def method_added(meth)
  super(meth)
  meth = meth.to_s

  if meth == "initialize"
    initialize_added
    return
  end

  # Return if it's not a public instance method
  return unless public_method_defined?(meth.to_sym)

  return if no_commands? || !create_command(meth)

  is_thor_reserved_word?(meth, :command)
  Bundler::Thor::Base.register_klass_file(self)
end

Вызывает этот обработчик каждый раз, когда добавляется метод. Добавленные методы отслеживаются как команды вызовом метода create_command.

Вызывает метод родительского класса
print_options(shell, options, group_name = nil) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 548
def print_options(shell, options, group_name = nil)
  return if options.empty?

  list = []
  padding = options.map { |o| o.aliases.size }.max.to_i * 4

  options.each do |option|
    next if option.hide
    item = [option.usage(padding)]
    item.push(option.description ? "# #{option.description}" : "")

    list << item
    list << ["", "# Default: #{option.default}"] if option.show_default?
    list << ["", "# Possible values: #{option.enum.join(', ')}"] if option.enum
  end

  shell.say(group_name ? "#{group_name} options:" : "Options:")
  shell.print_table(list, :indent => 2)
  shell.say ""
end

Принимает набор параметров и выводит их.

Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API