класс Bundler::Thor::Group
В Bundler::Thor есть специальный класс, называемый Bundler::Thor::Group. Основное отличие от класса Bundler::Thor заключается в том, что он вызывает все команды сразу. Он также включает некоторые методы, которые позволяют выполнять вызовы на уровне класса, недоступные командам Bundler::Thor.
Публичные методы класса
# 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.
# 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, отображает только информацию об использовании.
# 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 для получения дополнительной информации.
# 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.
# 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 Возвращает команды, готовые к печати.
# 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
Защищённые методы класса
# 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.