Mojolicious-Plugin-CanonicalURL
view release on metacpan or search on metacpan
META.json
META.yml
README
cpanfile
dist.ini
lib/Mojolicious/Plugin/CanonicalURL.pm
public/static.txt
t/author-pod-syntax.t
t/canonicalize_before_render_false.t
t/canonicalize_before_render_true.t
t/config_validate.t
t/lib/Mojolicious/Plugin/CanonicalURL/Tester.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/Captures.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/EndWithSlash.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/InlineCode.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/MyApp.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/MyTextApp.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/OnlyPathChanges.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/RemoveTrailingSlashes.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/ShouldAndShouldNotCanonicalizeRequestTogether.pm
t/lib/Mojolicious/Plugin/CanonicalURL/Tester/ShouldCanonicalizeRequest.pm
lib/Mojolicious/Plugin/CanonicalURL.pm view on Meta::CPAN
sub register {
my (undef, $app, $config) = @_;
my (
$should_canonicalize_request_config,
$should_not_canonicalize_request_config,
$inline_code,
$end_with_slash,
$canonicalize_before_render,
%captures
) = _parse_and_validate_config($config);
my $sub_string = '';
my ($path_declared, $path_with_no_slashes_at_the_end_declared);
if (defined $should_canonicalize_request_config) {
($path_declared, $path_with_no_slashes_at_the_end_declared, $sub_string) = _create_should_canonicalize_request_sub_string(
config => $should_canonicalize_request_config,
captures => \%captures,
sub_string => $sub_string,
should_canonicalize_request => 1,
path_declared => $path_declared,
lib/Mojolicious/Plugin/CanonicalURL.pm view on Meta::CPAN
$sub_string = "return if \$_[0]->res->is_redirect;$sub_string";
$app->hook(before_render => _quote_sub($sub_string, \%captures));
}
}
sub _quote_sub {
my ($sub_string, $captures) = @_;
return Sub::Quote::quote_sub $sub_string, $captures, {no_install => 1, no_defer => 1};
}
sub _parse_and_validate_config {
my ($config) = @_;
my (
$should_canonicalize_request,
$should_not_canonicalize_request,
$inline_code,
$end_with_slash,
$canonicalize_before_render
);
my %captures;
if (defined $config) {
Carp::confess 'config must be a hash reference, but was ' . Scalar::Util::reftype $config
if not defined Scalar::Util::reftype $config
or Scalar::Util::reftype $config ne 'HASH';
if (%$config) {
my $captures_allowed;
if (exists $config->{should_canonicalize_request}) {
($should_canonicalize_request, $captures_allowed) =
_validate_should_canonicalize_request_config(delete $config->{should_canonicalize_request}, 1);
}
if (exists $config->{should_not_canonicalize_request}) {
($should_not_canonicalize_request, $captures_allowed) = _validate_should_canonicalize_request_config(
delete $config->{should_not_canonicalize_request},
undef,
);
}
if (exists $config->{inline_code}) {
$inline_code = delete $config->{inline_code};
Carp::confess 'inline_code must be a true scalar value'
unless not defined Scalar::Util::reftype $inline_code and $inline_code;
$captures_allowed = 1;
lib/Mojolicious/Plugin/CanonicalURL.pm view on Meta::CPAN
return (
$should_canonicalize_request,
$should_not_canonicalize_request,
$inline_code,
$end_with_slash,
$canonicalize_before_render,
%captures
);
}
sub _validate_should_canonicalize_request_config {
my ($config, $should_canonicalize_request) = @_;
my $captures_allowed;
my $config_name = _get_should_canonicalize_request_config_name($should_canonicalize_request);
my $config_reftype = Scalar::Util::reftype $config || '';
Carp::confess
"$config_name must be a scalar that evaluates to true and starts with a '/', a REGEXP, a SCALAR, a subroutine, an array reference, or a hash reference"
unless $config
and ((not $config_reftype and index($config, '/') == 0)
or grep { $config_reftype eq $_ } qw/ARRAY HASH REGEXP SCALAR CODE/);
lib/Mojolicious/Plugin/CanonicalURL.pm view on Meta::CPAN
or $reftype eq 'REGEXP'
or $reftype eq 'SCALAR';
Carp::confess "elements of $config_name must begin with a '/' when they are scalar"
if not defined $reftype and index($_, '/') != 0;
if (defined $reftype and $reftype eq 'SCALAR') {
$captures_allowed = 1;
}
if (defined $reftype and $reftype eq 'HASH') {
_validate_starts_with_hash($config_name, $_);
}
}
} elsif (defined $config_reftype and $config_reftype eq 'HASH') {
_validate_starts_with_hash($config_name, $config);
}
return ($config, $captures_allowed);
}
sub _validate_starts_with_hash {
my ($config_name, $hash) = @_;
my %copy = %$hash;
Carp::confess "must provide key 'starts_with' to hash in $config_name" unless exists $copy{starts_with};
Carp::confess 'value for starts_with must not be undef' unless defined $copy{starts_with};
Carp::confess 'value for starts_with must be a scalar'
unless not defined Scalar::Util::reftype $copy{starts_with};
Carp::confess q{value for starts_with must begin with a '/'}
unless index(delete $copy{starts_with}, '/') == 0;
Carp::confess "unknown keys/values passed in hash inside of $config_name: " . Mojo::Util::dumper \%copy
if %copy
( run in 0.798 second using v1.01-cache-2.11-cpan-39bf76dae61 )