क्या यह काम कक्षा के अंत में मॉड्यूल को शामिल किए बिना, बस इसे शीर्ष पर शामिल करना संभव है?कक्षा विधि को लपेटने के लिए मॉड्यूल?
module VerboseJob
def self.included(job_class)
class << job_class
alias_method :original_perform, :perform
def perform(*args)
JobLogger.verbose { original_perform(*args) }
end
end
end
end
class HelloJob
include VerboseJob
def self.perform(arg1, arg2)
puts "Job invoked with #{arg1} and #{arg2}"
end
end
मैं क्या करना चाहते हैं, HelloJob.perform
वास्तव में VerboseJob.perform
आह्वान करने के लिए के लिए (जो फिर एक ब्लॉक के अंदर मूल विधि कॉल) है। चूंकि यहां मॉड्यूल कक्षा के शीर्ष पर शामिल है, यह काम नहीं करता है, क्योंकि perform
अभी तक परिभाषित नहीं है। अंत में include
को स्थानांतरित करना काम करता है, लेकिन क्या ऐसा कोई तरीका है जो थोड़ा और क्षमा कर रहा है? मैं अपनी कक्षा परिभाषाओं के शीर्ष पर सभी शामिल मॉड्यूल रखना चाहता हूं।
मैं Module
या Class
पर कुछ विधि की तलाश में हूं, जब इसे पूरी तरह से लोड किया गया है, इसके बजाए रनटाइम द्वारा इसका अर्थ लिया गया है।
क्यों नहीं है 'प्रदर्शन' को लपेटने के लिए 'method_added' का उपयोग न करें .. er .. जोड़ा गया? :) –
मुझे यकीन नहीं है कि मुझे आपका अर्थ मिल गया है, क्या मैं ऐसा नहीं कर रहा हूं? –
मैंने आपका जवाब लिया (इस http://pivotallabs.com/users/rolson/blog/articles/1162-redefine-a-method-from-a- मॉड्यूल-like-a-gentleman के साथ संयुक्त) और साथ आया अधिक संक्षिप्त https://gist.github.com/1170661 (यह कोई फर्क नहीं पड़ता कि 'शामिल' किया गया है)। अपने उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें। मैं वैसे भी इसे स्वीकार करूंगा :) – d11wtq