Jestem w trakcie przepisywania/refaktoryzacji starszych aplikacji dla klienta z Rails 2.x do 3.x. W ramach refaktoryzacji chcę również odejść od modeli/metod w naszym lokalnym języku do czystej bazy kodu angielskiego.Odradzam cały model w Railsach
Dotyczy to pisania nowych metod dla prawie każdej funkcji. I rozwiązać ten metod wykonując:
def english_method
# ...
end
def native_method
warn 'DEPRECATED, please use #english_method'
english_method
end
Działa to dobrze dla metod, a pomaga mi śledzić miejsca, gdzie jest nadal używane stara metoda, nie łamiąc żadnego kodu.
Na zajęciach (modelach) jednak robiłem:
class NativeClass < EnglishClass
# DEPRECATED, Please use EnglishClass
end
class EnglishClass
# ...
end
ten „dzieła”, ilekroć NativeClass
nazywa się aplikacja zachowuje działa, ale nie dostać żadnej wiadomości w dzienniku powiadomienie mnie o części aplikacji, która wciąż wywołuje NativeClass
.
Jak mogę się upewnić, że każde "dotknięcie" NativeClass
rzeczywiście powoduje zapisanie błędu rejestru?
Próbowałem (bez powodu innego niż myśli "może to działa") zrobić:
class NativeClass < EnglishClass
-> { ActiveSupport::Deprecation.warn 'Native model is deprecated in favor of English' }
end
ale (oczywiście?) Nie działa. Sądzę, że lambda byłaby leniwym ładunkiem za każdym razem, gdy nazywano by to NativeClass
, ale moje rozumienie lambdas jest wciąż dość płytkie, więc mogę się pomylić tutaj.
Jakieś wskazówki dotyczące wycofywania całych klas i wysyłania ostrzeżenia do mojego dziennika, gdy jest on dotykany?
Inne "najlepsze praktyki" i lub rozwiązania dotyczące wycofywania są mile widziane, ale nie jestem pewien, czy jest to prawidłowe pytanie dla SO (i nie chcę ryzykować zamknięcia tego tematu na ten temat).
Faktycznie, ja nie chce potępiać wszystkich metod (jeszcze), ja po prostu chcę potępiać nazwę klasy do teraz. Nadal chcę, aby wszystkie metody pozostały takie same, po prostu chcę ostrzeżenia, gdy metoda jest wywoływana przy użyciu nieaktualnej nazwy klasy. Mógłbym ewentualnie nowy "przestarzały" sposób, który wstawiam do wszystkich innych metod, ale miałem nadzieję na łatwiejsze rozwiązanie. – JeanMertz