File Coverage

blib/lib/HTML/Template/Compiled/Expression.pm
Criterion Covered Total %
statement 69 72 95.8
branch 7 10 70.0
condition n/a
subroutine 25 29 86.2
pod 0 8 0.0
total 101 119 84.8


line stmt bran cond sub pod time code
1             package HTML::Template::Compiled::Expression;
2 36     36   133 use strict;
  36         39  
  36         873  
3 36     36   112 use warnings;
  36         36  
  36         737  
4              
5 36     36   98 use constant OPERANDS => 0;
  36         42  
  36         1736  
6 36     36   139 use constant ATTRIBUTES => 1;
  36         45  
  36         1344  
7 36     36   131 use base 'Exporter';
  36         50  
  36         2740  
8             our $VERSION = '1.002_001'; # TRIAL VERSION
9 36     36   13110 use HTML::Template::Compiled::Expression::Expressions;
  36         56  
  36         10928  
10             my @expressions = qw(
11             &_expr_literal
12             &_expr_defined
13             &_expr_ternary
14             &_expr_function
15             &_expr_method
16             &_expr_elsif
17             );
18             our @EXPORT_OK = @expressions;
19             our %EXPORT_TAGS = (
20             expressions => \@expressions,
21             );
22              
23 10     10   73 sub _expr_literal { HTML::Template::Compiled::Expression::Literal->new(@_) }
24 4     4   34 sub _expr_defined { HTML::Template::Compiled::Expression::Defined->new(@_) }
25 4     4   23 sub _expr_ternary { HTML::Template::Compiled::Expression::Ternary->new(@_) }
26 10     10   57 sub _expr_function { HTML::Template::Compiled::Expression::Function->new(@_) }
27 9     9   62 sub _expr_method { HTML::Template::Compiled::Expression::Method->new(@_) }
28 7     7   36 sub _expr_elsif { HTML::Template::Compiled::Expression::Elsif->new(@_) }
29              
30              
31             sub new {
32 48     48 0 64 my $class = shift;
33 48         75 my $self = [ [], {} ];
34 48         64 bless $self, $class;
35 48         126 $self->init(@_);
36 48         121 return $self;
37             }
38              
39       0 0   sub init {}
40              
41             sub set_operands {
42 48     48 0 135 $_[0]->[OPERANDS] = $_[1];
43             }
44              
45             sub get_operands {
46             return wantarray
47 48 50   48 0 78 ? @{ $_[0]->[OPERANDS] }
  48         101  
48             : $_[0]->[OPERANDS];
49             }
50              
51             sub set_attributes {
52 0     0 0 0 $_[0]->[ATTRIBUTES] = $_[1];
53             }
54              
55 0     0 0 0 sub get_attributes { return $_[0]->[ATTRIBUTES] }
56              
57 0     0 0 0 sub to_string { print "$_[0] to_string\n" }
58              
59             sub level2indent {
60 34     34 0 37 my ($self, $level) = @_;
61 36     36   207 no warnings;
  36         51  
  36         2030  
62 34         76 return " " x $level;
63             }
64              
65              
66             package HTML::Template::Compiled::Expression::Conditional;
67 36     36   128 use base qw(HTML::Template::Compiled::Expression);
  36         42  
  36         17218  
68              
69             sub init {
70 7     7   7 my ($self, $op) = @_;
71 7         19 $self->set_operands([$op]);
72             }
73              
74             package HTML::Template::Compiled::Expression::Elsif;
75             our @ISA = qw(HTML::Template::Compiled::Expression::Conditional);
76              
77             sub to_string {
78 7     7   8 my ($self, $level) = @_;
79 7         21 my $indent = $self->level2indent($level);
80 7         21 my ($op) = $self->get_operands;
81 7         28 return $indent . '}' . $/ . $indent . 'elsif ( ' . $op->to_string . ' ) {';
82             }
83              
84             package HTML::Template::Compiled::Expression::SubrefCall;
85             our @ISA = qw(HTML::Template::Compiled::Expression);
86              
87             sub init {
88 4     4   6 my ($self, @ops) = @_;
89 4         15 $self->set_operands([@ops]);
90             }
91             sub to_string {
92 4     4   6 my ($self, $level) = @_;
93 4         17 my $indent = $self->level2indent($level);
94 4         13 my ($subref, @ops) = $self->get_operands;
95             my @strings = map {
96 4 50       6 ref $_ ? $_->to_string($level) : $_
  4         13  
97             } @ops;
98 4         32 return "$indent$subref->( " . (join ',', @strings). ')';
99             }
100              
101             package HTML::Template::Compiled::Expression::Function;
102             our @ISA = qw(HTML::Template::Compiled::Expression);
103              
104             sub init {
105 19     19   33 my ($self, @ops) = @_;
106 19         71 $self->set_operands([@ops]);
107             }
108             sub to_string {
109 10     10   13 my ($self, $level) = @_;
110 10         24 my $indent = $self->level2indent($level);
111 10         37 my ($function, @ops) = $self->get_operands;
112             my @strings = map {
113 10 100       16 ref $_ ? $_->to_string($level) : $_
  10         42  
114             } @ops;
115 10         89 return "$indent$function( " . (join ',', @strings). ')';
116             }
117              
118             package HTML::Template::Compiled::Expression::Method;
119             our @ISA = qw(HTML::Template::Compiled::Expression::Function);
120              
121             sub to_string {
122 9     9   10 my ($self, $level) = @_;
123 9         22 my $indent = $self->level2indent($level);
124 9         24 my ($function, $object, @args) = $self->get_operands;
125 9 100       32 my $start = $indent . (ref $object ? $object->to_string($level) : $object)
126             . "->$function( ";
127             my @strings = map {
128 9 50       12 ref $_ ? $_->to_string($level) : $_
  9         27  
129             } @args;
130 9         46 return $start . (join ',', @strings). ')';
131             }
132              
133             1;
134              
135              
136             __END__