File Coverage

blib/lib/Rapi/Blog/Scaffold/ViewWrapper.pm
Criterion Covered Total %
statement 18 39 46.1
branch 0 22 0.0
condition 0 6 0.0
subroutine 6 12 50.0
pod 0 5 0.0
total 24 84 28.5


line stmt bran cond sub pod time code
1             package Rapi::Blog::Scaffold::ViewWrapper;
2 1     1   5 use strict;
  1         3  
  1         25  
3 1     1   5 use warnings;
  1         1  
  1         25  
4              
5 1     1   5 use RapidApp::Util qw(:all);
  1         3  
  1         516  
6 1     1   7 use Rapi::Blog::Util;
  1         3  
  1         26  
7              
8 1     1   5 use Moo;
  1         3  
  1         6  
9 1     1   2384 use Types::Standard ':all';
  1         3  
  1         9  
10              
11             has 'Scaffold', is => 'ro', required => 1, isa => InstanceOf['Rapi::Blog::Scaffold'];
12              
13             has 'path', is => 'ro', required => 1, isa => Str;
14             has 'type', is => 'ro', required => 1, isa => Enum[qw/include insert/];
15             has 'wrapper', is => 'ro', required => 1, isa => Str;
16              
17             has 'not_found_template', is => 'ro', isa => Maybe[Str], default => sub {undef};
18              
19              
20             sub BUILD {
21 0     0 0   my $self = shift;
22            
23 0 0         my $path = $self->path or die "ViewWrapper: path is required";
24 0 0         my $wrapper = $self->wrapper or die "ViewWrapper: wrapper is required";
25            
26 0 0         die "ViewWrapper: bad path '$path' - must start with a normal alpha character" unless ($path =~ /^\w/);
27 0 0         die "ViewWrapper: bad path '$path' - must end with a trailing slash (/)" unless ($path =~ /\/$/);
28             }
29              
30             sub _enforce_wrapper_exists {
31 0     0     my $self = shift;
32 0           my $wrapper = $self->wrapper;
33 0 0         $self->Scaffold->resolve_file($wrapper) or die join('',
34             "Error! view wrapper '$wrapper' not found within scaffold"
35             )
36             }
37              
38              
39             sub valid_not_found_template {
40 0     0 0   my $self = shift;
41 0           my $nft = $self->not_found_template;
42 0 0 0       $nft && $self->Scaffold->resolve_file($nft) ? $nft : undef
43             }
44              
45             sub handles_not_found {
46 0     0 0   my $self = shift;
47 0 0         $self->valid_not_found_template ? 1 : 0
48             }
49              
50              
51             sub resolve_subpath {
52 0     0 0   my $self = shift;
53 0 0         my $template = shift or return undef;
54            
55             # First check to see if this is even our path prefix:
56 0           my ($pfx,$name) = split($self->path,$template,2);
57              
58 0 0 0       ($name && $pfx eq '') ? $name : undef
59             }
60              
61              
62              
63             #sub template_content_for {
64             # my ($self, $path) = @_;
65             # my $name = $self->resolve_claimed_post_name($path) or return undef;
66             #
67             # unless ($self->Scaffold->Post_exists_fn->($name)) {
68             # $name = $self->not_found_template or return undef;
69             # }
70             #
71             # my $directive =
72             # $self->type eq 'include' ? 'INCLUDE' :
73             # $self->type eq 'insert' ? 'INSERT' :
74             # die "Unexpected error -- 'type' must be 'include' or 'insert'";
75             #
76             # return join("\n",
77             # join('','[% META local_name = "',$name,'" %]'),
78             # join('','[% WRAPPER "',$self->wrapper,'" %]'),
79             # join('','[% ', $directive, ' "',$self->Scaffold->unique_int_post_path,$name,'" %]'),
80             # '[% END %]'
81             # )
82             #}
83              
84              
85              
86             sub render_post_wrapper {
87 0     0 0   my ($self, $name) = @_;
88            
89 0           $self->_enforce_wrapper_exists;
90            
91 0 0         my $directive =
    0          
92             $self->type eq 'include' ? 'INCLUDE' :
93             $self->type eq 'insert' ? 'INSERT' :
94             die "Unexpected error -- 'type' must be 'include' or 'insert'";
95            
96 0           return join("\n",
97             join('','[% META local_name = "',$name,'" %]'),
98             join('','[% WRAPPER "',$self->wrapper,'" %]'),
99             join('','[% ', $directive, ' "',$self->Scaffold->unique_int_post_path,$name,'" %]'),
100             '[% END %]'
101             )
102             }
103              
104              
105              
106              
107             1;