File Coverage

blib/lib/POE/Filter/JSONMaybeXS.pm
Criterion Covered Total %
statement 33 49 67.3
branch 3 12 25.0
condition 1 3 33.3
subroutine 8 10 80.0
pod 5 5 100.0
total 50 79 63.2


line stmt bran cond sub pod time code
1             package POE::Filter::JSONMaybeXS;
2             our $AUTHORITY = 'cpan:GETTY';
3             # ABSTRACT: A POE filter using JSON::MaybeXS
4             $POE::Filter::JSONMaybeXS::VERSION = '0.002';
5 2     2   17202 use Carp;
  2         2  
  2         136  
6 2     2   1005 use JSON::MaybeXS;
  2         10732  
  2         107  
7              
8 2     2   12 use strict;
  2         6  
  2         48  
9 2     2   7 use warnings;
  2         2  
  2         56  
10              
11 2     2   7 use base qw( POE::Filter );
  2         2  
  2         1168  
12              
13             sub BUFFER () { 0 }
14             sub OBJ () { 1 }
15              
16             sub new {
17 1     1 1 9 my $class = shift;
18 1 50       4 croak "$class requires an even number of parameters" if @_ % 2;
19 1         3 my %opts = @_;
20 1   33     9 bless( [
21             [], # BUFFER
22             JSON::MaybeXS->new( %opts ) # OBJ
23             ], ref $class || $class );
24             }
25              
26             sub get {
27 1     1 1 168 my ($self, $lines) = @_;
28 1         2 my $ret = [];
29              
30 1         2 foreach my $json (@$lines) {
31 1 50       2 if ( my $data = eval { ($self->[ OBJ ]->decode( $json )) } ) {
  1         11  
32 1         7 push( @$ret, $data );
33             } else {
34 0         0 warn "Couldn't convert json: $@";
35             }
36             }
37 1         3 return $ret;
38             }
39              
40             sub get_one_start {
41 0     0 1 0 my ($self, $lines) = @_;
42 0 0       0 $lines = [ $lines ] unless ( ref( $lines ) );
43 0         0 push( @{ $self->[ BUFFER ] }, @{ $lines } );
  0         0  
  0         0  
44             }
45              
46             sub get_one {
47 0     0 1 0 my $self = shift;
48 0         0 my $ret = [];
49              
50 0 0       0 if ( my $line = shift ( @{ $self->[ BUFFER ] } ) ) {
  0         0  
51 0 0       0 if ( my $data = eval { ($self->[ OBJ ]->decode( $line )) } ) {
  0         0  
52 0         0 push( @$ret, $data );
53             } else {
54 0         0 warn "Couldn't convert json: $@";
55             }
56             }
57              
58 0         0 return $ret;
59             }
60              
61             sub put {
62 1     1 1 318 my ($self, $objects) = @_;
63 1         2 my $ret = [];
64              
65 1         3 foreach my $obj (@$objects) {
66 1 50       1 if ( my $json = eval { $self->[ OBJ ]->encode( $obj ) } ) {
  1         19  
67 1         2 push( @$ret, $json );
68             } else {
69 0         0 warn "Couldn't convert object to json\n";
70             }
71             }
72            
73 1         3 return $ret;
74             }
75              
76             1;
77              
78             __END__