rgop - Ruby Graph Oriented Programming

| | コメント(0)

つくってみた。

ファイルをダウンロード

simple_workflow.png

右の図を表現したいときは、次のように書ける。まだそれだけ。

require 'rgop'

# define nodes
start_state = RGOP::Node.new(:start) { |exec|
  exec.event(:continue)
}
amount = RGOP::Node.new(:amount) { |exec|
  if(exec.value[:amount] > 100)
    exec.event(:yes)
  else
    exec.event(:no)
  end
}
check = RGOP::Node.new(:check)
deliver = RGOP::Node.new(:deliver)
end_state = RGOP::Node.new(:end)

# define transitions
start_state.add_transition(:continue, amount)
amount.add_transition(:yes, check)
amount.add_transition(:no, deliver)
check.add_transition(:continue, deliver)
deliver.add_transition(:continue, end_state)

puts '# when amount is 150'
exec = RGOP::Execution.new(start_state)
exec.value[:amount] = 150
p exec.node.name # => :start
exec.event(:continue)
p exec.node.name # => :check
exec.event(:continue)
p exec.node.name # => :deliver
exec.event(:continue)
p exec.node.name # => :end

puts '# when amount is 80'
exec = RGOP::Execution.new(start_state)
exec.value[:amount] = 80
p exec.node.name # => :start
exec.event(:continue)
p exec.node.name # => :deliver
exec.event(:continue)
p exec.node.name # => :end

コメントする

著者について

高井直人
高井 直人
takai@recompile.net

ソフトウェアエンジニア。1977年横浜生まれ。大学在学中からネットワークや情報技術にたずさわる。Web制作会社などを経て、現在はシステムインテグレータに勤務。エンタープライズRubyをテーマに社内標準の策定などに従事している。

タグクラウド

ウェブページ

Powered by Movable Type 4.1-en-release-26-r1141-20080104