Mercurial > pub > Impl
comparison Lib/IMPL/Web/View/TTFactory.pm @ 312:75a78cbf7dcf
View refactoring: INIT blocks are deprecated
author | cin |
---|---|
date | Mon, 29 Apr 2013 01:10:42 +0400 |
parents | 5e4e7c8fbca1 |
children | 86336d451b82 |
comparison
equal
deleted
inserted
replaced
311:d3b5a67ad2e8 | 312:75a78cbf7dcf |
---|---|
2 use strict; | 2 use strict; |
3 | 3 |
4 use Template::Context(); | 4 use Template::Context(); |
5 | 5 |
6 use Carp qw(carp); | 6 use Carp qw(carp); |
7 use IMPL::lang qw(:hash); | 7 use IMPL::lang qw(:hash is); |
8 use IMPL::Exception(); | 8 use IMPL::Exception(); |
9 use Scalar::Util qw(weaken); | 9 use Scalar::Util qw(weaken); |
10 | 10 |
11 | 11 |
12 use IMPL::Const qw(:prop); | 12 use IMPL::Const qw(:prop); |
21 shift; | 21 shift; |
22 } | 22 } |
23 ], | 23 ], |
24 props => [ | 24 props => [ |
25 template => PROP_RW, | 25 template => PROP_RW, |
26 activation => PROP_RW, | |
26 context => PROP_RW, | 27 context => PROP_RW, |
27 instances => PROP_RW, | |
28 baseLocation => PROP_RW, | 28 baseLocation => PROP_RW, |
29 base => PROP_RW, | 29 base => PROP_RW, |
30 registry => PROP_RO, | 30 registry => PROP_RO, |
31 blocks => PROP_RO, | 31 blocks => PROP_RO, |
32 initialized => PROP_RO | 32 _instance => PROP_RW |
33 ] | 33 ] |
34 }; | 34 }; |
35 | 35 |
36 sub CTOR { | 36 sub CTOR { |
37 my ($this,$class,$template,$context,$path,$registry) = @_; | 37 my ($this,$class,$template,$context,$path,$registry) = @_; |
44 unless ref $class ; | 44 unless ref $class ; |
45 | 45 |
46 $context ||= new Template::Context(); | 46 $context ||= new Template::Context(); |
47 my $baseLocation = join( '/', splice( @{[split(/\//,$path)]}, 0, -1 ) ); | 47 my $baseLocation = join( '/', splice( @{[split(/\//,$path)]}, 0, -1 ) ); |
48 | 48 |
49 $this->activation($template->activation || 'new'); | |
49 $this->template($template); | 50 $this->template($template); |
50 $this->context($context); | 51 $this->context($context); |
51 $this->baseLocation($baseLocation); | 52 $this->baseLocation($baseLocation); |
52 $this->instances(0); | |
53 $this->registry($registry); | 53 $this->registry($registry); |
54 | 54 |
55 if (my $baseTplName = $template->extends) { | 55 if (my $baseTplName = $template->extends) { |
56 $baseTplName =~ s{^\./}{$baseLocation/}; | 56 $baseTplName =~ s{^\./}{$baseLocation/}; |
57 | 57 |
124 } | 124 } |
125 | 125 |
126 sub CreateObject { | 126 sub CreateObject { |
127 my $this = shift; | 127 my $this = shift; |
128 | 128 |
129 $this->InitOnDemand(); | 129 $this->activation eq 'singleton' ? |
130 | 130 $this->_instance || $this->_instance($this->next::method(@_)) : |
131 my $instance = $this->SUPER::CreateObject(@_); | 131 $this->next::method(@_); |
132 | |
133 my $count = $this->instances; | |
134 $count++; | |
135 $this->instances($count); | |
136 | |
137 return $instance; | |
138 } | |
139 | |
140 sub InitOnDemand { | |
141 my ($this) = @_; | |
142 | |
143 unless ($this->initialized) { | |
144 $this->initialized(1); | |
145 | |
146 $this->base->InitOnDemand() | |
147 if $this->base; | |
148 | |
149 if (my $init = $this->template->blocks->{INIT}) { | |
150 $this->context->process($init); | |
151 } | |
152 } | |
153 } | 132 } |
154 | 133 |
155 sub CloneContext { | 134 sub CloneContext { |
156 my ($this) = @_; | 135 my ($this) = @_; |
157 | 136 |