मेरा पहला विचार इस तरह की कुछ बात कर रहे हैं:मैं उप वर्ग में किसी विधि के पहले और बाद में कोड कैसे चला सकता हूं?
class AbstractBuilder
attr_reader :time_taken
def build_with_timer
started_at = Time.now
build
@time_taken = Time.now - started_at
end
def build
raise 'Implement this method in a subclass'
end
end
class MyBuilder < AbstractBuilder
def build
sleep(5)
end
end
builder = MyBuilder.new.build_with_timer
puts builder.time_taken
मुझे लगता होगा वहाँ एक बेहतर तरीका है, जो बेहतर लचीलापन प्रदान करता है, उदाहरण के लिए आदर्श मैं बजाय MyBuilder का एक उदाहरण पर 'निर्माण' कॉल करना चाहते है 'build_with_timer' और हमेशा निष्पादन समय दर्ज किया गया है।
मैंने कक्षा उत्तराधिकारी के बजाय मॉड्यूल मिक्स्डिन को प्रारंभ करने या यहां तक कि यहां तक कि alias_method का उपयोग करने पर विचार किया था जो मध्य में सुपर कॉल करने वाली बिल्ड विधि को ओवरराइड करेगा (सुनिश्चित नहीं है कि यह काम करेगा)। खरगोश छेद नीचे जाने से पहले मैंने सोचा कि मैं देखता हूं कि एक स्थापित अभ्यास है या नहीं।
स्पष्टीकरण के लिए मैं एक ज्ञात नाम की एक विधि को परिभाषित करना चाहता हूं, जो उप-वर्ग में पारदर्शी रूप से लपेटा गया है (पहले और बाद में) बेस क्लास में परिभाषित कोड के साथ। ActiveRecord फ़िल्टर कहने से मुझे कम लचीलापन/ओवरहेड चाहिए। – Kris
https://github.com/PragTob/after_do – Kris