Включение консоли для приложения Ruby

Я пытаюсь добавить консоль в свое приложение Ruby cli (очень похоже на консоль Rails), но не могу найти решение, которое делает то, что мне нужно:

  • Раскрашивание и подсветка синтаксиса
  • Возможность передавать переменные или использовать текущий контекст

Я хотел бы использовать pry, но не могу понять, как отключить контекст кода от распечатывается в начале сеанса. Я бы хотел, чтобы он немедленно начал сеанс, не выводя ничего, кроме приглашения.

Вот что в настоящее время печатается при запуске сеанса pry:

Frame number: 0/8

From: <file_path> @ line <#> <Class>#<method>:

    71: def console
    72:   client_setup
    73:   puts "Console Connected to #{@client.url}"
    74:   puts 'HINT: The @client object is available to you'
    75: rescue StandardError => e
    76:   puts "WARNING: Couldn't connect to #{@client.url}"
    77: ensure
    78:   Pry.config.prompt = proc { "> " }
    79:   binding.pry
 => 80: end
>

Вот что я хочу:

>

Я также пробовал несколько других решений, но вот мои проблемы с каждым:

  • IRB: без раскраски, не кажется настраиваемым
  • ripl: без раскрашивания или подсветки синтаксиса.

Любая помощь здесь будет принята с благодарностью!


person jsmartt    schedule 08.04.2016    source источник
comment
Похоже, вы пытаетесь заставить свою программу загружать Pry, но я думаю, что правильное решение - заставить Pry загружать вашу программу. Поместите код, который вы хотите запустить, до появления подсказки Pry в файле с именем, скажем, setup.rb. Затем запустите Pry с pry -r setup.rb.   -  person Jordan Running    schedule 08.04.2016


Ответы (2)


Обычно мы создаем в нашем проекте отдельный исполняемый файл, например bin / console, и помещаем туда содержимое, подобное этому:

#!/usr/bin/env ruby

require_relative "../application"

require "pry"
Pry.start

Где application.rb - это файл, который загружает драгоценные камни через Bundler и включает все необходимые файлы, связанные с приложением, поэтому можно будет использовать классы приложений в консоли.

Консоль легко запустить с помощью команды ./bin/console с вашего терминала.

Если вам нужно настроить внешний вид консоли, то официальная вики на github содержит достаточно информации об этом: https://github.com/pry/pry/wiki/Customization-and-configuration

person SunnyMagadan    schedule 08.04.2016
comment
Спасибо @SunnyMagadan. На самом деле я уже делаю все это в Thor cli, и есть некоторый установочный код, который я хотел бы использовать и поделиться для других команд cli. Главное, что я ищу, это то, какую опцию установить, чтобы отключить печать кода до начала сеанса. Я не нашел этого в вики. - person jsmartt; 09.04.2016
comment
... или если я смогу понять, как создать новую пустую привязку и поместить в нее переменную, это тоже было бы здорово. - person jsmartt; 09.04.2016

В итоге я определил довольно простой / пустой класс для привязки:

class Console
  def initialize(client)
    @client = client
  end
end

Затем в моем консольном методе:

Pry.config.prompt = proc { '> ' }
Pry.plugins['stack_explorer'] && Pry.plugins['stack_explorer'].disable!
Pry.start(Console.new(@client))

Отключение stack_explorer не позволило ему распечатать информацию о номере кадра, и внутри сеанса Pry я могу получить доступ к @client, как и ожидалось.

person jsmartt    schedule 08.04.2016