#ruby #thor
#рубиновый #thor
Вопрос:
Я пишу CLI gem с помощью Thor. Прямо сейчас у меня есть две подкоманды с именами, которые я хотел бы написать через дефис. Но я не могу понять, как заставить это работать.
Вот основной класс
module CLI
class Base < Thor
desc "api-token COMMAND", "Configure the API token"
subcommand "api-token", ApiToken
Вот класс подкоманды
module CLI
class ApiToken < Thor
include Shared
namespace "api-token"
Подкоманда отображается в основном help
выводе, и если я введу
$ bundle exec bin/cli help api-token
он показывает мне правильный вывод для действий подкоманд. Так что, по крайней мере, что-то подключается.
Но когда я пытаюсь использовать команду, это то, что я вижу
$ bundle exec bin/cli api-token set
> Could not find command "api-token".
Команда отлично работает, если я делаю это одним словом или использую подчеркивание, но я действительно предпочитаю дефис.
Комментарии:
1. Вы нашли решение этой проблемы? Я застрял с той же проблемой
2. Нет. Я отказался от попыток разобраться в этом. Тем не менее, я бы все равно хотел это изменить.
Ответ №1:
Там нет map
ничего обязательного, просто
class Test < Thor
desc 'howto-dash', "dash in command name"
def howto_dash
puts "dashing through the snow"
end
end
Выходной сигнал:
> thor list
test
----
thor test:howto-dash # dash in command name
Комментарии:
1. Наконец-то возвращаюсь к этому ответу. Меня бесит, насколько это было просто, столько времени я потратил на это.
2. Я обнаружил, что
thor
это всегда преобразует тире в символы подчеркивания перед вызовом метода; и вы можете предоставить всеdesc
, что захотите.
Ответ №2:
На случай, если кому-то это интересно, вы можете использовать Thor.map для сопоставления строки с методом / command. Ex.
desc "Command help", "Longer command description"
def package_all
puts "Packing..."
end
map "package-all" => "package_all"
Ссылка на документацию: Thor#map-class_method