If you need graphviz, install Xcode and dispatch following command.
brew update
brew install gts
brew install graphviz
| use strict; | |
| use warnings; | |
| use Plack::Request; | |
| use Plack::MIME; | |
| use Plack::App::Directory; | |
| use FindBin; | |
| my $java_bin = `which java` =~ s/[\n\r]//gr | |
| or die 'Install Java :('; | |
| my $graphviz_dot = `which dot` =~ s/[\n\r]//gr | |
| or warn 'Running without graphviz'; | |
| my $plant_uml_jar = "$FindBin::Bin/plantuml.jar"; | |
| unless (-f $plant_uml_jar) { | |
| print "Initializing..."; | |
| system qq(wget -O $plant_uml_jar http://jaist.dl.sourceforge.net/project/plantuml/plantuml.jar); | |
| exit; | |
| } | |
| sub { | |
| my $req = Plack::Request->new(shift); | |
| my $path = ($req->path_info =~ s/[\/\\\0]//gr); | |
| if ($path eq '/' || $path eq 'favicon.ico' || not $path) { | |
| return Plack::App::Directory->new->to_app->($req->env); | |
| } | |
| if ($path =~ /uml$/ && $req->query_parameters->{render}) { | |
| my $cmd = join " ", | |
| "env", | |
| "JAVA_BIN='$java_bin'", | |
| "GRAPHVIZ_DOT='$graphviz_dot'", | |
| "$java_bin -jar $plant_uml_jar", | |
| "-SdefaultFontName='Hiragino Kaku Gothic Pro W3'", | |
| "-charset utf8", | |
| "'$path'"; | |
| system $cmd; | |
| $path =~ s/uml$/png/; | |
| } | |
| my $content_type = Plack::MIME->mime_type($path) || 'text/plain; charset=UTF-8'; | |
| open my $image, '<', $path or die $!; | |
| return [200, ['Content-Type' => $content_type], $image]; | |
| }; |