Skip to content

Latest commit

 

History

History
349 lines (266 loc) · 12.1 KB

CHANGELOG.md

File metadata and controls

349 lines (266 loc) · 12.1 KB

Change Log

v0.14.1 - 2023-10-08

Fixed

  • Fix defining object finalizer in Ruby 3.1 to reference a UUID string by Vadim Kononov(@vkononov)
  • Fix message queue shutdown to raise valid error
  • Fix any_event and any_state methods in the define method and definition class
  • Fix hooks_map initialization to be fully thread-safe by Maciej Mensfeld(@mensfeld)

v0.14.0 - 2020-09-12

Added

  • Add ability to declare alias target inside definition
  • Add #respond_to_missing? to DSL to check if a given method is supported
  • Add current state attribute to StateMachine#inspect

v0.13.0 - 2020-05-13

Added

  • Add sync as a dependency
  • Add metadata to gemspec

Changed

  • Change StateMachine#final_state to #terminal_states by Brad Gessler(@bradgessler)
  • Change to remove artefacts like tests & tasks from gemspec

Fixed

  • Fix Ruby 2.7 keyword arguments warnings
  • Fix MessageQueue deadlock by Pavel Rosický(@ahorek)

v0.12.1 - 2019-07-12

Changed

  • Change to relax dev dependencies versions

Fixed

  • Fix FiniteMachine.new to stop coercing object target that responds to to_hash into options

v0.12.0 - 2018-11-11

Added

  • Add concurrent-ruby as dependency
  • Add FiniteMachine#new for declaring state machines
  • Add Observer#cancel_event for cancelling event transitions in callbacks, instead of using callback return value
  • Add Const for declaring unique machine constants
  • Add :auto_methods configuration option for disabling automatic conversion of event names into methods

Changed

  • Change gemspec to require Ruby >= 2.0
  • Change FiniteMachine#define to create machine class instances
  • Change EventsChain to EventsMap and use Concurrent::Map for holding event transitions
  • Change Hooks to use Concurrent::Map for storing callbacks
  • Change MessageQueue to use mutex to synchronize access
  • Change StateParser to remove internal state and use class methods instead
  • Change Observer to create callbacks queue on demand
  • Change :any key to be a unique constant ANY_EVENT and ANY_STATE
  • Change #event_names to #events for retrieving all events
  • Remove thread synchronization from AsyncCall, TransitinEvent, HookEvent, DSL, Hooks, TransitionBuilder, ChoiceMerger objects
  • Remove #async call from StateMachine
  • Remove #target, #alias_target, #callbacks, #events and #handlers calls from DSL

Fixed

  • Fix StateParser to raise error without nil
  • Fix to rollback to current state when an error occurs

v0.11.3 - 2016-03-04

Added

  • Add performance tests & memory usage benchmarks

Changed

  • Change EventQueue to MessageQueue for handling generic asynchronous messages
  • Split async behaviour to use CallbackQueue for observed callbacks and EventQueue for async event triggers.
  • Change AsyncProxy and Observer to lazy load message queue

Fixed

  • Fix memory leak - issue #42 with help from @craiglittle

v0.11.2 - 2015-12-30

Added

  • Add infering of state or event name based off hook type

Changed

  • Remove ThreadContext for global queue synchronization
  • Change EventQueue to use Threadable module to sync access

Fixed

  • Fix bug with two state machines locking up on callback events due to race condition with help from @domokos

v0.11.1 - 2015-12-17

Fixed

  • Fix cancelling callbacks for halted transition by craiglittle

v0.11.0 - 2015-10-11

Added

  • Add UndefinedTransition to mark self transition(e.i. no transition found)
  • Add StateDefinition for state query methods
  • Add #trigger and #trigger! to StateMachine to allow manual firing of events and split between dangerous and non-dangerous versions of api.

Changed

  • Change ThreadContext to require per thread setup
  • Change Transition to stop relying on global transitions
  • Change EventChain to manage all internal transitions
  • Change Subscribers to remove unnecessary parameter dependency
  • Change StateMachine public interface to clarify available methods
  • Change HookEvent to accept event name and from state
  • Remove Event class as duplicate of Transition
  • Remove unnecessary checks for StateMachine#can?

Fixed

  • Fix bug in Transition with current transition matching
  • Fix bug in Observer with cancelling inside event callback

v0.10.2 - 2015-07-05

Changed

  • Change StateParser #parse method
  • Change EventBuilder to EventDefinition and invert dependencies
  • Change Event#call to #trigger
  • Change Transition#call to #execute

Fixed

  • Fix to run 'on_after' callbacks even when event cancalled by @craiglittle
  • Fix to cancel transition when no matching choice is found by @craiglittle

v0.10.1 - 2015-05-24

Added

  • Add ability to inherit state machine definitions
  • Add Env class for holiding machine envionment references

Changed

  • Change DSL to delegate calls to machine instance
  • Change ChoiceMerger to use machine directly

v0.10.0 - 2014-11-16

