package Path::Router::Route; use Moose; our $VERSION = '0.02'; our $AUTHORITY = 'cpan:STEVAN'; use Path::Router::Types; has 'path' => ( is => 'ro', isa => 'Str', required => 1 ); has 'defaults' => ( is => 'ro', isa => 'HashRef', default => sub { {} }, predicate => { 'has_defaults' => sub { scalar keys %{(shift)->{defaults}} } } ); has 'validations' => ( is => 'ro', isa => 'Path::Router::Route::ValidationMap', coerce => 1, default => sub { {} }, predicate => { 'has_validations' => sub { scalar keys %{(shift)->{validations}} } } ); has 'components' => ( is => 'ro', isa => 'ArrayRef[Str]', lazy => 1, default => sub { [ grep {$_} split '/' => (shift)->path ] } ); has 'length' => ( is => 'ro', isa => 'Int', lazy => 1, default => sub { scalar @{(shift)->components} } ); has 'target' => (is => 'ro', isa => 'Any', predicate => 'has_target'); # misc sub create_default_mapping { my $self = shift; +{ %{$self->defaults} } } sub has_validation_for { my ($self, $name) = @_; $self->validations->{$name}; } # component checking sub is_component_optional { my ($self, $component) = @_; $component =~ /^\?\:/; } sub is_component_variable { my ($self, $component) = @_; $component =~ /^\??\:/; } sub get_component_name { my ($self, $component) = @_; my ($name) = ($component =~ /^\??\:(.*)$/); return $name; } # various types of lenths we need sub length_without_optionals { my $self = shift; scalar grep { !$self->is_component_optional($_) } @{$self->components} } sub length_with_defaults_and_validations { my $self = shift; (scalar keys %{$self->defaults}) + (scalar keys %{$self->validations}) } no Moose; 1 __END__ =pod =head1 NAME Path::Router::Route - An object to represent a route =head1 DESCRIPTION This object is created by L when you call the C method. In general you won't ever create these objects directly, they will be created for you and you may sometimes introspect them. =head1 METHODS =over 4 =item B $path, ?%options)> =item B =item B =item B =item B =item B =item B =item B =item B =item B =item B =back =over 4 =item B =back =head2 Component checks =over 4 =item B =item B =item B =back =head2 Length methods =over 4 =item B =item B =back =head2 Introspection =over 4 =item B =back =head1 BUGS All complex software has bugs lurking in it, and this module is no exception. If you find a bug please either email me, or add the bug to cpan-RT. =head1 AUTHOR Stevan Little Estevan.little@iinteractive.comE =head1 COPYRIGHT AND LICENSE Copyright 2008 Infinity Interactive, Inc. L This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut