Catalyst-TraitFor-Request-DecodedParams
view release on metacpan or search on metacpan
extends 'Catalyst';
__PACKAGE__->apply_request_class_roles(qw/
Catalyst::TraitFor::Request::DecodedParams::JSON
/);
1;
METHODS
decoded_query_parameters
decoded_query_params, dquery_params
decoded_body_parameters
decoded_body_params, dbody_params
decoded_parameters
decoded_params, dparams
AUTHOR
Wallace Reis "<wreis at cpan.org>"
LICENSE
This library is free software and may be distributed under the same
terms as perl itself.
lib/Catalyst/TraitFor/Request/DecodedParams.pm view on Meta::CPAN
our $VERSION = '0.02';
requires qw/_build_params_decoder _do_decode_params/;
has '_params_decoder' => (
init_arg => undef, is => 'ro',
lazy => 1, builder => '_build_params_decoder',
);
has decoded_params => (
init_arg => undef, isa => 'HashRef',
is => 'ro', lazy => 1, builder => '_build_decoded_params',
);
sub _build_decoded_params {
my $self = shift;
return $self->_do_decode_params($self->params);
}
sub decoded_parameters { return shift->decoded_params }
sub dparams { return shift->decoded_params }
has decoded_query_params => (
init_arg => undef, isa => 'HashRef',
is => 'ro', lazy => 1, builder => '_build_decoded_query_params',
);
sub _build_decoded_query_params {
my $self = shift;
return $self->_do_decode_params($self->query_params);
}
sub decoded_query_parameters { return shift->decoded_query_params }
sub dquery_params { return shift->decoded_query_params }
has decoded_body_params => (
init_arg => undef, isa => 'HashRef',
is => 'ro', lazy => 1, builder => '_build_decoded_body_params',
);
sub _build_decoded_body_params {
my $self = shift;
return $self->_do_decode_params($self->body_params);
}
sub decoded_body_parameters { return shift->decoded_body_params }
sub dbody_params { return shift->decoded_body_params }
1;
__END__
=head1 NAME
Catalyst::TraitFor::Request::DecodedParams - A request trait for params decoding
=head1 SYNOPSIS
lib/Catalyst/TraitFor/Request/DecodedParams.pm view on Meta::CPAN
__PACKAGE__->apply_request_class_roles(qw/
Catalyst::TraitFor::Request::DecodedParams::JSON
/);
1;
=head1 METHODS
=over
=item decoded_query_parameters
decoded_query_params, dquery_params
=item decoded_body_parameters
decoded_body_params, dbody_params
=item decoded_parameters
decoded_params, dparams
=back
=head1 AUTHOR
Wallace Reis C<< <wreis at cpan.org> >>
=head1 LICENSE
This library is free software and may be distributed under the same terms as
lib/Catalyst/TraitFor/Request/DecodedParams/JSON.pm view on Meta::CPAN
our $VERSION = '0.01';
with 'Catalyst::TraitFor::Request::DecodedParams';
sub _build_params_decoder { return JSON::Any->new(allow_nonref => 1) }
sub _do_decode_params {
my ( $self, $params ) = @_;
my $decoder = $self->_params_decoder;
my $decoded_param = { %$params };
foreach my $key ( keys %$decoded_param ) {
my $value = $decoded_param->{$key};
$decoded_param->{$key} = try { $decoder->from_json($value) }
catch { $decoder->from_json( $decoder->to_json($value) ) };
}
return $decoded_param;
}
1;
__END__
=head1 NAME
Catalyst::TraitFor::Request::DecodedParams::JSON
t/01-json_decoder.t view on Meta::CPAN
my $param = {
bar => 1,
baz => 1,
};
my ( $res, $ctx ) = ctx_request(
'/?' . 'param='
. JSON::Any->new->encode($param)
);
my $req = $ctx->req;
is_deeply($req->dparams, $req->decoded_parameters);
is_deeply($req->dparams, $req->decoded_params);
is_deeply($req->decoded_params->{'param'}, $param);
is_deeply($req->dquery_params->{'param'}, $param);
( $res, $ctx ) = ctx_request( POST('/', {
param => JSON::Any->new->encode($param)
}));
$req = $ctx->req;
is_deeply($req->dparams, $req->decoded_parameters);
is_deeply($req->dparams, $req->decoded_params);
is_deeply($req->decoded_params->{'param'}, $param);
is_deeply($req->dbody_params->{'param'}, $param);
done_testing;
t/author/00-utf8.t view on Meta::CPAN
BEGIN {
use_ok 'Catalyst::Test', 'Simple';
}
my $param = { foo => 'áçéò' };
my ( $res, $ctx ) = ctx_request(
'/?' . 'param='
. JSON::Any->new->encode($param)
);
my $req = $ctx->req;
is_deeply($req->dparams, $req->decoded_parameters);
is_deeply($req->dparams, $req->decoded_params);
is_deeply($req->decoded_params->{'param'}, $param);
is_deeply($req->dquery_params->{'param'}, $param);
( $res, $ctx ) = ctx_request( POST('/', {
param => JSON::Any->new->encode($param)
}));
$req = $ctx->req;
is_deeply($req->dparams, $req->decoded_parameters);
is_deeply($req->dparams, $req->decoded_params);
is_deeply($req->decoded_params->{'param'}, $param);
is_deeply($req->dbody_params->{'param'}, $param);
done_testing;
( run in 0.494 second using v1.01-cache-2.11-cpan-26ccb49234f )