© John Mair (Banisterfiend) 2018
(Создатель)
© Kyrylo Silin (Kyrylosilin) 2018
(Содействие)
Выпускники:
Ссылки:
PRY - это консоль разработчика времени выполнения и альтернатива IRB с мощными возможностями самоанализа. Pry стремится быть больше, чем замена IRB. Это попытка привести программирование, управляемое Repl, на рубиновый язык.
edit Class#method
)cd
, ls
и друзья) gem 'pry' , '~> 0.15.0'
gem install pry
PRY довольно гибкий и обеспечивает значительную настройку пользователя. Тривиально читать из любого объекта, который имеет метод readline
, и записать в любой объект, который имеет метод puts
. Многие другие аспекты PRY также настраиваются, что делает его хорошим выбором для реализации пользовательских оболочек.
Pry поставляется с исполняющим файлом, чтобы его можно было вызвать в командной строке. Просто введите pry
, чтобы начать. pryrc
-файл в $XDG_CONFIG_HOME/pry/
или домашний каталог пользователя будет загружен, если он будет существует. Введите pry --help
в командной строке для получения дополнительной информации.
Почти каждая функциональность в сеансе PRY реализована как команда. Команды не являются методами и должны начинаться в начале строки, без пробелов между ними. Команды поддерживают гибкий синтаксис и разрешают «параметры» так же, как команды Shell, например, в следующей команде PRY отобразит список всех методов частного экземпляра (в объеме), которые начинаются с «PA»
pry ( YARD :: Parser :: SourceParser ) : 5 > ls - Mp -- grep ^ pa
YARD :: Parser :: SourceParser #methods: parse parser_class parser_type parser_type= parser_type_for_filename
PRY позволяет нам входить и выходить из разных областей (объектов), используя команду cd
. Это позволяет нам исследовать представление о программе или библиотеке. Чтобы просмотреть, какие переменные и методы доступны в определенной области, мы используем универсальную команду LS.
Здесь мы начнем на верхнем уровне, а затем в классе, а затем на переменной экземпляра внутри этого класса:
pry ( main ) > class Hello
pry ( main ) * @x = 20
pry ( main ) * end
=> 20
pry ( main ) > cd Hello
pry ( Hello ) : 1 > ls - i
instance variables : @x
pry ( Hello ) : 1 > cd @x
pry ( 20 ) : 2 > self + 10
=> 30
pry ( 20 ) : 2 > cd ..
pry ( Hello ) : 1 > cd ..
pry ( main ) > cd ..
Число после :
в приглашении PRY указывает уровень гнездования. Чтобы показать больше информации о гнездовании, используйте команду nesting
. Например
pry ( "friend" ) : 3 > nesting
Nesting status :
0 . main ( Pry top level )
1 . Hello
2 . 100
3 . "friend"
=> nil
Затем мы можем вернуться к любому из предыдущих уровней гнездования, используя команду jump-to
:
pry ( "friend" ) : 3 > jump - to 1
= > 100
pry ( Hello ) : 1 >
PRY может быть вызван в середине программы бега. Он открывает сессию PRY в тот момент, когда он называется, и делает все государственные программы в этой точке. Это может быть вызвано на любом объекте, используя синтаксис my_object.pry
или на текущем привязке (или любое привязку) с использованием binding.pry
. Затем сеанс PRY начнется в рамках объекта (или привязки). Когда сеанс заканчивается, программа продолжается с любыми изменениями, которые вы внесли в нее.
Эта функциональность может использоваться для таких вещей, как: отладка, реализация консолей разработчиков и применение горячих патчей.
код:
# test.rb
require 'pry'
class A
def hello ( ) puts "hello world!" end
end
a = A . new
# start a REPL session
binding . pry
# program resumes here (after pry session)
puts "program resumes here."
PRY SESSION:
pry ( main ) > a . hello
hello world!
=> nil
pry ( main ) > def a . goodbye
pry ( main ) * puts "goodbye cruel world!"
pry ( main ) * end
=> :goodbye
pry ( main ) > a . goodbye
goodbye cruel world!
=> nil
pry ( main ) > exit
program resumes here .
Линия ввода, которая начинается с '.' будет направлен в командную оболочку. Это позволяет нам ориентироваться в файловой системе, порождать редакторы, запускать GIT и грабли прямо из Pry.
Кроме того, мы можем использовать команду shell-mode
для включения настоящего рабочего каталога в подсказку PRY и внести (ограниченное на этом этапе, извините). Мы также можем интерполировать Ruby Code непосредственно в оболочку, используя обычный #{}
синтаксис интерполяции строки.
В приведенном ниже коде мы собираемся переключиться на shell-mode
и отредактировать файл pryrc
. Затем мы будем кофицировать его содержимое и перезагрузить файл.
pry ( main ) > shell - mode
pry main : /home/john / ruby / projects / pry $ . cd ~
pry main : /home/john $ . emacsclient . pryrc
pry main : /home/john $ . cat . pryrc
def hello_world
puts "hello world!"
end
pry main : /home/john $ load ".pryrc"
=> true
pry main : /home/john $ hello_world
hello world!
Мы также можем интерполировать Ruby Code в оболочку. В приведенном ниже примере мы используем команду Shell cat
в случайном файле из текущего каталога и подсчитываем количество строк в этом файле с помощью wc
:
pry main : /home/john $ . cat #{Dir['*.*'].sample} | wc -l
44
Вы можете просмотреть исходный код метода с помощью команды show-source
. Почти все методы Ruby (и некоторые методы C, с Gem Pry-Doc) могут просмотреть их источник. Код, который длиннее страницы, отправляется через пейджер (например, меньше), а весь код правильно выделен синтаксисом (даже C -код).
Команда show-source
принимает два синтаксиса, типичный синтаксис Class#method
, а также просто название метода, который находится в области. При желании вы можете передать опцию -l
, чтобы show-source
, чтобы включить номера строк в вывод.
В следующем примере мы введем класс Pry
, перечислите методы экземпляра, начиная с «SE», и отобразить исходный код для метода set_last_result
:
pry ( main ) > cd Pry
pry ( Pry ) : 1 > ls - M -- grep se
Pry #methods: raise_up raise_up! raise_up_common reset_eval_string select_prompt set_last_result
pry ( Pry ) : 1 > show - source set_last_result - l
From : /home/john / ruby / projects / pry / lib / pry / pry_instance . rb : 405 :
Owner : Pry
Visibility : public
Signature : set_last_result ( result , code = ?)
Number of lines : 6
405 : def set_last_result ( result , code = "" )
406 : @last_result_is_exception = false
407 : @output_ring << result
408 :
409 : self . last_result = result unless code =~ / A s * z /
410 : end
Обратите внимание, что мы также можем просматривать методы C (из Ruby Core), используя плагин pry-doc
; Мы также демонстрируем альтернативный синтаксис для show-source
:
pry ( main ) > show - source Array #select
From : array . c in Ruby Core ( C Method ) :
Number of lines : 15
static VALUE
rb_ary_select ( VALUE ary )
{
VALUE result ;
long i ;
RETURN_ENUMERATOR ( ary , 0 , 0 ) ;
result = rb_ary_new2 ( RARRAY_LEN ( ary ) ) ;
for ( i = 0 ; i < RARRAY_LEN ( ary ) ; i ++ ) {
if ( RTEST ( rb_yield ( RARRAY_PTR ( ary ) [ i ] ) ) ) {
rb_ary_push ( result , rb_ary_elt ( ary , i ) ) ;
}
}
return result ;
}
Одним из случаев использования для PRY является изучение программы во время выполнения с помощью cd
-инга в и вне объектов, а также просмотра и вызов методов. В ходе изучения его может быть полезно для прочтения документации для конкретного метода, с которым вы сталкиваетесь. Команда show-source
поддерживает два синтаксиса - обычный синтаксис ri
, а также принимает имя любого метода, который в настоящее время находится в области.
Система документов PRY не полагается на предварительно сгенерированный rdoc
или ri
, вместо этого она захватывает комментарии непосредственно над методом по требованию. Это приводит к более быстрому поиску документации и позволяет системе PRY извлекать документацию для методов, которые не будут подхвачены rdoc
. Pry также имеет базовое понимание как форматов RDOC, так и двора и попытается синтаксис подчеркнуть документацию надлежащим образом.
Тем не менее, функциональность ri
очень хороша и имеет преимущество перед системой PRY в том смысле, что она позволяет искать документацию для классов, а также методов. Поэтому Pry имеет хорошую интеграцию с ri
через команду ri
. Синтаксис для команды точно так же, как это было бы в командной строке, поэтому нет необходимости цитировать строки.
В нашем примере мы введем класс Gem
и просматрим документацию для метода try_activate
:
pry ( main ) > cd Gem
pry ( Gem ) : 1 > show - source try_activate - d
From : /Users/john / rbenv / versions / 2.7 . 1 / lib / ruby / 2.7 . 0 / rubygems . rb : 194 :
Owner : #<Class:Gem>
Visibility : public
Signature : try_activate ( path )
Number of lines : 28
Try to activate a gem containing path . Returns true if
activation succeeded or wasn 't needed because it was already
activated. Returns false if it can' t find the path in a gem .
def self . try_activate ( path )
# finds the _latest_ version... regardless of loaded specs and their deps
# if another gem had a requirement that would mean we shouldn't
# activate the latest version, then either it would already be activated
# or if it was ambiguous (and thus unresolved) the code in our custom
# require will try to activate the more specific version.
spec = Gem :: Specification . find_by_path path
pry ( Gem ) : 1 >
Мы также можем использовать ri
нормальным образом:
pry ( main ) ri Array #each
----------------------------------------------------------- Array #each
array . each { | item | block } -> array
------------------------------------------------------------------------
Calls _block_ once for each element in _self_ , passing that element
as a parameter .
a = [ "a" , "b" , "c" ]
a . each { | x | print x , " -- " }
produces :
a -- b -- c --
Вы можете использовать edit Class#method
или edit my_method
(если метод в области объема), чтобы открыть метод для редактирования непосредственно в вашем любимом редакторе. Pry имеет знания о нескольких разных редакторах и попытается открыть файл в строке, определяемый методом.
Вы можете установить редактор для использования, назначив аксессуру Pry.editor
. Pry.editor
по умолчанию в $EDITOR
или сбой, который будет использовать nano
в качестве резервного копирования по умолчанию. Отредактированный файл будет автоматически перезагружаться после выхода из редактора -перезагрузка может быть подавлена путем передачи опции --no-reload
для edit
В приведенном ниже примере мы установим наш редактор по умолчанию в «Emacsclient» и откроем метод Pry#repl
для редактирования:
pry ( main ) > Pry . editor = "emacsclient"
pry ( main ) > edit Pry #repl
Многие другие команды доступны в Pry; Чтобы увидеть полную help
типа списка в приглашении. Краткое описание каждой команды предоставлено основными инструкциями для использования; Некоторые команды имеют более обширную помощь, к которой можно получить доступ с помощью typling command_name --help
. Команда обычно будет говорить в своем описании, если доступен опция --help
.
Вы можете запустить Pry Console в среде вашего приложения, используя флаг PRY -r
:
pry -r ./config/environment
Или запустите консоль Rails ( bin/rails console
), а затем введите pry
.
Также можно использовать PRY в качестве консоли Rails, добавив драгоценный камень Pry-Rails в свой Gemfile. Это заменяет консоль по умолчанию на PRY, в дополнение к загрузке помощников консоли рельсов и добавлению некоторых полезных команд, специфичных для рельсов.
Обратите внимание, что pry-rails
в настоящее время не поддерживается.
Также ознакомьтесь с вики для получения дополнительной информации об интеграции PRY с Rails.
Синтаксическое выделение по умолчанию в Pry. Если вы хотите изменить цвета, проверьте драгоценный камень.
Вы можете переключить синтаксис, выделяющий и выключенный в сеансе, используя команду toggle-color
. В качестве альтернативы, вы можете навсегда отключить его, поместив линию Pry.color = false
в свой файл pryrc
.
В случае, если у вас есть проблема, вопрос или отчет об ошибках, не стесняйтесь:
Проект использует лицензию MIT. Смотрите License.md для деталей.
PRY - это в первую очередь работа Джона Мэйра (Banisterfiend), для полного списка участников, см. График участников.