© John Mair (Banisterfiend) 2018
(Pencipta)
© Kyrylo Silin (Kyrylosilin) 2018
(Pemelihara)
Alumni:
Tautan:
Pry adalah konsol pengembang runtime dan alternatif IRB dengan kemampuan introspeksi yang kuat. Pry bertujuan untuk menjadi lebih dari sekadar penggantian IRB. Ini adalah upaya untuk membawa pemrograman yang digerakkan oleh Rept ke bahasa Ruby.
edit Class#method
)cd
, ls
dan teman) gem 'pry' , '~> 0.15.0'
gem install pry
Pry cukup fleksibel dan memungkinkan kustomisasi pengguna yang signifikan. Adalah sepele untuk dibaca dari objek apa pun yang memiliki metode readline
dan menulis ke objek apa pun yang memiliki metode puts
. Banyak aspek lain dari PRY juga dapat dikonfigurasi, menjadikannya pilihan yang baik untuk mengimplementasikan cangkang khusus.
Pry dilengkapi dengan yang dapat dieksekusi sehingga dapat dipanggil di baris perintah. Cukup masukkan pry
untuk memulai. File pryrc
di $XDG_CONFIG_HOME/pry/
atau direktori home pengguna akan dimuat jika ada. Ketik pry --help
di baris perintah untuk informasi lebih lanjut.
Hampir setiap fungsi dalam sesi pencopokan diimplementasikan sebagai perintah. Perintah bukanlah metode dan harus dimulai pada awal baris, tanpa spasi putih di antaranya. Perintah mendukung sintaks yang fleksibel dan mengizinkan 'opsi' dengan cara yang sama seperti perintah shell, misalnya perintah pry berikut akan menampilkan daftar semua metode instance pribadi (dalam ruang lingkup) yang dimulai dengan '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 memungkinkan kita untuk keluar dan keluar dari lingkup yang berbeda (objek) menggunakan perintah cd
. Ini memungkinkan kami untuk menjelajahi tampilan run-time dari suatu program atau perpustakaan. Untuk melihat variabel dan metode mana yang tersedia dalam ruang lingkup tertentu, kami menggunakan perintah LS serbaguna.
Di sini kita akan mulai mencabut level atas, lalu mencabut kelas dan kemudian pada variabel instan di dalam kelas itu:
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 ..
Angka setelah :
di prompt PRY menunjukkan level bersarang. Untuk menampilkan lebih banyak informasi tentang bersarang, gunakan perintah nesting
. Misalnya
pry ( "friend" ) : 3 > nesting
Nesting status :
0 . main ( Pry top level )
1 . Hello
2 . 100
3 . "friend"
=> nil
Kita kemudian dapat melompat kembali ke salah satu level bersarang sebelumnya dengan menggunakan perintah jump-to
:
pry ( "friend" ) : 3 > jump - to 1
= > 100
pry ( Hello ) : 1 >
Pry dapat dipanggil di tengah -tengah program yang sedang berjalan. Ini membuka sesi canggih pada saat itu disebut dan membuat semua program program pada saat itu tersedia. Ini dapat dipanggil pada objek apa pun menggunakan sintaks my_object.pry
atau pada pengikatan saat ini (atau pengikatan apa pun) menggunakan binding.pry
. Sesi Pry kemudian akan dimulai dalam ruang lingkup objek (atau mengikat). Ketika sesi berakhir, program berlanjut dengan modifikasi apa pun yang Anda buat untuk itu.
Fungsionalitas ini dapat digunakan untuk hal -hal seperti: men -debug, menerapkan konsol pengembang dan menerapkan tambalan panas.
kode:
# 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."
Sesi Pry:
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 .
Garis input yang dimulai dengan A '.' akan diteruskan ke shell perintah. Ini memungkinkan kami untuk menavigasi sistem file, memicu editor, dan menjalankan git dan menyapu langsung dari dalam Pry.
Lebih lanjut, kita dapat menggunakan perintah shell-mode
untuk memasukkan direktori kerja saat ini ke dalam Pry Prompt dan membawa (terbatas pada tahap ini, maaf) Penyelesaian nama file. Kami juga dapat menginterpolasi kode ruby langsung ke shell dengan menggunakan sintaks interpolasi string #{}
normal.
Dalam kode di bawah ini kita akan beralih ke shell-mode
dan mengedit file pryrc
. Kami akan mendapatkan kontennya dan memuat ulang file.
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!
Kami juga dapat menginterpolasi kode ruby ke dalam shell. Dalam contoh di bawah ini kami menggunakan cat
Command Cat pada file acak dari direktori saat ini dan menghitung jumlah baris dalam file tersebut dengan wc
:
pry main : /home/john $ . cat #{Dir['*.*'].sample} | wc -l
44
Anda dapat menelusuri kode sumber metode dengan perintah show-source
. Hampir semua metode Ruby (dan beberapa metode C, dengan permata Pry-Doc) dapat dilihat sumbernya. Kode yang lebih panjang dari satu halaman dikirim melalui pager (seperti lebih sedikit), dan semua kode disorot dengan benar (bahkan kode C).
Perintah show-source
menerima dua sintaksis, sintaks Class#method
RI tipikal dan juga hanya nama metode yang ada dalam ruang lingkup. Anda secara opsional dapat melewati opsi -l
untuk show-source
untuk memasukkan nomor baris dalam output.
Dalam contoh berikut kita akan masuk ke kelas Pry
, daftar metode instance yang dimulai dengan 'SE' dan tampilkan kode sumber untuk metode 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
Perhatikan bahwa kita juga dapat melihat metode C (dari Ruby Core) menggunakan plugin pry-doc
; Kami juga memamerkan sintaks alternatif untuk 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 ;
}
Salah satu kasus penggunaan untuk PRY adalah menjelajahi program saat run-time dengan cd
-ing masuk dan keluar dari objek dan melihat dan memohon metode. Dalam proses penjelajahan itu mungkin berguna untuk membaca dokumentasi untuk metode tertentu yang Anda temui. Perintah show-source
mendukung dua sintaksis - sintaks ri
normal serta menerima nama metode apa pun yang saat ini dalam ruang lingkup.
Sistem dokumentasi PRY tidak bergantung pada rdoc
atau ri
yang dihasilkan sebelumnya, sebaliknya meraih komentar tepat di atas metode sesuai permintaan. Ini menghasilkan pengambilan dokumentasi yang lebih cepat dan memungkinkan sistem PRY untuk mengambil dokumentasi untuk metode yang tidak akan diambil oleh rdoc
. Pry juga memiliki pemahaman dasar tentang format RDOC dan halaman dan akan berusaha untuk menyoroti dokumentasi dengan tepat.
Meskipun demikian, fungsionalitas ri
sangat baik dan memiliki keunggulan dibandingkan sistem Pry karena memungkinkan pencarian dokumentasi untuk kelas serta metode. Oleh karena itu, canggih memiliki integrasi yang baik dengan ri
melalui perintah ri
. Sintaks untuk perintah tersebut persis seperti pada baris perintah - sehingga tidak perlu mengutip string.
Dalam contoh kami, kami akan memasuki kelas Gem
dan melihat dokumentasi untuk metode 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 >
Kami juga dapat menggunakan ri
dengan cara normal:
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 --
Anda dapat menggunakan edit Class#method
atau edit my_method
(jika metode ini dalam ruang lingkup) untuk membuka metode untuk mengedit langsung di editor favorit Anda. Pry memiliki pengetahuan tentang beberapa editor yang berbeda dan akan berusaha untuk membuka file di baris metode ini didefinisikan.
Anda dapat mengatur editor untuk digunakan dengan menugaskan ke Pry.editor
Accessor. Pry.editor
akan default ke $EDITOR
atau gagal yang akan menggunakan nano
sebagai default cadangan. File yang diedit akan secara otomatis dimuat ulang setelah keluar dari editor -pemuatan ulang dapat ditekan dengan melewati opsi --no-reload
untuk edit
Dalam contoh di bawah ini kami akan mengatur editor default kami ke "Emacsclient" dan buka metode Pry#repl
untuk mengedit:
pry ( main ) > Pry . editor = "emacsclient"
pry ( main ) > edit Pry #repl
Banyak perintah lain tersedia di Pry; Untuk melihat help
Jenis Daftar Lengkap di prompt. Deskripsi singkat dari setiap perintah disediakan dengan instruksi dasar untuk digunakan; Beberapa perintah memiliki bantuan yang lebih luas yang dapat diakses melalui pengetikan command_name --help
. Perintah biasanya akan mengatakan dalam deskripsinya jika opsi --help
tersedia.
Anda dapat menjalankan konsol Pry di lingkungan aplikasi Anda menggunakan bendera Pry's -r
:
pry -r ./config/environment
Atau mulai konsol rel ( bin/rails console
) dan kemudian ketik pry
.
Dimungkinkan juga untuk menggunakan PRY sebagai konsol rel Anda dengan menambahkan permata canggih ke gemfile Anda. Ini menggantikan konsol default dengan PRY, selain memuat pembantu konsol Rails dan menambahkan beberapa perintah khusus rel yang berguna.
Perhatikan bahwa pry-rails
saat ini tidak dipertahankan.
Lihat juga wiki untuk informasi lebih lanjut tentang mengintegrasikan Pry dengan Rails.
Penyorotan sintaksis aktif secara default di Pry. Jika Anda ingin mengubah warnanya, lihat permata tema-pry-theme.
Anda dapat beralih sintaksis menyorot dan mati dalam sesi dengan menggunakan perintah toggle-color
. Atau, Anda dapat mematikannya secara permanen dengan menempatkan garis Pry.color = false
dalam file pryrc
Anda.
Jika Anda memiliki masalah, pertanyaan atau laporan bug, jangan ragu untuk:
Proyek ini menggunakan lisensi MIT. Lihat lisensi.md untuk detailnya.
Pry terutama adalah karya John Mair (Banisterfiend), untuk daftar lengkap kontributor, lihat grafik kontributor.