Catalyst-TraitFor-Request-DecodedParams

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN


        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 )