Tôi đang trong quá trình viết lại/tái cấu trúc ứng dụng cũ cho khách hàng từ Rails 2.x đến 3.x. Là một phần của việc tái cấu trúc, tôi cũng muốn loại bỏ các mô hình/phương pháp bằng ngôn ngữ địa phương sang một cơ sở mã tiếng Anh thuần túy.Khước từ toàn bộ mô hình trong Rails
Điều này liên quan đến việc viết các phương pháp mới cho hầu hết mọi tính năng. Tôi giải quyết này cho các phương pháp bằng cách thực hiện:
def english_method
# ...
end
def native_method
warn 'DEPRECATED, please use #english_method'
english_method
end
này hoạt động tốt cho các phương pháp, và giúp tôi theo dõi những nơi mà các phương pháp cũ vẫn được sử dụng, mà không vi phạm bất kỳ mã.
Đối với các lớp học (mô hình) Tuy nhiên, tôi đã thực hiện:
class NativeClass < EnglishClass
# DEPRECATED, Please use EnglishClass
end
class EnglishClass
# ...
end
này "tác phẩm", bất cứ khi nào NativeClass
được gọi, ứng dụng vẫn hoạt động, nhưng tôi không nhận được bất kỳ tin nhắn trong nhật ký thông báo cho tôi về một phần của đơn đăng ký vẫn đang gọi số NativeClass
.
Làm cách nào để đảm bảo mọi "chạm" của NativeClass
thực sự dẫn đến lỗi nhật ký được ghi?
tôi đã cố gắng (không có lý do khác hơn là suy nghĩ "có thể làm việc này") để làm:
class NativeClass < EnglishClass
-> { ActiveSupport::Deprecation.warn 'Native model is deprecated in favor of English' }
end
Nhưng đó (rõ ràng?) Đã không làm việc. Tôi hình lambda sẽ được lười biếng nạp mỗi khi NativeClass
được gọi, nhưng sự hiểu biết của tôi về lambdas vẫn còn hơi nông cạn, vì vậy tôi có thể bị nhầm lẫn ở đây.
Bất kỳ manh mối nào về cách phản đối toàn bộ lớp học và gửi thông điệp cảnh báo đến nhật ký của tôi khi nó đang được chạm vào?
"Các phương pháp hay nhất" khác hoặc giải pháp không được chấp nhận được chào đón, nhưng tôi không chắc đó là câu hỏi hợp lệ cho SO (và tôi không muốn mạo hiểm chủ đề này bị đóng cho câu hỏi này).
Thực ra, tôi không muốn không chấp nhận tất cả các phương pháp (chỉ được nêu ra), tôi chỉ muốn không chấp nhận tên lớp cho bây giờ. Vì vậy, tôi vẫn muốn tất cả các phương thức vẫn giữ nguyên, tôi chỉ muốn cảnh báo khi phương thức được gọi bằng cách sử dụng tên lớp không được chấp nhận. Tôi có thể có thể là một phương pháp 'deprecate' mới mà tôi chèn vào tất cả các phương pháp khác, nhưng tôi đã hy vọng cho một giải pháp dễ dàng hơn. – JeanMertz