Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Big machine Build Status Dependency Status Code Climate

Big machine is a Gem which give state to your object

Resources

Bugs

Development

Testing

Source

  • git://github.com/alaibe/big_machine.git

Install

Add this to your Gemfile

  gem 'big_machine'

Usage

Create your first state

  class Draft < BigMachine::State
    def publish
      transition_to Online
    end
  end

  class Online < BigMachine::State
  end

All 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
  end

Make your object stateful

  class Car
    include BigMachine

    big_machine initial_state: :draft
  end

Now it's possible to publish your car object:

  car = Car.new
  car.current_state # => Draft
  car.publish
  car.current_state # => Online

Of 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 options

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

Example

  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

  end

Lock module

A 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

Contributors

*Anthony Laibe

Bitdeli Badge

About

State machine for any ruby object

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages