File Coverage

blib/lib/Story/Interact/PageSource.pm
Criterion Covered Total %
statement 254 254 100.0
branch 4 6 66.6
condition 2 2 100.0
subroutine 84 84 100.0
pod 0 2 0.0
total 344 348 98.8


line stmt bran cond sub pod time code
1 5     5   100 use 5.010001;
  5         33  
2 5     5   28 use strict;
  5         23  
  5         108  
3 5     5   24 use warnings;
  5         13  
  5         366  
4              
5             package Story::Interact::PageSource;
6              
7             our $AUTHORITY = 'cpan:TOBYINK';
8             our $VERSION = '0.001014';
9              
10 5     5   47 use Story::Interact::Page ();
  5         12  
  5         125  
11 5     5   2093 use Story::Interact::Syntax ();
  5         17  
  5         125  
12              
13 5     5   36 use Moo::Role;
  5         23  
  5         107  
14 5     5   2583 use Types::Common -types;
  5         14  
  5         41  
15 5     5   71151 use Carp qw( croak );
  5         17  
  5         272  
16 5     5   2768 use Safe ();
  5         83810  
  5         210  
17 5     5   44 use namespace::clean;
  5         11  
  5         49  
18              
19             requires 'get_source_code';
20             requires 'all_page_ids';
21              
22             has prelude_code => (
23             is => 'lazy',
24             isa => Str,
25 8   100 8   143 builder => sub { shift->get_source_code( '_prelude' ) // '' },
26             );
27              
28             sub get_page {
29 45     45 0 131 my ( $self, $state, $page_id ) = @_;
30 45         153 my $code = $self->get_source_code( $page_id );
31              
32 45 50       8013 return Story::Interact::Page->new( id => ':end' ) unless $code;
33              
34 45 100       1179 if ( my $prelude = $self->prelude_code ) {
35 1         261 $code = sprintf( "%s;\n%s", $prelude, $code );
36             }
37              
38 45         900 Story::Interact::Syntax::START( $state, $page_id );
39 45 50   5 0 5554 eval( "package Story::Interact::Syntax; use strict; use warnings; no warnings qw( numeric uninitialized ); $code; 1" )
  5     4   74  
  5     4   22  
  4     4   94  
  4     3   26  
  4     3   10  
  4     3   138  
  4     3   46  
  4     3   12  
  4     3   360  
  4     3   36  
  4     3   13  
  4     2   88  
  3     2   15  
  3     2   6  
  3     2   142  
  3     2   22  
  3     2   6  
  3     2   233  
  3     2   27  
  3     2   11  
  3     2   98  
  3     2   18  
  3     2   8  
  3     2   160  
  3     2   23  
  3     2   7  
  3     2   237  
  3     2   37  
  3     2   7  
  3     2   101  
  3     2   18  
  3     2   8  
  3     2   103  
  3     2   17  
  3     2   6  
  3     2   272  
  2     2   16  
  2     2   7  
  2     2   60  
  2     2   9  
  2     2   25  
  2     2   66  
  2     2   10  
  2     2   15  
  2     2   172  
  2     2   13  
  2     2   8  
  2     1   48  
  2     1   11  
  2     1   4  
  2     1   82  
  2     1   12  
  2     1   4  
  2     1   129  
  2     1   14  
  2     1   16  
  2     1   60  
  2     1   19  
  2     1   4  
  2     1   59  
  2     1   20  
  2     1   14  
  2     1   165  
  2     1   15  
  2     1   6  
  2     1   45  
  2     1   29  
  2     1   5  
  2     1   66  
  2     1   12  
  2     1   4  
  2         196  
  2         15  
  2         4  
  2         48  
  2         10  
  2         4  
  2         99  
  2         11  
  2         10  
  2         142  
  2         21  
  2         4  
  2         49  
  2         18  
  2         4  
  2         69  
  2         13  
  2         4  
  2         134  
  2         16  
  2         14  
  2         47  
  2         10  
  2         4  
  2         87  
  2         18  
  2         6  
  2         190  
  2         14  
  2         5  
  2         66  
  2         13  
  2         5  
  2         70  
  2         10  
  2         4  
  2         195  
  2         24  
  2         5  
  2         54  
  2         10  
  2         9  
  2         67  
  2         23  
  2         6  
  2         161  
  2         26  
  2         4  
  2         45  
  2         9  
  2         6  
  2         95  
  2         13  
  2         7  
  2         138  
  2         17  
  2         4  
  2         72  
  2         13  
  2         5  
  2         63  
  2         12  
  2         4  
  2         189  
  2         13  
  2         5  
  2         61  
  2         12  
  2         4  
  2         78  
  2         11  
  2         5  
  2         208  
  1         7  
  1         2  
  1         39  
  1         7  
  1         2  
  1         41  
  1         7  
  1         3  
  1         115  
  1         6  
  1         2  
  1         28  
  1         4  
  1         13  
  1         55  
  1         7  
  1         8  
  1         79  
  1         8  
  1         4  
  1         24  
  1         5  
  1         2  
  1         28  
  1         5  
  1         2  
  1         169  
  1         7  
  1         3  
  1         45  
  1         8  
  1         2  
  1         32  
  1         5  
  1         1  
  1         99  
  1         9  
  1         2  
  1         37  
  1         5  
  1         2  
  1         30  
  1         5  
  1         2  
  1         47  
  1         6  
  1         14  
  1         27  
  1         4  
  1         3  
  1         42  
  1         7  
  1         2  
  1         65  
  1         10  
  1         2  
  1         23  
  1         5  
  1         2  
  1         54  
  1         7  
  1         2  
  1         112  
  1         12  
  1         6  
  1         23  
  1         5  
  1         2  
  1         42  
  1         7  
  1         2  
  1         91  
40             or croak( "Died on page '$page_id': $@" );
41 45         210 return Story::Interact::Syntax::FINISH( $state );
42             }
43              
44             1;