Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTLoader.pm @ 184:7525ea9a071a
IMPL::Web::View::TTLoader tests
author | sergey |
---|---|
date | Thu, 29 Mar 2012 01:54:20 +0400 |
parents | adc7669172c4 |
children | ae8072f2f2a3 |
comparison
equal
deleted
inserted
replaced
183:2184fa28b49e | 184:7525ea9a071a |
---|---|
24 } | 24 } |
25 | 25 |
26 sub CTOR { | 26 sub CTOR { |
27 my ($this,$refOpts,%args) = @_; | 27 my ($this,$refOpts,%args) = @_; |
28 | 28 |
29 $this->ext(delete $args{etx}); | 29 $refOpts ||= {}; |
30 | |
31 $this->ext(delete $args{ext}); | |
30 $this->initializer(delete $args{initializer}); | 32 $this->initializer(delete $args{initializer}); |
31 | 33 |
32 $this->options($refOpts); | 34 $this->options($refOpts); |
33 | 35 |
34 $refOpts->{LOAD_TEMPLATES} = $this->provider(new Template::Provider($refOpts)); | 36 # to aviod cyclic references we need to do a copy of $refOpts |
37 $refOpts->{LOAD_TEMPLATES} = $this->provider(new Template::Provider( { %$refOpts } )); | |
35 | 38 |
36 $this->context(new Template::Context($refOpts)); | 39 $this->context(new Template::Context($refOpts)); |
37 } | 40 } |
38 | 41 |
39 sub document { | 42 sub document { |
41 | 44 |
42 my $tt = $this->template($name); | 45 my $tt = $this->template($name); |
43 | 46 |
44 $this->_init(); | 47 $this->_init(); |
45 | 48 |
46 my $opts = { $this->options }; | 49 my $opts = { %{ $this->options } }; |
47 | 50 |
48 $opts->{STASH} = $this->context->stash->clone(); | 51 $opts->{STASH} = $this->context->stash->clone(); |
49 $opts->{LOAD_TEMPLATES} = $this->provider; | 52 $opts->{LOAD_TEMPLATES} = $this->provider; |
50 | 53 |
51 return new IMPL::Web::View::TTDocument( $tt, $opts, loader => $this ); | 54 return new IMPL::Web::View::TTDocument( $tt, $opts, loader => $this ); |
60 | 63 |
61 $name = $this->_appendExt($name); | 64 $name = $this->_appendExt($name); |
62 | 65 |
63 my ($tt,$error) = $this->provider->fetch($name); | 66 my ($tt,$error) = $this->provider->fetch($name); |
64 | 67 |
65 if ($error == STATUS_DECLINED) { | 68 if (defined $error and $error == STATUS_DECLINED) { |
66 die new IMPL::KeyNotFoundException($name); | 69 die new IMPL::KeyNotFoundException($name); |
67 } elsif ($error == STATUS_ERROR) { | 70 } elsif (defined $error and $error == STATUS_ERROR) { |
68 die new IMPL::Exception("Failed to load a template", $name, $tt); | 71 die new IMPL::Exception("Failed to load a template", $name, $tt); |
69 } | 72 } |
70 | 73 |
71 return $tt; | 74 return $tt; |
72 } | 75 } |
73 | 76 |
74 sub _appendExt { | 77 sub _appendExt { |
75 my ($this,$name) = @_; | 78 my ($this,$name) = @_; |
76 | |
77 | 79 |
78 if (length $this->ext and substr( $name, -length($this->ext) ) eq $this->ext) { | 80 if (length $this->ext and substr( $name, -length($this->ext) ) eq $this->ext) { |
79 return $name; | 81 return $name; |
80 } else { | 82 } else { |
81 return $name . $this->ext; | 83 return $name . $this->ext; |
84 | 86 |
85 sub _init { | 87 sub _init { |
86 my ($this) = @_; | 88 my ($this) = @_; |
87 | 89 |
88 if (!$this->isInitialized) { | 90 if (!$this->isInitialized) { |
89 $this->isInitialized(1); | |
90 | |
91 if ($this->initializer) { | 91 if ($this->initializer) { |
92 eval { | 92 eval { |
93 $this->context->process($this->initializer); | 93 $this->context->process($this->initializer); |
94 }; | |
95 if (my $e = $@) { | |
96 die new IMPL::Exception("Failed to process an initializer", $this->initializer, $e); | |
94 } | 97 } |
95 } | 98 } |
99 $this->isInitialized(1); | |
96 } | 100 } |
97 } | 101 } |
98 | 102 |
99 1; | 103 1; |
100 | 104 |