File Coverage

blib/lib/JSON/Transform/Parser.pm
Criterion Covered Total %
statement 25 25 100.0
branch n/a
condition n/a
subroutine 8 8 100.0
pod 1 1 100.0
total 34 34 100.0


line stmt bran cond sub pod time code
1             package JSON::Transform::Parser;
2              
3 2     2   89746 use strict;
  2         19  
  2         56  
4 2     2   11 use warnings;
  2         3  
  2         51  
5 2     2   12 use base qw(Pegex::Parser);
  2         3  
  2         990  
6 2     2   24391 use Exporter 'import';
  2         5  
  2         63  
7 2     2   954 use JSON::Transform::Grammar;
  2         7  
  2         16  
8 2     2   945 use XML::Invisible::Receiver;
  2         4498  
  2         77  
9              
10 2     2   15 use constant DEBUG => $ENV{JSON_TRANSFORM_DEBUG};
  2         6  
  2         331  
11              
12             our @EXPORT_OK = qw(
13             parse
14             );
15              
16             =head1 NAME
17              
18             JSON::Transform::Parser - JSON::Transform Pegex parser
19              
20             =head1 SYNOPSIS
21              
22             use JSON::Transform::Parser qw(parse);
23             my $parsed = parse(
24             $source
25             );
26              
27             =head1 DESCRIPTION
28              
29             Provides both an outside-accessible point of entry into the JSON::Transform
30             parser (see above), and a subclass of L to parse a document
31             into an AST usable by JSON::Transform.
32              
33             =head1 METHODS
34              
35             =head2 parse
36              
37             parse($source);
38              
39             B that unlike in C this is a function, not an instance
40             method. This achieves hiding of Pegex implementation details.
41              
42             =cut
43              
44             my $GRAMMAR = JSON::Transform::Grammar->new; # singleton
45             sub parse {
46 29     29 1 59452 my ($source) = @_;
47 29         145 my $parser = __PACKAGE__->SUPER::new(
48             grammar => $GRAMMAR,
49             receiver => XML::Invisible::Receiver->new,
50             debug => DEBUG,
51             );
52 29         3458 my $input = Pegex::Input->new(string => $source);
53 29         1304 scalar $parser->SUPER::parse($input);
54             }
55              
56             1;