2010-12-10 13 views
2

Rubyと正規表現のパターンマッチングを使って内部DSLを書く方法の簡単な例を探しています。Ruby + Regexを使って、内部の自然言語のDSLを書くには?

Given /^I have (\d+) cucumbers in my belly$/ do |cukes| 
    # Some Ruby code here 
end 

私はビルダー、または流暢なメソッドチェーンに興味がないよ:シナトラがルートにキュウリは、ステップの定義を処理する方法に似また

get '/say/*/to/*' do 
    # Some Ruby code here 
end 

を処理する方法に似ています。基本的に私はこのようになりますRubyのクラスたい:

class SpecVocabulary 

    match ‘pattern’ do 
     # Some Ruby code here 
    end 

    # Or, using a different keyword 
    phrase ‘pattern’ do 
     # Some Ruby code here 
    end 
end 

私は苦労してる何をしている配線アップSpecVocabularクラスは自動的にパターンにマッチし、それのデータを記入するコード。

私は誰かがこれを行う方法の簡単な例を持っていることを望んでいます。私はSinatraとCucumberのソースでダイビングするのを避けようとしています。

ちなみに私は意図的に自然言語を定義していますが、意図的に省略しました。

答えて

1

ここではRubyでDSLを作成する上で総合的なブログ記事です:

http://www.daniel-azuma.com/blog/view/z3bqa0t01uugg1/implementing_dsl_blocks

ところで、私はそれはかなりのようになります推測し、クラス内であなたのDSLを使用するのが一般的ではありません。

vocabulary :SpecVocabulary do 
    match 'pattern' do 
    # Some Ruby code here 
    end 

    # Or, using a different keyword 
    phrase 'pattern' do 
    # Some Ruby code here 
    end 
end