2012-07-01 2 views
7

I変換を次のようしている:キュウリ:どのように別の変換で同じ正規表現を使用するには?

このようなステップ定義で動作
Transform /^"([^"]+)" Phase$/ do |name| 
    # Returns the phase named 'name', 
    # or raises an exception if it doesn't exist 
end 

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

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

私も同じ"([^"]+)" Phaseパターンを使用して、次のステップ定義を持っています

ここでは、指定したフェーズが存在しない場合、ステップ定義が失敗しないようにします。代わりにフェーズを作成したいと思います。

ステップ定義をDRYするための段階を作成するTransformを作成したいと思いますが、私はすでに上記のTransformが全く同じ正規表現を持っているため、実行できません。

基本的には、ステップがGivenの場合はフェーズを作成し、そうでない場合はフェーズを作成します。

アイデア?

+2

+1タイトルだけです。良い映画だろう。 –

答えて

4

正規表現が同じ場合、動作を区別するオプションはありません。最も簡単には

...あなたは可能かもしれませんが、でももしそうなら、将来のリーダーとシナリオ作家を驚かせる可能性を持ついくつかの非常によく隠された魔法のだろう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 
関連する問題