Saya ingin menandai metode yang sudah usang, sehingga orang yang menggunakannya dapat dengan mudah memeriksa kode mereka dan mengejar ketinggalan. Di Java Anda mengatur @Deprecated dan semua orang tahu apa artinya ini.
Jadi apakah ada cara yang disukai (atau bahkan alat) untuk menandai dan memeriksa penghentian di Ruby?
ruby
deprecated
blindgaenger
sumber
sumber
Jawaban:
Untuk hampir semua kasus, tergantung pada pustaka atau metaprogramming untuk penghentian berlebihan. Cukup tambahkan komentar ke rdoc dan panggil
Kernel#warn
metode tersebut. Sebagai contoh:Jika Anda menggunakan Yard, bukan rdoc , komentar dokumen Anda akan terlihat seperti ini:
Terakhir, jika Anda mematuhi tomdoc , buat komentar Anda terlihat seperti ini:
Juga, jangan lupa untuk menghapus metode yang sudah usang dalam beberapa rilis mendatang (dan semver 'd) dengan benar . Jangan membuat kesalahan yang sama seperti yang dilakukan perpustakaan Java.
sumber
Perpustakaan Ruby Standar memiliki modul dengan logika peringatan: https://ruby-doc.org/stdlib/libdoc/rubygems/rdoc/Gem/Deprecate.html . Saya cenderung lebih suka mempertahankan pesan penghinaan saya dengan cara "standar":
Perhatikan bahwa dengan pendekatan ini Anda akan memperoleh informasi gratis tentang di mana panggilan berlangsung.
sumber
0
untuk literal numerik membuatnya menjadi oktal dan karenanya harus dihapus.deprecate :initialize, UseThisClassInstead, 2017, 5
Jika Anda ingin menjadi kejam (dalam tipu muslihat membantu) Anda dapat mencetak baris pertama dari callstack selama peringatan untuk memberi tahu para dev di mana mereka menggunakan panggilan yang sudah tidak digunakan lagi.
Ini berarti karena saya cukup yakin ini adalah hit kinerja.
Ketika digunakan dengan benar, ini akan mencakup jalur absolut ke file dan baris tempat panggilan yang sudah usang digunakan. Informasi lebih lanjut tentang Kernel :: caller tersedia di sini
sumber
Menggunakan ActiveSupport:
Peringatan dinonaktifkan di lingkungan produksi secara default
sumber
Anda juga dapat menggunakan
ActiveSupport::Deprecation
(tersedia dalam versi 4.0+), seperti:sumber
Anda punya
libdeprecated-ruby
(2010-2012, tidak tersedia lagi di rubygem pada 2015)Perpustakaan kecil yang dimaksudkan untuk membantu pengembang yang bekerja dengan kode yang sudah usang.
Idenya berasal dari
D
bahasa pemrograman ' ', di mana pengembang dapat menandai kode tertentu sebagai usang, dan kemudian memungkinkan / melarang kemampuan untuk mengeksekusi kode usang.sumber
Anda dapat menggunakan pola Kelas Macro dan menulis sesuatu seperti ini:
sumber
Saat menggunakan rails, Anda memiliki metode Modul # deprecate.
sumber
Canivete adalah permata yang memungkinkan Anda mencela metode Anda dengan cara yang sederhana dan elegan. Sedikit lagi di sini .
sumber
Saya akhirnya menggunakan metode ringan:
Kemudian untuk menghentikan metode masukkan panggilan dalam tubuh metode (atau konstruktor untuk kelas)
Ini cukup deklaratif dan memberikan info yang relevan dengan logging. Saya tidak terlalu Rubyist jadi mungkin perlu sedikit penyesuaian / YMMV.
sumber
Kita dapat menggunakan metode makro internal. Contoh:
class Foo def get_a; puts "I'm an A" end def get_b; puts "I'm an B" end def get_c; puts "I'm an C" end
ujung akhir
deprecate: a,: get_a deprecate: b,: get_b deprecate: c,: get_c end
o = Foo.n baru p oa
sumber