Map-Metro
view release on metacpan or search on metacpan
lib/Map/Metro.pm view on Meta::CPAN
all_hooks => 'elements',
hook_count => 'count',
},
);
has _plugin_ns => (
is => 'ro',
isa => Str,
default => 'Plugin::Map',
init_arg => undef,
);
around BUILDARGS => sub {
my ($orig, $class, @args) = @_;
my %args;
if(scalar @args == 1) {
$args{'map'} = shift @args;
}
elsif(scalar @args % 2 != 0) {
my $map = shift @args;
%args = @args;
$args{'map'} = $map;
}
else {
%args = @args;
}
if(exists $args{'map'} && !ArrayRef->check($args{'map'})) {
$args{'map'} = [$args{'map'}];
}
if(exists $args{'hooks'} && !ArrayRef->check($args{'hooks'})) {
$args{'hooks'} = [$args{'hooks'}];
}
return $class->$orig(%args);
};
sub BUILD {
my $self = shift;
my @args = @_;
if($self->has_map) {
my @system_maps = map { s{^Map::Metro::Plugin::Map::}{}; $_ } $self->system_maps;
if(any { $_ eq $self->get_map(0) } @system_maps) {
my $mapclass = 'Map::Metro::Plugin::Map::'.$self->get_map(0);
my $mapobj = $mapclass->new(hooks => $self->hooks);
$self->add_mapclass($mapobj);
}
else {
try { die no_such_map mapname => $self->get_map(0) } catch { die $_->desc };
}
}
}
# Borrowed from Mojo::Util
sub decamelize {
my $self = shift;
my $string = shift;
return $string if $string !~ m{[A-Z]};
return join '_' => map {
join ('_' => map { lc } grep { length } split m{([A-Z]{1}[^A-Z]*)})
} split '::' => $string;
}
sub parse {
my $self = shift;
my %args = @_;
return Map::Metro::Graph->new(filepath => $self->get_mapclass(0)->maplocation,
do_undiacritic => $self->get_mapclass(0)->do_undiacritic,
wanted_hook_plugins => [$self->all_hooks],
exists $args{'override_line_change_weight'} ? (override_line_change_weight => $args{'override_line_change_weight'}) : (),
)->parse;
}
sub available_maps {
my $self = shift;
return sort $self->system_maps;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Map::Metro - Public transport graphing
=begin html
<p>
<img src="https://img.shields.io/badge/perl-5.10+-blue.svg" alt="Requires Perl 5.10+" />
<a href="https://travis-ci.org/Csson/p5-Map-Metro"><img src="https://api.travis-ci.org/Csson/p5-Map-Metro.svg?branch=master" alt="Travis status" /></a>
<a href="http://cpants.cpanauthors.org/dist/Map-Metro-0.2405"><img src="https://badgedepot.code301.com/badge/kwalitee/Map-Metro/0.2405" alt="Distribution kwalitee" /></a>
<a href="http://matrix.cpantesters.org/?dist=Map-Metro%200.2405"><img src="https://badgedepot.code301.com/badge/cpantesters/Map-Metro/0.2405" alt="CPAN Testers result" /></a>
<img src="https://img.shields.io/badge/coverage-72.9%-red.svg" alt="coverage 72.9%" />
</p>
=end html
=head1 VERSION
Version 0.2405, released 2016-07-23.
=head1 SYNOPSIS
# Install a map
$ cpanm Map::Metro::Plugin::Map::Stockholm
# And then
my $graph = Map::Metro->new('Stockholm', hooks => ['PrettyPrinter'])->parse;
my $routing = $graph->routing_for('Universitetet', 'Kista');
# or in a terminal
( run in 0.793 second using v1.01-cache-2.11-cpan-71847e10f99 )