lib/finite_machine/dsl.rb in finite_machine-0.10.2 vs lib/finite_machine/dsl.rb in finite_machine-0.11.0
- old
+ new
@@ -87,11 +87,11 @@
# @return [StateMachine]
#
# @api public
def initial(value, options = {})
state = (value && !value.is_a?(Hash)) ? value : raise_missing_state
- name, self.defer, silent = parse(options)
+ name, self.defer, silent = *parse_initial(options)
self.initial_event = name
event(name, FiniteMachine::DEFAULT_STATE => state, silent: silent)
end
# Trigger initial event
@@ -189,11 +189,11 @@
# Error handler that throws exception when machine is in illegal state
#
# @api public
def handlers(&block)
- errors.call(&block)
+ errors_dsl.call(&block)
end
# Decide whether to log transitions
#
# @api public
@@ -205,31 +205,28 @@
# Initialize state machine properties based off attributes
#
# @api private
def initialize_attrs
- attrs[:initial] and initial(attrs[:initial])
- attrs[:target] and target(attrs[:target])
- attrs[:terminal] and terminal(attrs[:terminal])
+ attrs[:initial] && initial(attrs[:initial])
+ attrs[:target] && target(attrs[:target])
+ attrs[:terminal] && terminal(attrs[:terminal])
log_transitions(attrs.fetch(:log_transitions, false))
end
# Parse initial options
#
- # @param [Object] value
+ # @param [Hash] options
+ # the options to extract for initial state setup
#
# @return [Array[Symbol,String]]
#
# @api private
- def parse(value)
- if value.is_a?(Hash)
- [value.fetch(:event) { FiniteMachine::DEFAULT_EVENT_NAME },
- value.fetch(:defer) { false },
- value.fetch(:silent) { true }]
- else
- [FiniteMachine::DEFAULT_EVENT_NAME, false, true]
- end
+ def parse_initial(options)
+ [options.fetch(:event) { FiniteMachine::DEFAULT_EVENT_NAME },
+ options.fetch(:defer) { false },
+ options.fetch(:silent) { true }]
end
# Raises missing state error
#
# @raise [MissingInitialStateError]
@@ -244,10 +241,11 @@
end
end # DSL
# A DSL for describing events
class EventsDSL < GenericDSL
+ include Safety
# Create event and associate transition
#
# @example
# event :go, :green => :yellow
# event :go, :green => :yellow, if: :lights_on?
@@ -255,9 +253,10 @@
# @return [Transition]
#
# @api public
def event(name, attrs = {}, &block)
sync_exclusive do
+ detect_event_conflict!(name)
attributes = attrs.merge!(name: name)
if block_given?
merger = ChoiceMerger.new(machine, attributes)
merger.instance_eval(&block)
else