Spec-Zone.ru › Ruby 2.6

класс 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__
          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__
          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, основанный на значении, предоставленном пользователем для заданного параметра с именем «имя». Необходимо создать параметр класса перед вызовом этого метода для каждого указанного имени.

Примеры

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 и необязательную команду.

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

Также можно указать блок для настройки того, как будет вызываться параметр. Блок принимает два параметра: экземпляр текущего класса и вызываемый 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