2013-04-02 2 views
1

실시간 이벤트를 기반으로 구성 가능한 이벤트 및 이벤트 트리거를 만드는 방법을 제공하기 위해 레일 및 활성 레코드로 작업 할 데이터 구조 또는 디자인 패턴을 찾고 있습니다.Ruby 이벤트 트리거

이것은 이러한 종류의 시스템에 대한 최종 사용법은 아니지만 다음 예제는 제가 수행하려는 것을 보여줍니다. splunk와 같은 로그 모니터링 시스템과 비슷하게 본질적으로 내가하려는 것은 객체에서 어떤 속성을 취하여 원하는 값과 비교할 수있는 시스템을 생성하고 평가가 참이면 조치를 취하는 것입니다.

이 작업을 수행 할 라이브러리가 있거나 처음부터 무언가를 배포해야하는 라이브러리가 있습니까? 이 문제를 설계하려고 생각한 방식은 다음과 유사합니다.

비교할 속성이 포함 된 액터 (전통적인 동시성 개념이 아님)가 있습니다. 그렇다면 actor_id, 속성 (IE 개수), 비교 자 (<, < =, ==,> =>), 값 및 action_id에 대한 포인터를 갖는 트리거 모델을 갖게됩니다. action_id는 트리거가 실행될 때 실행해야하는 코드가 들어있는 perform 메소드가있는 객체를 가리 킵니다.

그래서 결국 트리거가 같은 것으로 평가 것 :

action.perform if actor.send(attribute) comparator value 

또 다른 옵션은, 아마도 더 표준 일하는 DSL (페이스 북에 대한 IE FQL)을 개발할 것으로 보인다. 이것이 더 좋고 유연한 접근 방식이 될 수 있을까요?

도서관에서 처리 할 수있는 것입니까, 아니면 제안하지 않은 시스템입니까?

EDIT : DSL이 가장 유연한 방법 일 것 같습니다. Tutorials for writing DSL in Ruby

답변

1

내가이 질문을 올바르게 이해한다면, 작성한 내용은 거의 그대로 나타납니다. 다음과 같이 비교 연산자를 기호로 보낼 수 있습니다.

comparator = :> 
action.perform if actor.send(attribute).send(comparator, value) 
# action will perform if actor's attribute is greater than value 
+0

흥미롭게도 실제로 그렇게 할 수 있을지 몰랐지만 실제로는 가능하다고 생각합니다. 감사! – ajorgensen