Added

  • Add #alias_target to allow renaming of target object by @reggieb
  • Add :log_transitions option for easy transition debugging

Changed

  • Change TransitionEvent, AsyncCall to be immutable
  • Increase test coverage to 99%

Fixed

  • Fix issue with async calls passing wrong arguments to conditionals

v0.9.2 - 2014-09-27

Changed

  • Removes use of class variable to share Sync by @reggieb

Fixed

  • Fix observer to differentiate between any state and any event
  • [#23] Fix transition to correctly set :from and :to parameters for :any state
  • [#25] Fix passing parameters to choice events with same named events
  • Fix choice pseudostate to work with :any state

v0.9.1 - 2014-08-10

Added

  • Add TransitionBuilder to internally build transitions from states
  • Add #current? to Transition to determine if matches from state
  • Add #select_choice_transition to EventsChain to determine matching choice transition

Fixed

  • Fix #choice to allow for multiple from states
  • Fix #choice to work with same named events

v0.9.0 2014-08-03

Added

  • Add Definition class to allow to define standalone state machine
  • Add #build method to HookEvent

Changed

  • Change initial helper to simply state name with options
  • Change HookEvent to be immutable and extend comparison
  • Change Event to be immutable and extend comparison
  • Change finished? to terminated? and allow for multiple terminal states
  • Change to require explicit context to call target methods
  • Upgrade RSpec dependency and refactor specs

v0.8.1 - 2014-07-05

Added

  • Add EventsChain to handle internal events logic
  • Add EventBuilder to handle events construction

v0.8.0 - 2014-06-22

Added

  • Add silent option for state machine events to allow turning on/off selectively callbacks
  • Ensure that can? & cannot? take into account conditionl logic applied to transitions
  • Add restore! method to allow to set the state directly without callbacks
  • Add ability to do dynamic conditional branching using the choice DSL or grouped events with different outgoing transitions [solves #13 and #6 issue]

v0.7.1 - 2014-06-08

Changed

  • Change to relax callback name checks to allow for duplicate state and event names
  • Change so that transition to initial state triggers callbacks

v0.7.0 - 2014-05-26

Added

  • Add Event to hold the logic for event specification
  • Add string inspection to hooks
  • Add check for callback name conflicts

Changed

  • Change Event to EventHook for callback events
  • Change to allow for self-transition - fixes issue #9
  • Change to detect attempt to overwrite already defined method - fixes issue #10
  • Change to separate state and event callbacks. Introduced on_enter, on_before, once_on_enter, once_on_before new event callbacks.
  • Change generic callbacks to default to any state for on_enter, on_transition, on_exit and any event for on_before and on_after
  • Change to ensure proper callback lifecycle

Fixed

  • Fix issue #8 to preserve conditionals between event specifications
  • Fix #respond_to on state machine to include observer
  • Fix observer missing methods resolution

v0.6.1 - 2014-05-10

Fixed

  • Fix stdlib requirement

v0.6.0 - 2014-05-10

Added

  • Add StateParser to allow for grouping transition under same event name
  • Add abilility to correctly extract :to state for Transition instance

Changed

  • Change Transition to store a map of transition for a given event

Fixed

  • Fix bug #6 with incorrect TransitionEvent payload information

v0.5.0 - 2014-04-28

Added

  • Add generic Listener interface
  • Add ability to fire callbacks asynchronously
  • Add initial state storage

Changed

  • Change to allow for machine to be constructed as plain object
  • Allow for :initial, :terminal and :target to be machine parameters
  • Change EventQueue to allow for subscription
  • Increase test coverage to 98%
  • Change to allow access to target inside machine dsl

v0.4.0 - 2014-04-13

Added

  • Add logger
  • Add ability to cancel transitions inside callbacks
  • Add ability to force transitions

Changed

  • Change initial state to stop firing event notification
  • Increase test coverage to 97%

Fixed

  • Fix initial to accept any state object
  • Fix proc conditions to accept aditional arguments

v0.3.0 - 2014-03-30

Added

  • Add ability to specify callbacks on machine instance
  • Add once_on type of callback
  • Add off method for removing callbacks
  • Add async method to state_machine for asynchronous events firing
  • Add state helpers fsm.green? to allow easily check current state

Changed

  • Change attr_threadsafe to accept default values
  • Move development dependencies to Gemfile
  • Increase test coverage to 95%

Fixed

  • Fix bug with event methods dynamic redefinition
  • Fix observer respond_to
  • Fix Callable to correctly forward arguments

v0.2.0 - 2014-03-01

Added

  • Add generic state and event listeners
  • Add target to allow integration with external objects, and allow easy method lookup through callback context
  • Add ability to specify custom handlers for error conditions
  • Add methods synchronization for thread safety
  • Add ability to define custom initial event
  • Add hooks class for callbacks registration

Changed

  • Change to ensure correct transition object state
  • Extend threadable accessors

Fixed

  • Fix bug - callback event object returns correct from state

[v0.1.0] - 2014-02-09

[v0.0.1] - 2014-01-10

  • Initial release