Graphviz on Rails

Asakusa.rb で Graphviz on Rails を試してみるよ。

Railsプロジェクト作成

$ rails graphviz
      create  
      create  app/controllers
      create  app/helpers
      create  app/models
      .....
      create  log/production.log
      create  log/development.log
      create  log/test.log
$ cd graphviz/
$ script/generate controller Graphviz
      exists  app/controllers/
      exists  app/helpers/
      create  app/views/graphviz
      exists  test/functional/
      create  app/controllers/graphviz_controller.rb
      create  test/functional/graphviz_controller_test.rb
      create  app/helpers/graphviz_helper.rb

とりあえず表示できるところまで

class GraphvizController < ApplicationController

def index
end

end
  • config/routes.rb
(endの前に追加)
map.connect '', :controller => "graphviz"
<html>
<head>
        <title>Graphviz on Rails</title>
        <%= javascript_include_tag "prototype" %>
</head>
<body>
        <h1>Graphviz on Rails</h1>
        <% form_remote_tag :update=>"dotsvg", :url=>{:action=>'update_dotsvg'} do %>
        digraph G {<br />
                <%= text_area(:graph, params[:graph], :cols => 40, :rows => 5) %>
        <br />
        }
        <%= submit_tag "Go" %>
        <% end %>

        <div id="dotsvg">
        <!-- An SVG graphic will go here when the form is submitted -->
        </div>
</body>
</html>
  • app/controllers/graphviz_controller.rb
    • 原文だと@paramsになっているんだけど、@はとる
  def update_dotsvg
    gv=IO.popen("/usr/local/bin/dot -q -Tsvg","w+")
    gv.puts "digraph G{", params[:graph], "}"
    gv.close_write
    @gvsvg=gv.read
  end

これで Webrick 起動したらなんか表示できた。

$ script/server

ちなみに、ノードを増やしたら表示されなくなった。あれっ?

と思ったらスクロールの先に隠れてました。