===============================
Rule-based Execution of Actions
===============================
  ($Id$)
  >>> from zope import component
  >>> from cybertools.composer.rule.base import RuleManager, Rule, Action
  >>> from cybertools.composer.rule.base import EventType, Event
  >>> from cybertools.composer.rule.instance import RuleInstance
  >>> from cybertools.composer.rule.interfaces import IRuleInstance
  >>> component.provideAdapter(RuleInstance, provides=IRuleInstance)
  >>> from cybertools.composer.rule.base import ActionHandler
  >>> component.provideAdapter(ActionHandler, name='message')
  >>> component.provideAdapter(ActionHandler, name='sendmail')
  >>> manager = RuleManager()
  >>> loginEvent = EventType('login')
  >>> checkoutEvent = EventType('service.checkout')
  >>> checkoutRule = Rule('regcheckoutmail', manager=manager)
  >>> checkoutRule.events.append(checkoutEvent)
  >>> checkoutRule.actions.append(Action('message',
  ...                   parameters = dict(messageName='confirmation_mail')))
  >>> checkoutRule.actions.append(Action('sendmail'))
  >>> manager.addRule(checkoutRule)
  >>> manager.handleEvent(Event(loginEvent))
  []
  >>> from cybertools.composer.schema.client import Client
  >>> client = Client()
  >>> manager.handleEvent(Event(checkoutEvent, client))
  [{'request': None}]