SimpleStateMachine - DSL .
class LampSwitch
extend SimpleStateMachine
def initialize
self.state = 'off'
end
event :push_switch, :off => :on
end
lamp = LampSwitch.new
lamp.state
lamp.off?
lamp.push_switch
lamp.state
lamp.on?
ActiveModel :
class User < ActiveRecord::Base
...
def activate_account(activation_code)
if activation_code_invalid?(activation_code)
errors.add(:activation_code, 'Invalid')
end
end
event :activate_account, :invited => :activated
end
user = User.new
user.activate_account!('INVALID')
user.activated?
user.activate_account!('VALID')
user.activated?
:
def download_data
raise Service::ConnectionError
end
event :download_data, Service::ConnectionError => :download_failed
user.download_data
user.state
user.state_machine.raised_error