Mercurial > pub > Impl
diff Lib/IMPL/Web/View/TTLoader.pm @ 265:6b6d4b2275a1
improved documentation
author | cin |
---|---|
date | Thu, 10 Jan 2013 03:25:02 +0400 |
parents | 5c82eec23bb6 |
children | 546957c50a36 |
line wrap: on
line diff
--- a/Lib/IMPL/Web/View/TTLoader.pm Wed Jan 09 17:55:43 2013 +0400 +++ b/Lib/IMPL/Web/View/TTLoader.pm Thu Jan 10 03:25:02 2013 +0400 @@ -1,31 +1,33 @@ package IMPL::Web::View::TTLoader; use strict; -use IMPL::lang qw(:declare); - -use Template::Provider(); -use Template::Context(); use Template::Constants qw(:status); -use IMPL::Web::View::TTDocument(); - -use parent qw( - IMPL::Object - IMPL::Object::Serializable -); - -BEGIN { - public property options => PROP_ALL; - public property provider => PROP_GET | PROP_OWNERSET; - public property context => PROP_GET | PROP_OWNERSET; - public property ext => PROP_ALL; - public property layoutBase => PROP_GET | PROP_OWNERSET; - - public property isInitialized => PROP_GET | PROP_OWNERSET; - public property initializer => PROP_GET | PROP_OWNERSET; - - private property _globals => PROP_ALL; -} +use IMPL::Const qw(:prop); +use IMPL::declare { + require => { + Provider => 'Template::Provider', + Context => 'Template::Context', + TTDocument => 'IMPL::Web::View::TTDocument', + Exception => 'IMPL::Exception', + ArgumentException => '-IMPL::InvalidArgumentException', + KeyNotFoundException => '-IMPL::KeyNotFoundException' + }, + base => [ + 'IMPL::Object' => undef, + 'IMPL::Object::Serializable' => undef + ], + props => [ + options => PROP_RO, + provider => PROP_RO, + context => PROP_RO, + ext => PROP_RO, + layoutBase => PROP_RO, + isInitialized => PROP_RO, + initializer => PROP_RO, + _globals => PROP_RW + ] +}; sub save { my ($this,$context) = @_; @@ -61,9 +63,9 @@ $this->layoutBase($args{layoutBase}) if $args{layoutBase}; # to aviod cyclic references we need to do a copy of $refOpts - $refOpts->{LOAD_TEMPLATES} = $this->provider(new Template::Provider( { %$refOpts } )); + $refOpts->{LOAD_TEMPLATES} = $this->provider(Provider->new( { %$refOpts } )); - $this->context(new Template::Context($refOpts)); + $this->context(Context->new($refOpts)); } sub document { @@ -78,7 +80,7 @@ $opts->{STASH} = $this->context->stash->clone(); $opts->{LOAD_TEMPLATES} = $this->provider; - return new IMPL::Web::View::TTDocument( $tt, $opts, $this, $vars ); + return TTDocument->new( $tt, $opts, $this, $vars ); } sub template { @@ -86,16 +88,16 @@ $name =~ s/^\s+|\s+$//g; - die new IMPL::InvalidArgumentException("A valid template name is required") unless length $name; + die ArgumentException->new("A valid template name is required") unless length $name; $name = $this->_appendExt($name); my ($tt,$error) = $this->provider->fetch($name); if (defined $error and $error == STATUS_DECLINED) { - die new IMPL::KeyNotFoundException($name); + die KeyNotFoundException->($name); } elsif (defined $error and $error == STATUS_ERROR) { - die new IMPL::Exception("Failed to load a template", $name, $tt); + die Exception->new("Failed to load a template", $name, $tt); } return $tt; @@ -136,7 +138,7 @@ $this->context->process($initializer,$this->_globals); }; if (my $e = $@) { - die new IMPL::Exception("Failed to process an initializer", $this->initializer, $e); + die Exception->new("Failed to process an initializer", $this->initializer, $e); } $this->isInitialized(1); @@ -179,9 +181,60 @@ =head1 DESCRIPTION +Провайдер для загрузки шаблонов и документов. Имеет собственное пространство +имен, контекст выполнения шаблонов. Контект загрузчика инициализируется +шаблоном, в котором определяются глобальные переменные, которые будут доступны +в документах, однако их изменения будут локализованы. + +Инициализация контекста провайдера происходит при первой загрузке любого +документа. + =head1 MEMBERS +=head2 C<CTOR($options,%args)> + +=over + +=item * C<$options> + +Параметры контекста загрузчика, контексты документов и элементов управления +также унаследуют эти свойства. Напрямую передаются в конструктор +C<Template::Context>. + +=item * C<%args> + +Именованные параметы загрузчика. + +=over + +=item * C<ext> + +Расширение, которое будет добавляться к именам шаблонов и документов (если оно +не будет указано явно). + +=item * C<initializer> + +Имя шаблона, который будет использован для инициализации контекста. + +=item * C<globals> + +Глобальные переменнын, которые будут переданы в контекст. + +=item * C<layoutBase> + +Путь к шаблонам для оформления документов. Каждый документ может задавать свой +C<layout> указанный в его C<META> блоке или конструкторе. +См. C<IMPL::View::TTDocument>. + +=back + +=back + =head2 C<document($docName)> +Загружает документ с именем C<$docName>. При необходимости к нему будет +добавлено расширение, указанное в свойстве C<ext>. Это единственно полезный +метод провайдера. + =cut