Попытка запустить команду pry в пользовательской команде pry

Я пытаюсь немного настроить свой Pry (использую Pry некоторое время, но это первый раз, когда я пытаюсь создать команду). Я хочу создать пользовательскую команду, которая будет получать последние пятьдесят элементов из моей истории. и я строю это так:

Pry::Commands.block_command "fifty", "List the last fifty inputs" do
  hist --tail=50 -a
end

Как только это будет в моем файле .pryrc, оно показывает, делаю ли я «помощь пятьдесят», но если я пытаюсь запустить команду, я получаю следующее:

NameError: undefined local variable or method `a' for #<#<Class:0x007f8a1ee49aa8>:0x007f8a1e873ed0>

Я предполагаю, что есть некоторая проблема с областью действия команды в блоке выполнения, но мой поиск документации Pry не дал мне никаких идей о том, как действовать дальше. Другие команды, которые не пытаются копировать команды Pry cl, такие как в примере

Pry::Commands.block_command "hello", "Say hello to three people" do |x, y, z|
  output.puts "hello there #{x}, #{y}, and #{z}!"
end

работать просто отлично. Любой вклад приветствуется.


person Jonathon Nordquist    schedule 02.10.2018    source источник
comment
hist --tail=50 -a для меня не похоже на код ruby, вы пытаетесь выполнить внешнюю команду, как если бы ruby ​​был языком сценариев оболочки? Если это так, вам нужно использовать операторы обратной кавычки или что-то вроде system. Если это команда, которую понимает сам pry, то вам, вероятно, нужно вызвать какой-нибудь Pry API и передать команду в виде строки.   -  person SirDarius    schedule 02.10.2018
comment
Вы правы в том, что это не код Ruby, у Pry REPL есть собственный язык сценариев, который и есть. Документация, регулирующая это, не совсем ясна, когда дело доходит до помещения этих скриптов в командный блок (фактический код Ruby работает без проблем).   -  person Jonathon Nordquist    schedule 04.10.2018


Ответы (1)


Вам не хватает run, необходимого для запуска других pry команд:

Pry::Commands.block_command 'fifty', 'List the last fifty inputs' do |x|
  run 'hist --tail=50 -a'
end
person anothermh    schedule 03.10.2018
comment
И это сработало как шарм! Не знаю, как я пропустил это, когда настраивал это, но метод запуска — это секретный соус, который мне был нужен. Не могу отблагодарить вас, вы даже не представляете, насколько это повысит мою продуктивность. - person Jonathon Nordquist; 04.10.2018