state_machines
Statesman
Our great sponsors
state_machines | Statesman | |
---|---|---|
5 | 3 | |
795 | 1,727 | |
1.1% | 1.5% | |
3.3 | 7.3 | |
3 days ago | 7 days ago | |
Ruby | Ruby | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
state_machines
- Gem adds support for creating state machines for attributes on any Ruby class
-
Practical State Machinery
State Machines (Ruby) - A popular library providing a Ruby DSL for easily building finite state machines
-
Why Developers Never Use State Machines (2011)
As a regular user of the state_machine Ruby gem, I wouldn't recommend it. If you don't believe me, just check out the "Class definition" section of the usage examples: https://github.com/state-machines/state_machines#usage
The problems are obvious. It's built on magic and indirection. This leads to difficult to debug state machine problems. For anything beyond simple state machines you quickly lose any idea of what your object is doing.
-
ActiveRecord: Adding Boolean methods for DateTime columns
Might this be better handled with a state machine with active record integration?
-
Ruby 3 Released
Here's an example of how it can happen - look at the code examples in https://github.com/state-machines/state_machines - almost everything you are coding is in the DSL of that library if you are using it:
Statesman
-
Why Developers Never Use State Machines (2011)
I’d strongly recommend Statesman instead: https://gocardless.com/blog/statesman/
I’m unaffiliated, just have used a lot of Ruby SM libraries.
-
State Machines in Ruby: An Introduction
Honestly state machines are fantastic in Rails too. My last company built [Statesman](https://github.com/gocardless/statesman/) and being able to lean on it to prevent you getting into invalid states is fantastic. You also get the bonus of tracking the history of states your resources went through (which is especially useful when you're dealing with payments).
At some point you'll have to think about query performance on the state transition table, but it'll go further than you think and is firmly in the realm of problems of success.
-
Code review of an Order object implemented as a state machine
I know you were doing educational proof of concent. But when I write them, I usually reach for the statesman gem. Makes state machines pretty trivial IME.
What are some alternatives?
AASM - AASM - State machines for Ruby classes (plain Ruby, ActiveRecord, Mongoid, NoBrainer, Dynamoid)
State Machine - Adds support for creating state machines for attributes on any Ruby class
simple_states - A super-slim statemachine-like support library
transitions - State machine extracted from ActiveModel
state_shifter
Workflow - Ruby finite-state-machine-inspired API for modeling workflow
FeatureFlags - Feature flags for Rails application.Manages ‘flags’ within your Rails app that determine whether various features are enabled or not.
FiniteMachine - A minimal finite state machine with a straightforward syntax.