Class: Miyako::Diagram::Manager
Overview
遷移図管理クラス
遷移図クラス本体(Diagramクラス)を管理するクラス。
Instance Method Summary collapse
-
#[](name) ⇒ Object
対象の名前を持つノードを取得する ノード内の変数にアクセスするときに使う name:: ノード名 返却値:: 指定のノード.
-
#add(name, body, trigger = nil) ⇒ Object
遷移図にノードを追加する 状態遷移図のノードに対応するオブジェクト(NodeBaseモジュールをmixinしたクラス)を登録する 名前が重複している場合は、後に登録したノードが採用される。 name:: ノード名。文字列かシンボルを使用 body:: ノード本体。DiagramNodeBase モジュールを mixin したクラスのインスタンス trigger:: NodeTriggerBase モジュールを mixin したクラスのインスタンス。デフォルトは NpdeTrogger クラスのインスタンス.
-
#add_arrow(from_name, to_name, &trigger) ⇒ Object
ノード間移動のアローを追加する 移動元ノードと移動先ノードの名前を指定し、条件にかなえばノードを移動する矢印を設定する。 Processor#updateメソッドを呼び出した時、移動条件を確認して移動するかどうかを判断する。 デフォルトでは、ノードのfinish?メソッドがtrueのときにto_nameで示したノードへ移動する。 結果がfalse のときは、from_nameで示したノードを継続して使用する(stopメソッドは呼ばれない)。 また、引数が一つのブロックを渡すことができる。 引数には、現在評価中のノード(from_nameで示したノードのインスタンス)が渡される。 評価の結果、true のときは、to_name で示したノードへ移動する。 結果がfalse のときは、from_nameで示したノードを継続して使用する(stopメソッドは呼ばれない)。 同じ移動元のアローが複数登録されているときは、先に登録したノードの移動条件を確認する。 from_name:: 移動元ノード名。文字列かシンボルを使用 to_name:: 移動先ノード名。文字列かシンボルを使用 trigger:: ノード間移動するかどうかを返すブロック。ブロックは引数を一つ取る(from_name で示したノードのインスタンス).
-
#dispose ⇒ Object
:nodoc:.
-
#finish? ⇒ Boolean
:nodoc:.
-
#first ⇒ Object
実行開始ノードを、最初に登録したノードに変更する 但し、遷移図処理が行われていないときに変更可能.
-
#initialize ⇒ Manager
constructor
:nodoc:.
-
#initialize_copy(obj) ⇒ Object
:nodoc:.
-
#move(name) ⇒ Object
実行開始ノードを変更する 但し、遷移図処理が行われていないときに変更可能 name:: ノード名.
- #nodes ⇒ Object
-
#now ⇒ Object
:nodoc:.
-
#now_node ⇒ Object
:nodoc:.
-
#pause ⇒ Object
:nodoc:.
-
#render ⇒ Object
:nodoc:.
-
#resume ⇒ Object
:nodoc:.
-
#start ⇒ Object
:nodoc:.
-
#stop ⇒ Object
:nodoc:.
-
#update(*params) ⇒ Object
:nodoc:.
-
#update_input(*params) ⇒ Object
:nodoc:.
Constructor Details
#initialize ⇒ Manager
:nodoc:
303 304 305 306 307 308 309 |
# File 'lib/Miyako/API/diagram.rb', line 303 def initialize #:nodoc: @name2idx = {} @list = [] @ptr = nil @first = nil @executing = false end |
Instance Method Details
#[](name) ⇒ Object
対象の名前を持つノードを取得する
ノード内の変数にアクセスするときに使う
- name
-
ノード名
- 返却値
-
指定のノード
353 354 355 356 |
# File 'lib/Miyako/API/diagram.rb', line 353 def [](name) raise MiyakoError, "Don't set undefined node name!" unless @name2idx.has_key?(name) return @name2idx[name] end |
#add(name, body, trigger = nil) ⇒ Object
遷移図にノードを追加する
状態遷移図のノードに対応するオブジェクト(NodeBaseモジュールをmixinしたクラス)を登録する 名前が重複している場合は、後に登録したノードが採用される。
- name
-
ノード名。文字列かシンボルを使用
- body
-
ノード本体。DiagramNodeBase モジュールを mixin したクラスのインスタンス
- trigger
-
NodeTriggerBase モジュールを mixin したクラスのインスタンス。デフォルトは NpdeTrogger クラスのインスタンス
324 325 326 327 328 329 |
# File 'lib/Miyako/API/diagram.rb', line 324 def add(name, body, trigger = nil) @list << Miyako::Diagram::DiagramBody.new(name, body, trigger) @name2idx[name] = @list.last @first = @list.first unless @first return self end |
#add_arrow(from_name, to_name, &trigger) ⇒ Object
ノード間移動のアローを追加する
移動元ノードと移動先ノードの名前を指定し、条件にかなえばノードを移動する矢印を設定する。 Processor#updateメソッドを呼び出した時、移動条件を確認して移動するかどうかを判断する。 デフォルトでは、ノードのfinish?メソッドがtrueのときにto_nameで示したノードへ移動する。 結果がfalse のときは、from_nameで示したノードを継続して使用する(stopメソッドは呼ばれない)。 また、引数が一つのブロックを渡すことができる。 引数には、現在評価中のノード(from_nameで示したノードのインスタンス)が渡される。 評価の結果、true のときは、to_name で示したノードへ移動する。 結果がfalse のときは、from_nameで示したノードを継続して使用する(stopメソッドは呼ばれない)。 同じ移動元のアローが複数登録されているときは、先に登録したノードの移動条件を確認する。
- from_name
-
移動元ノード名。文字列かシンボルを使用
- to_name
-
移動先ノード名。文字列かシンボルを使用
- trigger
-
ノード間移動するかどうかを返すブロック。ブロックは引数を一つ取る(from_name で示したノードのインスタンス)
344 345 346 347 |
# File 'lib/Miyako/API/diagram.rb', line 344 def add_arrow(from_name, to_name, &trigger) @name2idx[from_name].add_arrow(to_name ? @name2idx[to_name] : nil, trigger) return self end |
#dispose ⇒ Object
:nodoc:
430 431 432 433 434 |
# File 'lib/Miyako/API/diagram.rb', line 430 def dispose #:nodoc: @name2idx.keys.each{|k| @name2idx[k].dispose } end |
#finish? ⇒ Boolean
:nodoc:
426 427 428 |
# File 'lib/Miyako/API/diagram.rb', line 426 def finish? #:nodoc: return @ptr == nil end |
#first ⇒ Object
実行開始ノードを、最初に登録したノードに変更する
但し、遷移図処理が行われていないときに変更可能
369 370 371 372 |
# File 'lib/Miyako/API/diagram.rb', line 369 def first return if @executing @ptr = @first end |
#initialize_copy(obj) ⇒ Object
:nodoc:
311 312 313 314 315 316 |
# File 'lib/Miyako/API/diagram.rb', line 311 def initialize_copy(obj) #:nodoc: @name2idx = @name2idx.dup @list = @list.dup @ptr = @ptr.dup @first = @first.dup end |
#move(name) ⇒ Object
実行開始ノードを変更する
但し、遷移図処理が行われていないときに変更可能
- name
-
ノード名
361 362 363 364 365 |
# File 'lib/Miyako/API/diagram.rb', line 361 def move(name) raise MiyakoError, "Don't set undefined node name!" unless @name2idx.has_key?(name) return if @executing @ptr = @name2idx[name] end |
#nodes ⇒ Object
382 383 384 |
# File 'lib/Miyako/API/diagram.rb', line 382 def nodes return @name2idx.keys end |
#now ⇒ Object
:nodoc:
374 375 376 |
# File 'lib/Miyako/API/diagram.rb', line 374 def now #:nodoc: return @ptr ? @ptr.name : nil end |
#now_node ⇒ Object
:nodoc:
378 379 380 |
# File 'lib/Miyako/API/diagram.rb', line 378 def now_node #:nodoc: return @ptr ? @ptr.node : nil end |
#pause ⇒ Object
:nodoc:
399 400 401 |
# File 'lib/Miyako/API/diagram.rb', line 399 def pause #:nodoc: @ptr.pause if @ptr end |
#render ⇒ Object
:nodoc:
422 423 424 |
# File 'lib/Miyako/API/diagram.rb', line 422 def render #:nodoc: @ptr.render if @ptr end |
#resume ⇒ Object
:nodoc:
403 404 405 |
# File 'lib/Miyako/API/diagram.rb', line 403 def resume #:nodoc: @ptr.resume if @ptr end |
#start ⇒ Object
:nodoc:
386 387 388 389 390 391 |
# File 'lib/Miyako/API/diagram.rb', line 386 def start #:nodoc: @ptr = @first unless @ptr return unless @ptr @ptr.start @executing = true end |
#stop ⇒ Object
:nodoc:
393 394 395 396 397 |
# File 'lib/Miyako/API/diagram.rb', line 393 def stop #:nodoc: @ptr.stop if @ptr @ptr = nil @executing = false end |
#update(*params) ⇒ Object
:nodoc:
411 412 413 414 415 416 417 418 419 420 |
# File 'lib/Miyako/API/diagram.rb', line 411 def update(*params) #:nodoc: return unless @ptr @ptr.update(*params) nxt = @ptr.go_next unless @ptr.equal?(nxt) @ptr.stop @ptr = nxt @ptr.start if @ptr end end |
#update_input(*params) ⇒ Object
:nodoc:
407 408 409 |
# File 'lib/Miyako/API/diagram.rb', line 407 def update_input(*params) #:nodoc: @ptr.update_input(*params) if @ptr end |