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 .
- pryguide : berikut adalah- pryinformasi 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!