The :hub
is the transaction and/or application (more on this later). Each :node
is wrapper around a Hero Formula
responsible for passing the non-boolean values to the :hub
, but it also returns a boolean. Each camel-cased line inside the :node
parentheses is a Hero :formula
and the values in quotes are the return values of a Formula's :step
. Formula.step
is the only thing responsible for changing state.
The following is in Clojure but it should be interpretable from a Ruby perspective; it's the relations that matter here not the syntax.
[:hub ;; begin transaction
( ;; begin set of Nodes
:node-unique-accept
( ;; begin set of Formulas for :node-unique-accept
:ParseUrl "https, www, ruby-toolbox.com, categories/state_machines.html"
:ParseParams "fname lname school state zip"
:AcceptBool "0"
) ;; end set of Formulas for :node-unique-accept
:node-unique-check
( ;; begin set of Formulas for :node-unique-check
:FormatRead "UTF8"
:FormatCheckBool "0"
) ;; end set of Formulas for :node-unique-check
:node-unique-persist
( ;; begin set of Formulas for :node-unique-persist
:SaveOrUpdate "id:89432 source_id:43927 parent_id:4893026 uuid:fjodau8Y*B state_type:26 timestamp:2012-11-19"
:PersistBool "0"
) ;; end set of Formulas for :node-unique-persist
) ;; end set of Nodes
] ;; end transaction
I haven't built in the actual checks for :sound
, :complete
, :integrity
, :stable
. But these are more meta-data collectors and/or validators on the transactional meta-data. They are simply the aggregate check of each node's boolean value.