2010-12-10 3 views
2

Ruby와 regex 패턴 매칭을 사용하여 내부 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 

처리하는 방법과 유사. 기본적으로 나는 다음과 같은 형태 루비 클래스 원하는 :

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

여기에 루비에 DSL을 만들기에 대한 포괄적 인 블로그 게시물입니다 : BTW

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 
관련 문제