###v0.4.0-1 (first v0.4 pre-release of many)
- Adjusted UMD to check for AMD before CommonJS.
- CommonJS wrapper no longer returns a factory function, instead it returns the module value. BREAKING CHANGE (for node.js users, at least).
###v0.3.8
- Fixed a bug where the instance-level
initialState
member was getting set to undefined if astates
object was provided on the options constructor arg but not aninitialState
. - Added some code comments to the un-minified source as well to better explain the inheritance behavior changes.
###v0.3.7
- Underscore.js is no longer a dependency - it has been replaced with Lodash.
- Fixed issue where instances sharing a derived machina constructor that did not specify instance level state objects were sharing the prototype's
states
object from the parent Fsm constructor. Thestates
object andinitialState
property are now built/blended together from the prototype chain and deep-clone-extended over the instance itself, so that they will always be instance level. - Added Alex Robson (@arobson) to contributors list in package.json - he was instrumental in helping me track down and squash the above-mentioned bug.
- Added Dominic Barnes to the contributors list.
- Inverted the changelog to show most recent first - you know...b/c...too lazy to scroll. :-)
- Source in this version also has new jsbeautify settings applied - whitespace-laden commits, FML, but it was necessary going forward.
- Removed failing LiveReload setup in the gulpfile. I plan to fix that in the v0.4 release.
- Fixed issue in
deferUntilNextHandler
where deferred inputs were being queued asNEXT_TRANSITION
instead ofNEXT_HANDLER
. - Moved invocation of
on_Exit
to occur just before the state property is updated, instead of just after.
- Underscore is no longer required to be passed into the factory function for node usage. It will be required behind the scenes if not provided.
- State handlers can optionally return a string value of the state to which you want to transition.
- Transition events now include an
action
member which contains the "state.handler" value (string) indicating the current action which caused the transition. - Updated license info (still MIT, GPL >= 2.0)
- Removed deprecated anvil dependency references
- Fixed a bug in the internal deepExtend method (see this issue).
- The
initialize
call will now receive the arguments passed to the constructor (see this issue). - The commonjs/node.s wrapper now returns a factory, to which you must pass dependencies (underscore, in this case). This is a breaking API change
- The build process now outputs one module that can be used as a commonjs, AMD or standard client lib.
- All internal events have been refactored to emit single argument payloads. This is a breaking API change.
- FSM constructor function supports inheritance via an
extend
function - working mostly identical to backbone.js objects. - FSMs can have a top-level 'catch-all' ("*") handler defined, which would apply to any state, unless the state overrides it with a state-specific catch-all handler.
- FSM states now have an
_onExit
handler. - The
fireEvent
has been removed. Useemit
or thetrigger
alias. This is a breaking API change. - State input handlers can now be a string value (indicating that a transition should occur to a state matching that string value) in addition to a function.
- event names are now all lower case
- FSM constructor only handles an eventListeners object (not the old array of strings to pre-populate event names)
- bug fixed where event queue would still be replayed on a state that transitioned during its entry action
- transitioned and transitioning events are now just a single "transition" event
- build bits updated to latest anvil.js (0.8.9)
- added beginnings of connectivity example
- updated ext dependencies (postal, etc.)
- added bower component.json
- Message bus integration has been removed from machina core, and now exists as plugins. For integration with postal.js, see machina.postal
- Due to the above change, the only "messaging-related" metadata on an FSM now is the "namespace" value that can be passed as the FSM is created. This value is optional, and will be given a default if none is provided. Messaging plugins can utilize this value as a channel/namespace name and/or topic prefix.
- A "priorState" member has been added to the Fsm.