0
@@ -278,13 +278,18 @@ module RedSteak
0
# Determine what object should own
0
# a new State if one is created.
0
- @context[:statemachine]
0
+ @context[:statemachine] ||
0
+ (raise Exception, "statemachine is unknown")
0
# Locates a state by name or creates a new object.
0
- def _find_state opts, create = true, owner = nil, namespaces = nil
0
- # $stderr.puts "_find_state #{opts.inspect}, #{create.inspect} from #{caller(1).first}" if ! create
0
+ def _find_state opts, param = EMPTY_HASH
0
+ create = param[:create] != false
0
+ cls = param[:class] || State
0
+ _log "_find_state #{opts.inspect}, #{param.inspect}"
0
@@ -300,12 +305,10 @@ module RedSteak
0
raise ArgumentError, "invalid opts, given #{opts.inspect}"
0
+ # Split Strings on "::"
0
name = name.split(SEP) if String === name
0
- # @logger = $stderr if name == :a
0
- owner ||= opts.delete(:_owner) if opts[:_owner]
0
owner ||= _owner unless owner
0
raise Exception, "Cannot determine owner for new State #{name.inspect}" unless owner
0
@@ -322,8 +325,7 @@ module RedSteak
0
_log " looking for State #{name.inspect} in path #{path.inspect}"
0
- # $stderr.puts " owner = #{owner.inspect}"
0
- owner = _find_state(e.to_sym, create, owner)
0
+ owner = _find_state(e.to_sym, :owner => owner)
0
raise ArgumentError, "Cannot locate State #{name.inspect} in #{owner.inspect}" unless owner
0
@@ -345,7 +347,7 @@ module RedSteak
0
_log " state = #{state.inspect} in #{owner.inspect}"
0
- $stderr.puts "
owner = #{owner.inspect}"
0
+ $stderr.puts "
owner = #{owner.inspect}"
0
$stderr.puts "caller = #{caller(0)[0 .. 4] * "\n "}"
0
$stderr.puts "state = #{state.inspect}"
0
@@ -353,10 +355,13 @@ module RedSteak
0
# Create a new one, if requested.
0
- opts[:statemachine] ||= @context[:statemachine]
0
- state = State.new opts
0
+ _log " creating #{cls} #{opts.inspect} for #{owner.inspect}"
0
+ owner = owner.submachine
0
- _log " created #{state.inspect}
"
0
+ _log " created #{state.inspect}
for #{owner.inspect}"
0
@@ -373,10 +378,10 @@ module RedSteak
0
- _log "\n\n_create_transition! #{
opts.inspect}"
0
+ _log "\n\n_create_transition! #{
t.inspect}"
0
- opts[:source] = _find_state opts[:source], :create, owner
0
- opts[:target] = _find_state opts[:target], :create, owner
0
+ opts[:source] = _find_state opts[:source], :owner => owner
0
+ opts[:target] = _find_state opts[:target], :owner => owner
0
_log " #{opts.inspect}"