Spec-Zone.ru › Ruby 2.7

класс Bundler::Thor::Group

Родитель:
Объект
Включенные модули:
Bundler::Thor::Base

Bundler::Thor имеет специальный класс, называемый Bundler::Thor::Group. Основное отличие от класса Bundler::Thor заключается в том, что он вызывает все команды сразу. Он также включает некоторые методы, позволяющие выполнять вызовы на уровне метода класса, которые недоступны командам Bundler::Thor.

Общедоступные методы класса

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

Описание для этой Bundler::Thor::Group. Если описание не указано, но существует корневой каталог, пытается найти USAGE в папке выше, в противном случае ищет в родительском классе.

Параметры

description<String>

Описание для этой Bundler::Thor::Group.

help(shell) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/group.rb, line 29
def help(shell)
  shell.say "Usage:"
  shell.say "  #{banner}\n"
  shell.say
  class_options_help(shell)
  shell.say desc if desc
end

Выводит справочную информацию.

Опции

short

Если true, отображает только использование.

invoke(*names, &block) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/group.rb, line 56
    def invoke(*names, &block)
      options = names.last.is_a?(Hash) ? names.pop : {}
      verbose = options.fetch(:verbose, true)

      names.each do |name|
        invocations[name] = false
        invocation_blocks[name] = block if block_given?

        class_eval <<-METHOD, __FILE__, __LINE__ + 1
          def _invoke_#{name.to_s.gsub(/\W/, '_')}
            klass, command = self.class.prepare_for_invocation(nil, #{name.inspect})

            if klass
              say_status :invoke, #{name.inspect}, #{verbose.inspect}
              block = self.class.invocation_blocks[#{name.inspect}]
              _invoke_for_class_method klass, command, &block
            else
              say_status :error, %(#{name.inspect} [not found]), :red
            end
          end
        METHOD
      end
    end

Вызывает указанное пространство имен или класс. Добавляет метод экземпляра, который вызовет klass и команду. Можно передать блок для настройки способа вызова.

Указанное пространство имен/класс будет отображать свои опции в справке по использованию. Дополнительную информацию см. в invoke_from_option.

invoke_from_option(*names, &block) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/group.rb, line 110
    def invoke_from_option(*names, &block)
      options = names.last.is_a?(Hash) ? names.pop : {}
      verbose = options.fetch(:verbose, :white)

      names.each do |name|
        unless class_options.key?(name)
          raise ArgumentError, "You have to define the option #{name.inspect} " \
                              "before setting invoke_from_option."
        end

        invocations[name] = true
        invocation_blocks[name] = block if block_given?

        class_eval <<-METHOD, __FILE__, __LINE__ + 1
          def _invoke_from_option_#{name.to_s.gsub(/\W/, '_')}
            return unless options[#{name.inspect}]

            value = options[#{name.inspect}]
            value = #{name.inspect} if TrueClass === value
            klass, command = self.class.prepare_for_invocation(#{name.inspect}, value)

            if klass
              say_status :invoke, value, #{verbose.inspect}
              block = self.class.invocation_blocks[#{name.inspect}]
              _invoke_for_class_method klass, command, &block
            else
              say_status :error, %(\#{value} [not found]), :red
            end
          end
        METHOD
      end
    end

Вызывает класс thor, основанный на значении, предоставленном пользователем для указанной опции с именем «name». Для каждого заданного имени необходимо создать опцию класса перед вызовом этого метода.

Примеры

class GemGenerator < Bundler::Thor::Group
  class_option :test_framework, :type => :string
  invoke_from_option :test_framework
end

Логические опции

В некоторых случаях необходимо вызвать класс thor, если опция имеет значение true или false. Это автоматически обрабатывается invoke_from_option. Затем имя опции используется для вызова генератора.

Подготовка к вызову

В некоторых случаях необходимо настроить способ вызова определенного хука. Это можно сделать, переопределяя метод класса prepare_for_invocation. Метод класса должен обязательно возвращать klass и необязательную команду.

Настраиваемые вызовы

Можно также передать блок для настройки того, как будет выполняться вызов опции. Блок получает два параметра: экземпляр текущего класса и вызываемый класс.

printable_commands(*) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/group.rb, line 199
def printable_commands(*)
  item = []
  item << banner
  item << (desc ? "# #{desc.gsub(/\s+/m, ' ')}" : "")
  [item]
end

Возвращает команды, готовые к печати.

Также алиасируется как: printable_tasks
printable_tasks(*)
Псевдоним для: printable_commands
remove_invocation(*names) Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/group.rb, line 149
def remove_invocation(*names)
  names.each do |name|
    remove_command(name)
    remove_class_option(name)
    invocations.delete(name)
    invocation_blocks.delete(name)
  end
end

Удаляет ранее добавленный вызов.

Примеры

remove_invocation :test_framework

Защищенные методы класса

banner() Показать исходный код
# File lib/bundler/vendor/thor/lib/thor/group.rb, line 238
def banner
  "#{basename} #{self_command.formatted_usage(self, false)}"
end

Заголовок для этого класса. Можно настроить, если класс thor вызывается иными способами, нежели через Bundler::Thor::Runner.

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