| MojoX-Routes-AsGraph documentation | Contained in the MojoX-Routes-AsGraph distribution. |
MojoX::Routes::AsGraph - Create a graph from a MojoX::Routes object
version 0.04
Given a MojoX::Routes object, generates a Graph::Easy object with all the possible routes.
use MojoX::Routes::AsGraph;
use My::Mojolicious::App;
my $app = My::Mojolicious::App->new;
my $graph = MojoX::Routes::AsGraph->graph($app->routes);
### $graph is a Graph::Easy object, generate a .dot file
if (open(my $dot, '>', 'routes.dot')) {
print $dot $graph->as_graphviz;
close($dot);
}
### or directly as a PNG file
if (open(my $png, '|-', 'dot -Tpng -o routes.png')) {
print $png $graph->as_graphviz;
close($png);
}
Accepts a MojoX::Routes object and generates an Graph::Easy object with a representation of the routes tree.
Pedro Melo, <melo at cpan.org>
Please report any bugs or feature requests to bug-mojox-routes-asgraph at rt.cpan.org, or through
the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=MojoX-Routes-AsGraph. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
You can find documentation for this module with the perldoc command.
perldoc MojoX::Routes::AsGraph
You can also look for information at:
http://rt.cpan.org/NoAuth/Bugs.html?Dist=MojoX-Routes-AsGraph
Use the #mojo channel at FreeNode.
Copyright 2009 Pedro Melo.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| MojoX-Routes-AsGraph documentation | Contained in the MojoX-Routes-AsGraph distribution. |
package MojoX::Routes::AsGraph; our $VERSION = '0.04'; use warnings; use strict; use Graph::Easy; sub graph { my ($self, $r) = @_; return unless $r; my $g = Graph::Easy->new; _new_node($g, $r, {}); return $g; } sub _new_node { my ($g, $r, $s) = @_; ### collect cool stuff my $name = $r->name; my $is_endpoint = $r->is_endpoint; my $pattern = $r->pattern; my $ctrl_actn; if ($pattern) { my $controller = $pattern->defaults->{controller}; my $action = $pattern->defaults->{action}; $ctrl_actn = $controller || ''; $ctrl_actn .= "->$action" if $action; $pattern = $pattern->pattern; } ### Create node my @node_name = ($is_endpoint? '*' : ''); if (!$pattern && !$ctrl_actn) { my $n = ++$s->{empty}; push @node_name, "<empty $n>"; } else { push @node_name, "'$pattern'" if $pattern; push @node_name, "[$ctrl_actn]" if $ctrl_actn; } push @node_name, "($name)" if $name; my $node = $g->add_node(join(' ', @node_name)); ### Draw my children for my $child (@{$r->children}) { my $child_node = _new_node($g, $child, $s); $g->add_edge($node, $child_node); } return $node; } 1; # End of MojoX::Routes::AsGraph __END__