Sono in procinto di riscrivere/refactoring un'applicazione legacy per un client da Rails 2.x a 3.x. Come parte del refactoring voglio anche passare da modelli/metodi nella nostra lingua locale a un puro codice base inglese.Obsoleto dell'intero modello in Rails
Ciò comporta la scrittura di nuovi metodi per quasi tutte le funzionalità. Risolvo questo per i metodi da fare:
def english_method
# ...
end
def native_method
warn 'DEPRECATED, please use #english_method'
english_method
end
Questo funziona bene per i metodi, e mi aiuta a monitorare i luoghi in cui è ancora in uso il vecchio metodo, senza rompere alcun codice.
per le classi (modelli), tuttavia, ho fatto:
class NativeClass < EnglishClass
# DEPRECATED, Please use EnglishClass
end
class EnglishClass
# ...
end
Questa "opere", ogni volta che NativeClass
si chiama, l'applicazione continua a lavorare, ma non ho ricevuto alcun messaggio nel registro comunicandomi una parte dell'applicazione che chiama ancora NativeClass
.
Come posso essere sicuro che ogni "tocco" di NativeClass
porti effettivamente alla scrittura di un errore di registro?
ho provato (per nessuna ragione altro che pensare "forse questo funziona") per fare:
class NativeClass < EnglishClass
-> { ActiveSupport::Deprecation.warn 'Native model is deprecated in favor of English' }
end
Ma questo (ovviamente?) Non ha funzionato. Immagino che lambda sarebbe pigro carico ogni volta che si chiama NativeClass
, ma la mia comprensione di lambda è ancora un po 'superficiale, quindi potrei sbagliarmi qui.
Eventuali indizi su come deprecare intere classi e inviare un messaggio di avviso al mio registro quando viene toccato?
Altre "best practice" e/o soluzioni per la deprecazione sono benvenute, ma non sono sicuro che sia una domanda valida per SO (e non voglio rischiare che questo argomento venga chiuso per questa domanda).
In realtà, io non voglio disapprovare tutti i metodi (appena ancora), voglio solo deprecare il nome della classe per ora. Quindi voglio ancora che tutti i metodi rimangano gli stessi, voglio solo avvertirmi quando il metodo viene chiamato usando il nome della classe deprecato. Potrei forse un nuovo metodo 'deprecate' che inserisco in tutti gli altri metodi, ma speravo in una soluzione più semplice. – JeanMertz