Catalyst-TraitFor-Request-StructuredParameters
view release on metacpan or search on metacpan
# 'person.person_roles[].role_id' => '3',
# 'person.person_roles[].role_id' => '4',
sub select :Local {
my ($self, $c) = @_;
my %clean = $c->structured_body(['person'], +{ 'person_roles' => [ 'role_id' ] } )->to_hash;
my $dumped = Dumper(\%clean);
$c->res->body($dumped);
}
# 'person.roles[].id[]' => '',
# 'person.roles[].id[]' => '1',
# 'person.roles[].id[]' => '2',
sub select3 :Local {
my ($self, $c) = @_;
my %clean = $c->structured_body(['person'], +{ 'roles' => [ 'id', '_nop' ] } )->to_hash;
my $dumped = Dumper(\%clean);
$c->res->body($dumped);
}
sub select2 :Local {
my ($self, $c) = @_;
my %clean = $c->structured_body(['person'], +{ 'person_roles' => [ 'role' => ['id'] ] } )->to_hash;
my $dumped = Dumper(\%clean);
$c->res->body($dumped);
}
# 'person.role_ids[]' => 1,
# 'person.role_ids[]' => 2,
# 'person.role_ids[]' => 3,
# {
# role_ids => [1,2,3],
# }
#
sub array :Local {
my ($self, $c) = @_;
my %clean = $c->structured_body(['person'], +{ 'person_roles' => [ 'role' => ['id'] ] } )->to_hash;
my $dumped = Dumper(\%clean);
$c->res->body($dumped);
}
sub end :Action {
my ($self, $c) = @_;
if($c->has_errors) {
$c->res->body($c->last_error);
$c->clear_errors;
}
}
$INC{'MyApp/Controller/Root.pm'} = __FILE__;
package MyApp;
use Catalyst 'StructuredParameters';
MyApp->request_class_traits(['TestTrait']);
MyApp->setup;
}
use HTTP::Request::Common;
use Catalyst::Test 'MyApp';
{
ok my $res = request GET '/root/query?username=jjn&name.first=john&name.last=napiorkowski';
ok my $data = eval $res->content;
is_deeply $data, +{
username => 'jjn',
name => +{
first => 'john',
last => 'napiorkowski',
},
}
}
{
ok my $res = request GET '/root/query?name.first=john&name.last=napiorkowski';
is $res->content, "Required parameter 'username' is missing.";
}
{
ok my $body_parameters = [
'person.name' => 2,
'person.name' => 'John', # flatten array should jsut pick the last one
'person.age' => '52',
'person.address.street.number' => '15604',
'person.address.street.name' => 'Harry Lind Road',
'person.address.street.memo[0]' => 'test1',
'person.address.street.memo[1]' => 'test2',
'person.address.zip' => '78621',
'person.email[0]' => 'jjn1056@gmail.com',
'person.email[1]' => 'jjn1056@yahoo.com',
'person.email' => 'jjn1056@example.com',
'person.credit_cards[0].number' => '245345345345345',
'person.credit_cards[0].exp' => '2024-01-01',
'person.credit_cards[1].number' => '666677777888878',
'person.credit_cards[1].exp' => '2024-01-01',
'person.credit_cards[1].detail[0].one' => '1one',
'person.credit_cards[1].detail[0].two' => '1two',
'person.credit_cards[1].detail[1].one' => '2one',
'person.credit_cards[1].detail[1].two' => '2two',
'person.credit_cards[1].detail[1].three' => '2three',
'person.credit_cards[2].number' => '88888888888',
'person.credit_cards[2].exp.year' => '3024',
'person.credit_cards[2].exp.month' => '12',
'person.credit_cards[2].exp.day' => '1',
'person.credit_cards[2].note[0]' => '1',
'person.credit_cards[2].note[1]' => '2',
'person.credit_cards[2].note[2]' => '3',
'person.credit_cards[2].note[]' => '4',
'person.credit_cards[2].note[]' => '5',
'person.credit_cards[].number' => '444444433333',
'person.credit_cards[].exp' => '4024-01-01',
];
ok my $res = request POST '/root/body', $body_parameters;
ok my $data = eval $res->content;
is_deeply $data, +{
address => {
( run in 0.495 second using v1.01-cache-2.11-cpan-39bf76dae61 )