© John Mair (Banisterfiend) 2018
(창조자)
© Kyrylo Silin (Kyrylosilin) 2018
(관리자)
동문 :
모래밭:
Pry는 강력한 내성 기능을 갖춘 런타임 개발자 콘솔 및 IRB 대안입니다. Pry는 IRB 교체 이상의 것을 목표로합니다. REPL Driven Programming을 루비 언어로 가져 오려는 시도입니다.
edit Class#method
)cd
, ls
및 친구) gem 'pry' , '~> 0.15.0'
gem install pry
Pry는 상당히 유연하며 상당한 사용자 사용자 정의를 허용합니다. readline
메소드가있는 모든 객체에서 읽고 puts
메소드가있는 객체에 쓸 수는 없습니다. Pry의 다른 많은 측면도 구성 가능하므로 사용자 정의 쉘을 구현하기에 적합합니다.
Pry는 실행 파일과 함께 제공되므로 명령 줄에서 호출 할 수 있습니다. 시작하려면 pry
에 들어가십시오. $XDG_CONFIG_HOME/pry/
또는 사용자의 홈 디렉토리의 pryrc
파일이 존재하면로드됩니다. 자세한 내용은 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를 시작한 다음 클래스에서 Pry를 시작한 다음 해당 클래스 내부의 인스턴스 변수를 사용합니다.
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
Command를 사용하여 이전 둥지 레벨로 돌아갈 수 있습니다.
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 ( 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 프롬프트에 통합하고 파일 이름 완료를 가져옵니다 (이 단계에서 제한). 또한 일반 #{}
문자열 보간 구문을 사용하여 루비 코드를 쉘에 직접 보간 할 수 있습니다.
아래 코드에서는 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!
우리는 또한 루비 코드를 쉘에 보간 할 수도 있습니다. 아래의 예에서는 현재 디렉토리의 임의 파일에서 Shell Command cat
사용하고 해당 파일의 라인 수를 wc
로 계산합니다.
pry main : /home/john $ . cat #{Dir['*.*'].sample} | wc -l
44
show-source
명령으로 메소드 소스 코드를 찾아 볼 수 있습니다. 거의 모든 루비 방법 (및 Pry-Doc Gem이있는 일부 C 방법)은 소스를 볼 수 있습니다. 페이지보다 긴 코드는 호출기를 통해 전송되며 (예 : 적은) 모든 코드는 올바르게 구문이 강조 표시됩니다 (심지어 C 코드).
show-source
명령은 일반적인 RI 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
pry-doc
플러그인을 사용하여 C 메소드 (Ruby Core)를 볼 수도 있습니다. 또한 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
Command는 두 개의 구문을 지원합니다. 일반 ri
구문과 현재 범위에있는 모든 메소드의 이름을 수락합니다.
Pry Documentation System은 사전 생성 된 rdoc
또는 ri
에 의존하지 않고 대신 주문형 메소드 바로 위의 주석을 가져옵니다. 이로 인해 더 빠른 문서 검색이 발생하고 PRY 시스템이 rdoc
에서 선택하지 않은 메소드에 대한 문서를 검색 할 수 있습니다. Pry는 또한 RDOC 및 Yard 형식 모두에 대한 기본적인 이해를 가지고 있으며 문서를 적절하게 강조 표시하려고 시도합니다.
그럼에도 불구하고, 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
Accessor에 할당하여 편집기를 설정할 수 있습니다. Pry.editor
기본값으로 $EDITOR
에 기본값을 받거나 nano
백업 기본값으로 사용하는 실패합니다. 편집자를 종료 한 후 편집 된 파일은 자동 edit
다시로드됩니다 --no-reload
아래의 예에서는 기본 편집기를 "emacsclient"로 설정하고 편집을위한 Pry#repl
메소드를 엽니 다.
pry ( main ) > Pry . editor = "emacsclient"
pry ( main ) > edit Pry #repl
다른 많은 명령은 Pry에서 사용할 수 있습니다. 프롬프트에서 전체 목록 유형 help
확인하십시오. 각 명령에 대한 간단한 설명에는 사용을위한 기본 지침이 제공됩니다. 일부 명령에는 typing command_name --help
통해 액세스 할 수있는보다 광범위한 도움이 있습니다. --help
옵션을 사용할 수있는 경우 명령은 일반적으로 설명에 설명합니다.
Pry의 -r
플래그를 사용하여 앱 환경에서 Pry 콘솔을 실행할 수 있습니다.
pry -r ./config/environment
또는 Rails 콘솔 ( bin/rails console
)을 시작한 다음 pry
입력하십시오.
Pry-Rails 보석을 보석에 추가하여 Pry Pry를 Rails 콘솔로 사용할 수도 있습니다. 이는 기본 콘솔을 PRY로 대체 할뿐만 아니라 Rails Console Helpers를로드하고 유용한 Rails 특정 명령을 추가합니다.
pry-rails
는 현재 유지 관리되지 않습니다.
또한 Pry와 Rails를 통합하는 것에 대한 자세한 내용은 Wiki를 확인하십시오.
구문 강조 표시는 기본적으로 Pry에서 켜져 있습니다. 색상을 변경하려면 Pry-Theme Gem을 확인하십시오.
toggle-color
명령을 사용하여 세션에서 구문 강조 표시를 전환 할 수 있습니다. 또는 Pry.color = false
pryrc
파일에 넣어 영구적으로 끄면 영구적으로 끄십시오.
문제, 질문 또는 버그 보고서가있는 경우 : 자유롭게하십시오.
이 프로젝트는 MIT 라이센스를 사용합니다. 자세한 내용은 License.md를 참조하십시오.
Pry는 주로 John Mair (Banisterfiend)의 작품입니다. 기고자의 전체 목록은 기고자 그래프를 참조하십시오.