Big machine is a Gem which give state to your object
Bugs
Development
Testing
Source
- git://github.com/alaibe/big_machine.git
Add this to your Gemfile
gem 'big_machine'Create your first state
class Draft < BigMachine::State
def publish
transition_to Online
end
end
class Online < BigMachine::State
endAll methods you override in you state can takes args and block
class Draft < BigMachine::State
def publish(now = Time.now)
transition_to Online, now
end
end
class Online < BigMachine::State
def enter(*args)
stateful.publish_at args.first
end
endMake your object stateful
class Car
include BigMachine
big_machine initial_state: :draft
endNow it's possible to publish your car object:
car = Car.new
car.current_state # => Draft
car.publish
car.current_state # => OnlineOf course your object can be an ActiveRecord::Base object. In this case, the object must have a state column. ( if not, see the next section )
big_machine method can take several options:
- initial_state is the only one necessary option
- state_attribute is available only if the object is an active record object
- workflow if you want to change the normal worklow It's possible to call workflow_is method in your different states
big_machine initial_state: :dradt, state_attribute: :big_state, workflow: small
class Draft < BigMachine::State
def publish
return if workflow_is :small
transition_to Online
end
endA state can include lock module, it will lock the state of your object when your enter in it. The unlock method should be call to unlock the module
class Draft < BigMachine::State
include BigMachine::Lock
def publish
transition_to Online
end
end
class Article
include BigMachine
big_machine initial_state: :dradt
end
article = Article.new
article.publish
article.current_state # => Draft
article.unlock
article.publish
article.current_state # => Online*Anthony Laibe



