REPL
REPL
dalam dunia pengembangan setinggi lutut adalah untuk Baca → Evaluasi → Loop Cetak . Baca, dieksekusi, dicetak, dan berkali-kali.
Ruby, seperti banyak bahasa lainnya, hadir dengan implementasi REPL sendiri yang disebut irb
. Yang, meskipun mengatasi tugas-tugas primitif, masih tidak dapat sepenuhnya memenuhi tuntutan pengembang yang cerdas. Tetapi ada alternatif yang jauh lebih berkembang: pry
.

Berikut ini kutipan dari situs web resmi pry
:
Pry adalah alternatif yang kuat untuk bungkus standar Ruby IRB. Dengan penyorotan sintaksis , arsitektur plugin yang fleksibel , panggilan runtime, dan melihat sumber dan dokumentasi .
Dan ini bukan hanya iklan bla bla bla. Ini benar Saya akan menunjukkan cara menginstal dan mengkonfigurasi pry
dengan semua lonceng dan peluit untuk memuaskan pengembang paling canggih. Diasumsikan bahwa versi kerja Ruby saat ini diinstal dan dijalankan pada mesin target.
Persiapan
Pergi ke konsol dan jalankan perintah:
$ gem install pry pry-theme awesome_print coderay
Semuanya, kami sepenuhnya siap. Ayo jalankan ... ... dan pastikan tidak ada perbedaan dibandingkan dengan irb
. Tiba-tiba tidak terlalu baik.
Kalau begitu, mari kita ajar anak pry
menjadi sedikit lebih pintar.
File konfigurasi
Ini .pryrc
. Sudah ada file konfigurasi di direktori home yang memberi tahu cara melihat dan bagaimana berperilaku dalam masyarakat yang layak. Jika tidak, Anda dapat membuatnya dengan perintah cd && touch .pryrc
.
Mengisi instruksi .pryrc
Saya akan menunjukkan berbagai fitur langkah demi langkah. Untuk yang tidak sabar: gist .pryrc
.
pry
guide : berikut adalah pry
informasi berguna untuk prist yang berpengalaman,- tema
pry
: pertanyaan, jawaban, dll.
Editor default
Pry.editor = 'vi'
Mengkonfigurasi editor yang akan digunakan untuk mengedit konteks saat ini (perintah edit
).
Command prompt
Pry.config.prompt = [ ->(_obj, _nest_level, _) { "✎ " }, ->(*) { " " } ]
.pryrc
hanyalah file .pryrc
, sehingga proses ini dapat mengeksekusi kode apa pun yang Anda inginkan, atau bahkan menambang bitcoin saat Anda menunggu prompt berikutnya muncul.
Tingkat pertama dan tingkat bersarang (blok dalam) dapat ditarik dengan cara yang berbeda. Sebelumnya, saya menggunakan segitiga berarsir hitam, yang memotong parser bodoh untuk tingkat pertama dan ▷ untuk yang bersarang, tetapi secara bertahap sampai pada kesimpulan bahwa tidak adanya karakter asing di dalam snippet membuatnya lebih mudah untuk menyalin fragmen di mana saja. Oleh karena itu begitu.
Warna
Untuk mendukung tema, pry-theme
gem digunakan. Saya menggunakan pewarnaan sintaks (dan ketika bosan, saya menjalankan PRY_BW=true pry
). Untuk folder yang menjalankan Rails (berisi proyek Rails ) warnanya bisa lebih mewah, tapi saya benci Rails , dan karena itu apa yang terjadi di sana, saya tidak bisa mengatakannya dengan pasti.
unless ENV['PRY_BW'] Pry.color = true Pry.config.theme = "railscasts" Pry.config.prompt = PryRails::RAILS_PROMPT if defined?(PryRails::RAILS_PROMPT) Pry.config.prompt ||= Pry.prompt end
Ceritanya
Ini hanya sebuah penemuan. Saat dalam mode debug, atau jika perintah dijalankan segera sebelum itu, cukup tekan ⏎ dan itu akan diulang. Ini sangat berguna untuk beralih ke kode di debugger (jika Anda, tentu saja, menggunakan debugger sama sekali, dan jangan memperbaiki semua kesalahan dengan tampilan tetap, misalnya tidak pernah meluncurkan debugger seperti saya, misalnya).
Pry.config.history.should_save = true Pry::Commands.command /^$/, "repeat last command" do _pry_.run_command Pry.history.to_a.last end
Tim
Debugger Motor itu bukan milik saya, saya hanya meminjam lima baris ini dari rekan setim saya, yang menghabiskan seluruh hidupnya dalam debugging, tetapi, kata mereka, itu berhasil.
Pry.commands.alias_command 'c', 'continue' rescue nil Pry.commands.alias_command 's', 'step' rescue nil Pry.commands.alias_command 'n', 'next' rescue nil Pry.commands.alias_command 'f', 'finish' rescue nil Pry.commands.alias_command 'l', 'whereami' rescue nil
Modul / Kelas Deskripsi Konfigurasi
Pry.config.ls.separator = "\n"
Tampaknya tidak ada yang perlu dikomentari.
Panggil Utilitas Sistem
Pry
mendukung utilitas sistem panggilan (cukup tambahkan satu titik sebelum nama perintah tanpa spasi, .ls
, atau .ps axu
).
Plugin
Di bawah ini adalah contoh paling sederhana dari konfigurasi plugin. Tidak ada yang suka konfigurasi kembung, kami memolesnya dan membawanya sekitar selama beberapa dekade dengan mesin yang berbeda. Cuplikan di bawah ini hanyalah contoh (untuk plugin yang awesome
). Komentar dalam kode berbicara sendiri.
Tim khusus
Apakah saya menyebutkan bahwa mungkinkah REPL yang sangat keren? Kita bahkan dapat mendefinisikan set perintah kita sendiri untuk digunakan di dalam pry
. Contoh di bawah ini menunjukkan cara membuat perintah sql
untuk mengeksekusi SQL murni dari konsol (asalkan kita memiliki koneksi AR yang berfungsi) - dengan jumlah penekanan tombol minimum.
default_command_set = Pry::CommandSet.new do command "sql", "Send sql over AR." do |query| if ENV['RAILS_ENV'] || defined?(Rails) pp ActiveRecord::Base.connection.select_all(query) else pp "No rails env defined" end end end Pry.config.commands.import default_command_set
Monkeipatch dan Global
Ya, kami dapat mengkustomisasi dan mengeksekusi kode Ruby apa pun dengan monkeypatch kami sendiri, yang hanya akan tersedia dalam sesi pry
. Sebagai contoh, saya menemukan kode ini sangat nyaman untuk menguji kode yang beroperasi dengan array dan hash.
class Array def self.sample(count = 10, &block) Array.new(count, &(block || :succ)) end end Hash.singleton_class.prepend(Module.new def sample(count = 10) (?a...count.times.reduce(?a) { |o| o.succ }). map(&:to_sym).zip(0...count).to_h end end)
Catatan: jika Anda berpikir cuplikan di atas terlalu rumit oleh Integer#succ
, Anda mungkin tidak pernah berurusan dengan hash panjang dengan lebih dari 26 kunci :)
Penyesuaian warna
Semuanya di bawah ini untuk menyesuaikan warna menggunakan permata coderay
. Hasilnya sepadan. Simbol-simbolnya merah, dan angkanya biru, dan semua jazz itu.
CodeRay.scan("example", :ruby).term
Kesimpulannya
Saya harap posting ini memberikan kesan pertama tentang apa itu pry
dan mengapa lebih baik daripada irb
. Saya tidak terlalu fokus pada proses debugging, terutama karena saya tidak melakukan debugging, tetapi menulis kode yang benar dari awal. Tapi saya harap saya bisa menarik perhatian mereka yang melihat kombinasi huruf ini - pry
- untuk pertama kalinya - setidaknya mencoba. Percayalah, itu sepadan.
Replika yang bagus!