Class: Miyako::Diagram::Manager

Inherits:
Object
  • Object
show all
Defined in:
lib/Miyako/API/diagram.rb

Overview

遷移図管理クラス

遷移図クラス本体(Diagramクラス)を管理するクラス。

Instance Method Summary collapse

Constructor Details

#initializeManager

: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

ノード名

返却値

指定のノード

Raises:



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

#disposeObject

: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:

Returns:

  • (Boolean)


426
427
428
# File 'lib/Miyako/API/diagram.rb', line 426

def finish? #:nodoc:
  return @ptr == nil
end

#firstObject

実行開始ノードを、最初に登録したノードに変更する

但し、遷移図処理が行われていないときに変更可能



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

ノード名

Raises:



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

#nodesObject



382
383
384
# File 'lib/Miyako/API/diagram.rb', line 382

def nodes
  return @name2idx.keys
end

#nowObject

:nodoc:



374
375
376
# File 'lib/Miyako/API/diagram.rb', line 374

def now #:nodoc:
  return @ptr ? @ptr.name : nil
end

#now_nodeObject

:nodoc:



378
379
380
# File 'lib/Miyako/API/diagram.rb', line 378

def now_node #:nodoc:
  return @ptr ? @ptr.node : nil
end

#pauseObject

:nodoc:



399
400
401
# File 'lib/Miyako/API/diagram.rb', line 399

def pause #:nodoc:
  @ptr.pause if @ptr
end

#renderObject

:nodoc:



422
423
424
# File 'lib/Miyako/API/diagram.rb', line 422

def render #:nodoc:
  @ptr.render if @ptr
end

#resumeObject

:nodoc:



403
404
405
# File 'lib/Miyako/API/diagram.rb', line 403

def resume #:nodoc:
  @ptr.resume if @ptr
end

#startObject

: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

#stopObject

: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