File Coverage

blib/lib/PawsX/DynamoDB/DocumentClient/BatchGet.pm
Criterion Covered Total %
statement 52 54 96.3
branch 6 8 75.0
condition n/a
subroutine 13 14 92.8
pod 0 3 0.0
total 71 79 89.8


line stmt bran cond sub pod time code
1             package PawsX::DynamoDB::DocumentClient::BatchGet;
2              
3 1     1   718 use strict;
  1         3  
  1         23  
4 1     1   20 use 5.008_005;
  1         3  
5              
6 1     1   5 use Net::Amazon::DynamoDB::Marshaler;
  1         1  
  1         55  
7 1         37 use PawsX::DynamoDB::DocumentClient::Util qw(
8             make_assert_arrayref
9             make_assert_hashref
10             unmarshal_attribute_map
11 1     1   6 );
  1         2  
12 1     1   361 use PerlX::Maybe;
  1         1301  
  1         461  
13              
14             my $METHOD_NAME = 'batch_get()';
15             my $ASSERT_HASHREF = make_assert_hashref($METHOD_NAME);
16             my $ASSERT_ARRAYREF = make_assert_arrayref($METHOD_NAME);
17              
18             sub transform_arguments {
19 5     5 0 5618 my $class = shift;
20 5         19 my %args = @_;
21             return (
22             %args,
23 5         19 RequestItems => _marshall_request_items($args{RequestItems}),
24             );
25             }
26              
27             sub transform_output {
28 1     1 0 2848 my ($class, $output) = @_;
29 1         28 my $response = $output->Responses;
30             return {
31 1         30 responses => _unmarshall_responses($output->Responses),
32             unprocessed_keys => _unmarshall_unproc_keys($output->UnprocessedKeys),
33             };
34             }
35              
36             sub run_service_command {
37 0     0 0 0 my ($class, $service, %args) = @_;
38 0         0 return $service->BatchGetItem(%args);
39             }
40              
41             sub _marshall_request_items {
42 5     5   11 my ($items) = @_;
43 5         20 $ASSERT_HASHREF->('RequestItems', $items);
44 4         15 return { map { $_ => _marshall_request_item($items->{$_}) } keys %$items };
  5         52  
45             }
46              
47             sub _marshall_request_item {
48 5     5   10 my ($item) = @_;
49 5         17 my $keys = $item->{Keys};
50 5 100       20 die "$METHOD_NAME: RequestItems entry must have Keys" unless $keys;
51 4         17 $ASSERT_ARRAYREF->('Keys', $keys);
52             $ASSERT_HASHREF->('Keys entry', $_)
53 3         15 for @$keys;
54             return {
55             %$item,
56 2         5 Keys => [ map { dynamodb_marshal($_) } @{$item->{Keys}} ],
  3         33  
  2         5  
57             };
58             }
59              
60             sub _unmarshall_responses {
61 1     1   9 my ($responses) = @_;
62 1 50       4 return undef unless $responses;
63 1         26 my $tables = $responses->Map;
64             return {
65 1         8 map { $_ => _unmarshall_response_items($tables->{$_}) }
  2         35  
66             keys %$tables
67             };
68             }
69              
70             sub _unmarshall_response_items {
71 2     2   5 my ($items) = @_;
72 2         4 return [ map { unmarshal_attribute_map($_) } @$items ];
  3         45  
73             }
74              
75             sub _unmarshall_unproc_keys {
76 1     1   63 my ($unprocessed) = @_;
77 1         25 my $tables = $unprocessed->Map;
78 1 50       9 return undef unless %$tables;
79             return {
80 1         4 map { $_ => _unmarshall_keys_and_attrs($tables->{$_}) }
  2         28  
81             keys %$tables
82             };
83             }
84              
85             sub _unmarshall_keys_and_attrs {
86 2     2   5 my ($obj) = @_;
87 2         3 my $attr_names;
88 2 100       52 if ($obj->ExpressionAttributeNames) {
89 1         30 $attr_names = $obj->ExpressionAttributeNames->Map;
90             };
91              
92             return {
93             maybe ConsistentRead => $obj->ConsistentRead,
94             maybe ProjectionExpression => $obj->ProjectionExpression,
95             maybe ExpressionAttributeNames => $attr_names,
96             Keys => [
97 2         87 map { unmarshal_attribute_map($_) } @{$obj->Keys}
  3         37  
  2         108  
98             ],
99             }
100             }
101              
102             1;
103             __END__