SimpleStateMachine是一個簡單的DSL來裝飾現有的方法與狀態過渡警衛。
class LampSwitch
extend SimpleStateMachine
def initialize
self.state = 'off'
end
event :push_switch, :off => :on
end
lamp = LampSwitch.new
lamp.state # => 'off'
lamp.off? # => true
lamp.push_switch #
lamp.state # => 'on'
lamp.on? # => true
它與加載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') # => raises ActiveRecord::RecordInvalid
user.activated? # => false
user.activate_account!('VALID')
user.activated? # => true
它可以拯救例外:
def download_data
raise Service::ConnectionError
end
event :download_data, Service::ConnectionError => :download_failed
user.download_data # catches Service::ConnectionError
user.state # => "download_failed"
user.state_machine.raised_error # the raised error
如果有助於瞭解他們的相對流行度,可以看看這裏:https://www.ruby-toolbox.com/categories/state_machines –
評論:我們已經創建了[短視頻](http: //www.platform45.com/videos/show/10)解釋stateflow可能有所幫助。 – Neil