2012-07-01 9 views
7

मैं निम्नलिखित रूपांतरण करें:ककड़ी: विभिन्न परिवर्तनों में एक ही रेगेक्स का उपयोग कैसे करें?

Transform /^"([^"]+)" Phase$/ do |name| 
    # Returns the phase named 'name', 
    # or raises an exception if it doesn't exist 
end 

जो इस तरह कदम परिभाषा के साथ काम करता है:

Then /("(?:[^"]+)" Phase) should do something/ do |phase| 
    # Should fail if the specified phase doesn't exist 
end 

मेरे पास है भी निम्न कदम परिभाषा जो एक ही "([^"]+)" Phase पैटर्न का उपयोग करता:

Given /("([^"]+)" Phase) follows ("([^"]+)" Phase)/ do |pre, post| 
    # Should create the specified phases 
end 

यहां मैं नहीं चाहता कि चरणबद्ध परिभाषा विफल हो जाए यदि निर्दिष्ट चरण मौजूद नहीं हैं। मैं इसके बजाए चरण बनाना चाहता हूं।

मैं एक ट्रांसफॉर्म बनाना चाहता हूं जो मेरे लिए चरण परिभाषाओं को थोड़ा सा डीआरवाई करने के लिए चरण बनाएगा, लेकिन मैं ऐसा नहीं कर सकता क्योंकि मेरे पास पहले से ही ऊपर वर्णित ट्रांसफॉर्म है जिसमें बिल्कुल वही रेगेक्स है।

मूल रूप से, यदि यह Given चरण है, तो मैं चरण बनाना चाहता हूं, और यदि यह नहीं है तो विफल हो जाएं।

कोई विचार?

+2

+1 सिर्फ शीर्षक के लिए। एक अच्छी फिल्म होगी। –

उत्तर

4

यदि regexps समान हैं, तो आपके पास वास्तव में व्यवहार को अलग करने का विकल्प नहीं है। एक Given कदम पराक्रम में निर्धारण किया जाए या नहीं आप कर रहे हैं संभव हो, लेकिन फिर भी हैं, तो यह संभावित भविष्य के पाठकों और परिदृश्य लेखकों को चकित करने के साथ कुछ बहुत अच्छी तरह से छिपा जादू होगा ...

सबसे आसान , और ऐसा करने का सबसे इरादा-खुलासा तरीका स्पष्ट रूप से चरण भाषा में वाक्यांश की प्रकृति को स्पष्ट करना होगा, फिर आपके पास 2 स्पष्ट रूप से अलग परिवर्तन हो सकते हैं उदा।

EXISTING_PHASE = Transform /^existing Phase "([^"]+)"$/ do |phase| 
    # raise error if it doesn't exist 
end 

UNEXISTING_PHASE = Transform /^unknown Phase "([^"]+)"$/ do |phase| 
    # create the phase if it doesn't exist 
end 
संबंधित मुद्दे