2010-10-26 5 views
6

मुझे पता है कि यह एक बुरा विचार है, लेकिन मेरे पास बहुत सारे विरासत कोड हैं और मैं कुछ ऐतिहासिक बैच नौकरियों के माध्यम से भागना चाहता हूं। मैं सिस्टम की तारीख को बदलना नहीं चाहता क्योंकि अन्य सामान एक ही सिस्टम पर चलता है। क्या कोई तरीका है कि मैं उस मूल्य को बदल सकता हूं जो Date.today केवल किसी दिए गए प्रक्रिया के जीवन के लिए वापस आ जाएगा। यहां विचार कुछ पुराने बैच स्क्रिप्ट को रिवाइंड और चलाने के लिए है जो डेट.today से काम करने के लिए उपयोग किए जाते थे।एक चलती रूबी प्रक्रिया के भीतर Date.today के मान को कैसे बदलें

धन्यवाद योएल

उत्तर

6

आप या तो बंदर-पैच रूबी निकोलस की तरह रूबी दिखा सकते हैं, या टाइमकॉप मणि का उपयोग कर सकते हैं। इसे लेखन परीक्षणों को आसान बनाने के लिए डिज़ाइन किया गया था, लेकिन आप इसे अपने सामान्य कोड में भी उपयोग कर सकते हैं।

# Set the time where you want to go. 
t = Time.local(2008, 9, 1, 10, 5, 0) 

Timecop.freeze(t) do 
    # Back to the future! 
end 
# And you're back! 

# You can also travel (e.g. time continues to go by) 
Timecop.travel(t) 

यह कोड का एक अच्छा, लेकिन सरल टुकड़ा है। इसे आज़माएं, जब आप तारीख और समय को बंद कर देते हैं तो यह आपको कुछ सिरदर्द बचाएगा।

लिंक: https://rubygems.org/gems/timecop

+0

+1 ठीक काम करना चाहिए! – Jonathan

+0

ओह शांत, मुझे यह भी बेहतर पसंद है! – Joelio

0

आप 'आज की तारीख वर्ग

class Date 
    def Date.today 
    return Date.new(2000,1,1) 
    end 
end 

इस 2000/01/01 के लिए Date.today तय होगा की वर्ग-विधि को फिर से परिभाषित कर सकते हैं।

+0

ठीक शांत है, जहां मैं इस कोड डाल सकते हैं। मेरे पास रेल ऐप है, मेरी बैच फ़ाइल रेक रेक के रूप में चलती है। मैं कैसे सुनिश्चित करूं कि केवल रेक कार्य में यह कोड शामिल है। क्या मैं इसे सिर्फ रेक कार्य में डालता हूं? – Joelio

+0

इसे रेक कार्य में शामिल करने से टाइमकॉप के लिए –

0

को पुनर्परिभाषित Date.today भी hacky लगता है, तो आप delorean

GitHub पृष्ठ से कोशिश कर सकते हैं:

require 'delorean' 

# Date.today => Wed Feb 24 
Delorean.time_travel_to "1 month ago" # Date.today => Sun Jan 24 
Delorean.back_to_the_present   # Date.today => Wed Feb 24 
संबंधित मुद्दे