State Machines

  • Uploaded by: Russell Jones
  • 0
  • 0
  • April 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View State Machines as PDF for free.

More details

  • Words: 575
  • Pages: 12
STATE MACHINES By CodeOfficer

codeofficer.com github.com/codeofficer twitter.com/codeofficer Friday, May 1, 2009

State Machines? A model of behavior composed of a finite number of states, transitions between those states, and actions. A finite state machine is an abstract model of a machine with a primitive internal memory. http://en.wikipedia.org/wiki/Finite_state_machine

Friday, May 1, 2009

So, What’s in a State Machine?

• Machine • States • Events • Transitions

Friday, May 1, 2009

Machines? • Consist of states, events and transitions

that define how a state changes after an event is fired

• Model behavior for a class via an attribute of that class

• Multiple state machines can be used in a class, each one tracked by a unique attribute

Friday, May 1, 2009

States? • •

Have an initial state



Attribute can be a value of any type. The default type in Ruby is often “String”



Can be used to define a behavioral context for a given machine

Represent the value for a particular machine in an attribute of your class

Friday, May 1, 2009

Events? • Define an action that transitions a machine from one state to another

• Guards can be put in place to make state transitions conditional when an action is fired

Friday, May 1, 2009

Common Uses? • Spree for processing orders • RestfulAuthentication • ActiveModel in Rails • Tracks (GTD) for TODO statuses

in_progress, new, canceled, returned, resumed, paid, shipped

passive, pending, active, suspended, deleted

validations, callbacks, observers

active, project_hidden, completed, deferred

Friday, May 1, 2009

Gems and Plugins State Machine A plugin By Aaron Pfeifer (pluginaweek) http://github.com/pluginaweek/state_machine/ http://api.pluginaweek.org/state_machine/

Acts As State Machine A gem By Scott Barron http://github.com/rubyist/aasm/ Which state machine project will have the most github watchers by RailsConf 2009? https://opensource.inklingmarkets.com/markets/18368

Friday, May 1, 2009

A Simple Machine (using the State Machine plugin)

class Light < ActiveRecord::Base attr_accessor :intensity state_machine :state, :initial =>:off do state :off { def intensity; 0; end } state :low { def intensity; 5; end } state :high { def intensity; 10; end } event :switch do transition :off => :low, :low => :high, :high => :off end end end

@light = Light.new @light.state @light.intensity @light.off? @light.can_switch? @light.switch!

Friday, May 1, 2009

#=> #=> #=> #=> #=>

“off” 0 true true true

@light.state #=> @light.intensity #=> @light.off? #=> @light.can_switch? #=> @light.switch! # repeat and rinse ...

“low” 5 false true

Another Machine (also using the State Machine plugin)

class Vehicle state_machine :initial => :parked do event :park do transition [:idling, :first_gear] => :parked end event :ignite do transition :stalled => same, :parked => :idling end event :idle do transition :first_gear => :idling end event :shift_up do transition :idling => :first_gear, :first_gear => :second_gear, :second_gear => :third_gear end event :shift_down do transition :third_gear => :second_gear, :second_gear => :first_gear end event :crash do transition [:first_gear, :second_gear, :third_gear] => :stalled end event :repair do transition :stalled => :parked end end end

Friday, May 1, 2009

Machine Integrations (for the State Machine plugin)

• Database Transactions • Automatically Saves Records • Named Scopes • Validation Rrrors • Observers every transition is wrapped within a transaction

@thing.event vs @thing.event! (bang throws an exception on fail)

Thing.with_state(:off).all or Thing.with_state([:off, :on]).all

@thing.errors.full_messages # => ["State cannot ... via :xxx from :yyy"]

observers can hook into before/after callbacks for events and generic transitions

Friday, May 1, 2009

Textmate Bundles Auto completion for machines, events, transitions and callbacks

• State Machine • Acts As State Machine

http://github.com/drnic/ruby-state-machine-tmbundle/

http://github.com/levicole/acts-as-state-machine-tm-bundle/

Friday, May 1, 2009

Related Documents

State Machines
April 2020 24
State Machines
May 2020 12
Machines
May 2020 27
Machines
May 2020 24
Flying Machines
May 2020 15

More Documents from ""

State Machines
April 2020 24
Doc1.docx
October 2019 12
October 2019 17