Spec-Zone.ru › Ruby 2.6

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

Публичные методы экземпляров

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

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

Возвращает

OrderedHash

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

Также алиасировано как: all_tasks
all_tasks()
Псевдоним для: all_commands
argument(name, options = {}) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 232
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 264
def arguments
  @arguments ||= from_superclass(:arguments, [])
end

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

Возвращает

Массив

check_default_type!() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 157
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 142
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 299
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 277
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[Символ => Объект]

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

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

Возвращает

OrderedHash

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

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

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

Параметры

name<Строка|Символ>

namespace(name = nil) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 448
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() { || ... } Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 418
def no_commands
  @no_commands = true
  yield
ensure
  @no_commands = false
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_tasks()
Псевдоним для: no_commands
public_command(*names) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 488
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
END_OF_DOCUMENT_MARKER
remove_argument(*names) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 314
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 333
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 388
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 464
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(1) 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(0)
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 185
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 653
def basename
  File.basename($PROGRAM_NAME).split(" ").first
end

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

exit_on_failure?() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 646
def exit_on_failure?
  false
end

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

from_superclass(method, default = nil) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 626
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 599
def inherited(klass)
  Bundler::Thor::Base.register_klass_file(klass)
  klass.instance_variable_set(:@no_commands, false)
end

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

method_added(meth) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/base.rb, line 606
def method_added(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)

  @no_commands ||= false
  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 533
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