changeset 339:97628101b765

refactoring: application now holds a security object factory rather than a security object
author cin
date Wed, 19 Jun 2013 03:25:44 +0400
parents c78dfbe658bd
children c090d9102a38
files Lib/IMPL/Object/Abstract.pm Lib/IMPL/Web/Application.pm Lib/IMPL/Web/Application/Action.pm Lib/IMPL/Web/Application/ResourceContract.pm Lib/IMPL/Web/Handler/SecureCookie.pm Lib/IMPL/Web/Handler/TTView.pm Lib/IMPL/Web/View/TTFactory.pm _test/dump.out
diffstat 8 files changed, 70 insertions(+), 492 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/Object/Abstract.pm	Sat Jun 15 02:32:11 2013 +0400
+++ b/Lib/IMPL/Object/Abstract.pm	Wed Jun 19 03:25:44 2013 +0400
@@ -149,7 +149,7 @@
 
 our $AUTOLOAD;
 sub AUTOLOAD {
-    goto &{caller(). substr $AUTOLOAD,6};
+    goto &{caller(). substr $AUTOLOAD,4};
 }
 
 package supercall;
@@ -157,7 +157,7 @@
 our $AUTOLOAD;
 sub AUTOLOAD {
     my $sub;
-    my $methodName = substr $AUTOLOAD,11;
+    my $methodName = substr $AUTOLOAD,9;
     no strict 'refs';
     $sub = $_->can($methodName) and $sub->(@_) foreach @{caller().'::ISA'};
 }
--- a/Lib/IMPL/Web/Application.pm	Sat Jun 15 02:32:11 2013 +0400
+++ b/Lib/IMPL/Web/Application.pm	Wed Jun 19 03:25:44 2013 +0400
@@ -62,8 +62,6 @@
         application => $this,
     );
     
-    $this->BeforeProcessRequest($action);
-
     eval {
         my $result = $handler->($action);
 
@@ -73,7 +71,8 @@
         $result->PrintResponse( $this->output );
     };
     
-    $this->AfterProcessRequest($action);
+    $action->Dispose();
+    
     if ($@) {
         my $e = $@;
 
@@ -132,14 +131,6 @@
 	}
 }
 
-sub BeforeProcessRequest {
-    
-}
-
-sub AfterProcessRequest {
-    
-}
-
 1;
 
 __END__
--- a/Lib/IMPL/Web/Application/Action.pm	Sat Jun 15 02:32:11 2013 +0400
+++ b/Lib/IMPL/Web/Application/Action.pm	Wed Jun 19 03:25:44 2013 +0400
@@ -2,16 +2,20 @@
 use strict;
 
 use Carp qw(carp);
-
-use IMPL::Const qw(:prop);
-use IMPL::Web::CGIWrapper();
 use URI;
 use JSON;
 
+use IMPL::lang;
+use IMPL::Const qw(:prop);
+use IMPL::Web::CGIWrapper();
 use IMPL::declare {
+    require => {
+        Disposable => '-IMPL::Object::Disposable'
+    },
     base => [
         'IMPL::Object' => undef,
-        'IMPL::Object::Autofill' => '@_'
+        'IMPL::Object::Autofill' => '@_',
+        'IMPL::Object::Disposable' => undef
     ],
     props => [
         application => PROP_RW,
@@ -166,6 +170,14 @@
     }
 }
 
+sub Dispose {
+    my ($this) = @_;
+    
+    $_->Dispose() foreach grep is($_,Disposable), values %{$this->context}; 
+    
+    $this->next::method();
+}
+
 1;
 
 __END__
--- a/Lib/IMPL/Web/Application/ResourceContract.pm	Sat Jun 15 02:32:11 2013 +0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,329 +0,0 @@
-package IMPL::Web::Application::ResourceContract;
-use strict;
-
-use IMPL::lang;
-use IMPL::Const qw(:prop);
-use IMPL::declare {
-	require => {
-		Exception            => 'IMPL::Exception',
-		ArgumentException    => '-IMPL::ArgumentException',
-		KeyNotFoundException => '-IMPL::KeyNotFoundException',
-		ResourceClass        => 'IMPL::Web::Application::CustomResource',
-		CustomContract       => 'IMPL::Web::Application::CustomResourceContract',
-		Factory              => 'IMPL::Object::Factory'
-	  },
-	  base  => [ 'IMPL::Object' => undef ],
-	  props => [
-		resourceFactory  => PROP_ALL,
-		verbs            => PROP_ALL,
-		_namedResources  => PROP_ALL,
-		_regexpResources => PROP_ALL | PROP_LIST,
-	  ]
-};
-
-sub CTOR {
-	my $this = shift;
-	my %args = @_;
-
-    my $factory = delete $args{resourceFactory} || ResourceClass;
-	my $resources  = delete $args{resources}  || [];
-	my $verbs = delete $args{verbs} || {};
-
-	die ArgumentException->new(
-		resources => 'resources parameter must be a reference to an array' )
-	  unless ref $resources eq 'ARRAY';
-
-	die ArgumentException->new(
-		opearations => 'operations parameter must be a reference to a hash' )
-	  unless ref $verbs eq 'HASH';
-
-	$this->verbs(
-		{ map { lc($_), $verbs->{$_} } keys %$verbs } );
-
-	my %nameMap;
-
-	foreach my $res (@$resources) {
-		if (ref $res->{contract} eq 'HASH') {
-			# custom contract will add OPTIONS verb if needed 
-		    $res->{contract} = CustomContract->new(%{$res->{contract}});
-		}
-		
-		next unless $res->{contract};
-		
-		if ( my $name = $res->{name} ) {
-			$nameMap{$name} = $res;
-		}
-		if ( $res->{match} ) {
-			$this->_regexpResources->Append($res);
-		}
-	}
-
-	$this->_namedResources( \%nameMap );
-	
-	$this->resourceFactory( %args ? Factory->new($factory,\%args) : $factory );
-}
-
-sub AddChildResourceContract {
-    my ($this,$res) = @_;
-    
-    die ArgumentException->new(res => "A valid child resource definition")
-        unless ref $res eq 'HASH';
-        
-    $this->_namedResources->{$res->{name}} = $res if $res->{name};
-    $this->_regexpResources->Append($res) if $res->{match};
-    
-    return; 
-}
-
-sub CreateResource {
-	my $this = shift;
-	my %args = @_;
-
-	return $this->resourceFactory->new( %args, contract => $this );
-}
-
-sub FindChildResourceInfo {
-	my ( $this, $name ) = @_;
-
-	if ( my $info = $this->_namedResources->{$name} ) {
-		return $info, [$name];
-	}
-	else {
-		foreach my $info ( $this->_regexpResources ) {
-			my $rx = $info->{match};
-			if(my @childId = $name =~ m/$rx/) {
-			    return $info, \@childId; 
-			}
-		}
-	}
-
-	return;
-}
-
-1;
-
-__END__
-
-=pod
-
-=head1 NAME
-
-C<IMPL::Web::Application::ResourceContract> - описание ресурса
-
-=head1 SYNIOSIS
-
-=begin code
-
-use IMPL::require {
-	ResourceContract => 'IMPL::Web::Application::ResourceContract',
-	OperationContract => 'IMPL::Web::Application::OperationContract'
-};
-
-my $contract = ResourceContract->new(
-    verbs => {
-    	get => sub {
-        	my ($resource,$action) = @_;
-            return "Hello!";
-        },
-        post => OperationContract->new(
-            binding => sub {
-            	my ($resource,$action) = @_;
-            	my $data = My::App::ModelBinder->new($resource->ds)->Bind($action);
-            	return IMPL::Web::HttpResponse->Redirect(
-            	   location => $resource->location->Child($result->id)
-            	)
-            }
-        ),
-    },
-    resources => [
-        {
-        	name => 'info',
-        	binding => sub {
-        		return $_[0]->model->info;
-        	},
-        	contract => {
-        	   verbs => {
-	        	   get => sub {
-	        	   	   my ($resource,$action) = @_;
-	        	   	   return $resource->model;
-	        	   }
-	        	   
-        	   }
-        	}
-        }
-    ]
-)
-
-my $obj = My::App::Data->fetch('something');
-
-my $resource = $contract->CreateResource(
-	request => $currentRequest,
-    model => $obj,
-    parent => $prentResource,
-    id => 'item-something'
-);
-
-my $child = $contract->FetchChildResource('info');
-
-=end code 
-
-=head1 DESCRIPTION
-
-Контракт описывает структуру Веб-ресурса и отображение операций над ним в методы
-предметной области. Контракты используются инфраструктурой и пользователь
-не использует их напрямую, до тех пор пока не требуется изменить стандартный
-функционал. 
-
-
-Ресурс представляе собой набор контрактов операций, соответствующих методам
-C<HTTP> которые доступны у данного ресурса. Кроме операций ресурс состоит из
-дочерних ресурсов, которые могут соответствовать регулярным выражениям, либо
-иметь фиксированные имена.
-
-Каждая операция над ресурсом C<IMPL::Web::Application::OperationContract>
-описывается преобразованием параметров, привязкой к предметной области,
-дополнительным обработчиком результата выполнения привязки, либо обработчиком
-исключения, если привязку не удалось выполнить.
-
-Основное назначение контракта - создавать объекты ресурсов, над которыми
-контроллер запросов C<HTTP> сможет выполнить операцию. Контракт может создавать
-дочерние ресурсы, на основе указанного родительского ресурса и идетификатора
-нового ресурса. При этом будет найден подходящий контракт для дочернего ресурса
-и с его помощью создан дочерний ресурс.
-
-=head2 Динамический контракт
-
-Основная функция контракта - превращать данные модели предметной области в
-данные ресурсной модели, тоесть в ресурсы, для чего каждый контракт обязан
-реализовывать метод C<CreateResource(%args)>.
-
-Результатом выполнения этого метода должен быть Web-ресурс, см.
-C<IMPL::Web::Application::Resource>. Другими словами не существует жесткого
-требования к реализации самого контракта, как и того, что созданный ресурс
-должен ссылаться именно на этот контракт (да и вообще ссылаться на контракт).
-
-Таким образом можно реализовать контракт, который выполняет роль посредника,
-ниже приведен пример, который выбирает нужный контракт на основе типа модели
-переданной для создания ресурса. 
-
-=begin code
-
-package My::Web::Application::ContractMapper;
-use strict;
-use IMPL::Const qw(:prop);
-use IMPL::declare {
-    require => {
-        ForbiddenException => 'IMPL::Web::ForbiddenException'  
-    },
-    base => [
-        'IMPL::Object' => undef,
-        'IMPL::Object::Autofill' => '@_'
-    ],
-    props => [
-        map => PROP_GET | PROP_OWNERSET
-    ]
-}
-
-sub CreateResource {
-    my ($this,%args) = @_;
-    
-    my $type = ref $args{model} || '_default';
-    
-    my $contract = $this->map->{$type};
-    
-    die ForbiddenException->new()
-        unless $contract;
-    
-    return $contract->CreateResource(%args);
-} 
-
-=end code
-
-=head1 MEMBERS
-
-=head2 C<CTOR(%args)>
-
-=over
-
-=item * C<resourceFactory>
-
-Фабрика объектов C<IMPL::Object::Factory> которая будет использоваться при
-создании новых ресурсов. По-умолчанию C<IMPL::Web::Application::Resource>.
-
-=item * C<operations>
-
-Хеш с доступными действиями над C<HTTP> ресурсом, ключом является имя ресурса,
-значением C<IMPL::Web::Application::OperationContract>.
-
-=item * C<resources>
-
-Ссылка на массив хешей, каждый хеш описывает правила, как получить дочерний
-ресурс и связать его с контрактом. Ниже преведено описание элементов хеша.
-
-=over
-
-=item * C<name>
-
-Имя дочернегно ресурса.
-
-=item * C<match>
-
-Регулярное выражение, которому должно удовлетворять имя дочернего ресурса. 
-
-=item * C<bind>
-
-Делегат, получающий модель для дочернего ресурса. Первым параметром ему
-передается родительский объект, далее передаются граппы из регулярного
-выражения, если это ресурс с именем удовлетворяющим регулярному выражению из
-элемента C<match>, либо имя ресурса, если это ресурс с именем, указанным в
-элементе C<name>.
-
-=item * C<contract>
-
-Ссылка на C<IMPL::Web::Application::ResourceContract> для дочернего ресурса.
-У данного контракта используется только метод C<CreateContract>.
-
-Для реализации отложенной загрузки контракта (чтобы снизить ресурсоемкость
-запуска приложения) вместо ссылки на контракт может быть либо ссылка на
-процедуру, либо объект имеющий метод C<Invoke>.
-
-=back
-
-По крайней мере C<name> или C<match> должны присутсвовать.
-
-=back
-
-=head2 C<CreateResource(%args)>
-
-Создает ресурс, параметры C<%args> будут переданы напрямую констркутору
-ресурса, для создания ресурса используется фабрика C<resourceFactory>.
-При создании, конгструктору ресурса, будет передана ссылка на текущй контракт.
-
-По-сути никакого дополнительного функционала данный метод не несет.
-
-=head2 C<FindChildResourceInfo($childId)>
-
-Используется для поиска информации о дочернем ресурсе, возвращает список из двух
-элементов. C<($info,$childIdParts)>
-
-=over
-
-=item * C<$info>
-
-Информация о контракте дочернего ресурса, как правило это ссылка на хеш, похожий
-по формату на 
-
-=back
-
-=head2 C<[get]verbs>
-
-Хеш с доступными действиями над C<HTTP> ресурсом, все имена операций приведены
-к нижнему регистру.
-
-=begin code
-
-my $result = $contract->verbs->{get}->Invoke($resource,$action);
-
-=end code
-
-=cut
--- a/Lib/IMPL/Web/Handler/SecureCookie.pm	Sat Jun 15 02:32:11 2013 +0400
+++ b/Lib/IMPL/Web/Handler/SecureCookie.pm	Wed Jun 19 03:25:44 2013 +0400
@@ -57,7 +57,7 @@
     return unless $nextHandler;
     
     my $context;
-    $this->_manager($action->application->security);
+    $this->_manager($action->application->security->new());
     
         
     my $sid = $action->cookie('sid',qr/(\w+)/); 
@@ -84,7 +84,12 @@
     
     $context ||= SecurityContext->new(principal => User->nobody, authority => $this);
     
-    my $httpResponse = $context->Impersonate($nextHandler,$action);
+    my $httpResponse = eval { $context->Impersonate($nextHandler,$action); };
+    my $e = $@;
+    
+    $this->_manager->Dispose();
+    
+    die $e if $e;
     
     die OperationException->new("A HttpResponse instance is expected")
         unless ref $httpResponse && eval { $httpResponse->isa(HttpResponse) };
--- a/Lib/IMPL/Web/Handler/TTView.pm	Sat Jun 15 02:32:11 2013 +0400
+++ b/Lib/IMPL/Web/Handler/TTView.pm	Wed Jun 19 03:25:44 2013 +0400
@@ -51,7 +51,9 @@
     my $vars = {
         view        => $view,
         model       => $model,
+        #TODO cleanup
         action      => sub { carp "action variable is deprecated"; $action },
+        request     => sub { $action },
         app         => $action->application,
         context     => $action->context,
         env         => _cached($action->context->{environment}),
--- a/Lib/IMPL/Web/View/TTFactory.pm	Sat Jun 15 02:32:11 2013 +0400
+++ b/Lib/IMPL/Web/View/TTFactory.pm	Wed Jun 19 03:25:44 2013 +0400
@@ -134,7 +134,6 @@
             $labels{default} = IMPL::Resources::Strings::ParseStringsMap("$flabels");
             
             while(my($label,$text) = each %{$labels{default}}) {
-            	warn "LABEL: $label";
                 $vars{$label} = sub {
                     my ($params) = @_;
                     my $locale = Resources->currentLocale;
--- a/_test/dump.out	Sat Jun 15 02:32:11 2013 +0400
+++ b/_test/dump.out	Wed Jun 19 03:25:44 2013 +0400
@@ -1,6 +1,5 @@
 $VAR1 = [
           bless( {
-                   'require' => sub { "DUMMY" },
                    'global' => {},
                    'inc' => sub { "DUMMY" },
                    'date' => {
@@ -37,14 +36,32 @@
                                        }, 'Template::Stash::XS' )
                  }, 'Template::Stash::XS' ),
           bless( {
+                   'global' => $VAR1->[0]{'global'},
+                   'date' => $VAR1->[0]{'date'},
+                   'inc' => $VAR1->[0]{'inc'},
+                   'dynamic' => $VAR1->[0]{'dynamic'},
+                   'dec' => $VAR1->[0]{'dec'},
+                   'strings' => sub { "DUMMY" },
+                   '_STRICT' => undef,
+                   'component' => '',
+                   'site' => $VAR1->[0]{'site'},
+                   'dojo' => $VAR1->[0]{'dojo'},
+                   'view' => $VAR1->[0]{'view'},
+                   'user' => 'test_user',
+                   '_DEBUG' => 0,
+                   '_PARENT' => $VAR1->[0]
+                 }, 'Template::Stash::XS' ),
+          bless( {
                    'PREFIX_MAP' => {},
                    'BLOCKS' => {
                                  'CTOR' => sub { "DUMMY" }
                                },
                    'TRIM' => 0,
                    'CONFIG' => {
-                                 'PREFIX_MAP' => $VAR1->[1]{'PREFIX_MAP'},
-                                 'BLOCKS' => {},
+                                 'PREFIX_MAP' => $VAR1->[2]{'PREFIX_MAP'},
+                                 'BLOCKS' => {
+                                               'CTOR' => $VAR1->[2]{'BLOCKS'}{'CTOR'}
+                                             },
                                  'TRIM' => 0,
                                  'LOAD_PLUGINS' => [
                                                      bless( {
@@ -91,7 +108,7 @@
                                                                             '/home/sergey/workspace.web/Impl/_test/Resources/TTView/simple.tt',
                                                                             bless( {
                                                                                      '_DEFBLOCKS' => {
-                                                                                                       'CTOR' => $VAR1->[1]{'BLOCKS'}{'CTOR'}
+                                                                                                       'CTOR' => $VAR1->[2]{'BLOCKS'}{'CTOR'}
                                                                                                      },
                                                                                      '_VARIABLES' => {},
                                                                                      'modtime' => 1343890751,
@@ -103,7 +120,7 @@
                                                                                    }, 'Template::Document' ),
                                                                             1343890751,
                                                                             [
-                                                                              $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'},
+                                                                              $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'},
                                                                               '/home/sergey/workspace.web/Impl/_test/Resources/TTView/global.tt',
                                                                               bless( {
                                                                                        '_DEFBLOCKS' => {},
@@ -116,9 +133,9 @@
                                                                                      }, 'Template::Document' ),
                                                                               1343890751,
                                                                               undef,
-                                                                              1366549254
+                                                                              1371164279
                                                                             ],
-                                                                            1366549254
+                                                                            1371164279
                                                                           ],
                                                                 'DELIMITER' => ':',
                                                                 'UNICODE' => 1,
@@ -134,8 +151,8 @@
                                                                 'STAT_TTL' => 1,
                                                                 'ABSOLUTE' => 0,
                                                                 'LOOKUP' => {
-                                                                              '/home/sergey/workspace.web/Impl/_test/Resources/TTView/global.tt' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[4],
-                                                                              '/home/sergey/workspace.web/Impl/_test/Resources/TTView/simple.tt' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}
+                                                                              '/home/sergey/workspace.web/Impl/_test/Resources/TTView/global.tt' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[4],
+                                                                              '/home/sergey/workspace.web/Impl/_test/Resources/TTView/simple.tt' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}
                                                                             },
                                                                 'DEFAULT' => undef,
                                                                 'PARSER' => bless( {
@@ -5304,7 +5321,7 @@
                                                                                      'DEBUG_DIRS' => 0,
                                                                                      'PRE_CHOMP' => 0,
                                                                                      'GRAMMAR' => bless( {
-                                                                                                           'STATES' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'PARSER'}{'STATES'},
+                                                                                                           'STATES' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'PARSER'}{'STATES'},
                                                                                                            'RULES' => [
                                                                                                                         [
                                                                                                                           '$start',
@@ -6207,12 +6224,12 @@
                                                                                                                           sub { "DUMMY" }
                                                                                                                         ]
                                                                                                                       ],
-                                                                                                           'LEXTABLE' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'PARSER'}{'LEXTABLE'}
+                                                                                                           'LEXTABLE' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'PARSER'}{'LEXTABLE'}
                                                                                                          }, 'Template::Grammar' ),
-                                                                                     'RULES' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'PARSER'}{'GRAMMAR'}{'RULES'},
+                                                                                     'RULES' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'PARSER'}{'GRAMMAR'}{'RULES'},
                                                                                      'FILE_INFO' => 1,
                                                                                      'TRACE_VARS' => undef,
-                                                                                     'DEFBLOCK' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[4][2]{'_DEFBLOCKS'},
+                                                                                     'DEFBLOCK' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[4][2]{'_DEFBLOCKS'},
                                                                                      'METADATA' => [
                                                                                                      'version',
                                                                                                      '1'
@@ -6232,23 +6249,23 @@
                                                                                                     'START_TAG' => '\\[%'
                                                                                                   }
                                                                                                 ],
-                                                                                     'VARIABLES' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[4][2]{'_VARIABLES'},
+                                                                                     'VARIABLES' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[4][2]{'_VARIABLES'},
                                                                                      'START_TAG' => undef
                                                                                    }, 'Template::Parser' ),
-                                                                'TAIL' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[4],
+                                                                'TAIL' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[4],
                                                                 'ENCODING' => 'utf-8',
                                                                 'SLOTS' => 2,
                                                                 'PARAMS' => {
                                                                               'ENCODING' => 'utf-8',
                                                                               'INTERPOLATE' => 1,
                                                                               'POST_CHOMP' => 1,
-                                                                              'INCLUDE_PATH' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'INCLUDE_PATH'}
+                                                                              'INCLUDE_PATH' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'INCLUDE_PATH'}
                                                                             },
                                                                 'COMPILE_EXT' => ''
                                                               }, 'Template::Provider' )
                                                      ],
                                  'BLKSTACK' => [],
-                                 'STASH' => $VAR1->[0],
+                                 'STASH' => $VAR1->[1],
                                  '_ERROR' => '',
                                  'DEBUG_FORMAT' => undef,
                                  'DEBUG' => 0,
@@ -6256,7 +6273,7 @@
                                  'EXPOSE_BLOCKS' => 0,
                                  'DEBUG_DIRS' => 0,
                                  'RECURSION' => 0,
-                                 'INIT_BLOCKS' => $VAR1->[1]{'CONFIG'}{'BLOCKS'},
+                                 'INIT_BLOCKS' => $VAR1->[2]{'CONFIG'}{'BLOCKS'},
                                  'LOAD_FILTERS' => [
                                                      bless( {
                                                               'DEBUG' => 0,
@@ -6266,10 +6283,10 @@
                                                             }, 'Template::Filters' )
                                                    ]
                                },
-                   'LOAD_PLUGINS' => $VAR1->[1]{'CONFIG'}{'LOAD_PLUGINS'},
-                   'LOAD_TEMPLATES' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'},
+                   'LOAD_PLUGINS' => $VAR1->[2]{'CONFIG'}{'LOAD_PLUGINS'},
+                   'LOAD_TEMPLATES' => $VAR1->[2]{'CONFIG'}{'LOAD_TEMPLATES'},
                    'BLKSTACK' => [],
-                   'STASH' => $VAR1->[0],
+                   'STASH' => $VAR1->[1],
                    'DEBUG_FORMAT' => undef,
                    '_ERROR' => '',
                    'DEBUG' => 0,
@@ -6277,126 +6294,7 @@
                    'EXPOSE_BLOCKS' => 0,
                    'DEBUG_DIRS' => 0,
                    'RECURSION' => 0,
-                   'INIT_BLOCKS' => $VAR1->[1]{'BLOCKS'},
-                   'LOAD_FILTERS' => $VAR1->[1]{'CONFIG'}{'LOAD_FILTERS'}
-                 }, 'Template::Context' ),
-          bless( {
-                   'IMPL_Web_View_TTRegistry_context' => $VAR1->[1],
-                   'IMPL_Web_View_TTRegistry_loader' => bless( {
-                                                                 'IMPL_Web_View_TTLoader_context' => bless( {
-                                                                                                              'PREFIX_MAP' => $VAR1->[1]{'PREFIX_MAP'},
-                                                                                                              'BLOCKS' => $VAR1->[1]{'CONFIG'}{'BLOCKS'},
-                                                                                                              'TRIM' => 0,
-                                                                                                              'CONFIG' => {
-                                                                                                                            'ENCODING' => 'utf-8',
-                                                                                                                            'POST_CHOMP' => 1,
-                                                                                                                            'INTERPOLATE' => 1,
-                                                                                                                            'LOAD_TEMPLATES' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0],
-                                                                                                                            'INCLUDE_PATH' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'INCLUDE_PATH'}
-                                                                                                                          },
-                                                                                                              'LOAD_PLUGINS' => $VAR1->[1]{'CONFIG'}{'LOAD_PLUGINS'},
-                                                                                                              'LOAD_TEMPLATES' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'},
-                                                                                                              'BLKSTACK' => $VAR1->[1]{'CONFIG'}{'BLKSTACK'},
-                                                                                                              'STASH' => $VAR1->[0]{'_PARENT'},
-                                                                                                              'DEBUG_FORMAT' => undef,
-                                                                                                              '_ERROR' => '',
-                                                                                                              'DEBUG' => 0,
-                                                                                                              'EVAL_PERL' => 0,
-                                                                                                              'EXPOSE_BLOCKS' => 0,
-                                                                                                              'DEBUG_DIRS' => 0,
-                                                                                                              'RECURSION' => 0,
-                                                                                                              'INIT_BLOCKS' => $VAR1->[1]{'CONFIG'}{'BLOCKS'},
-                                                                                                              'LOAD_FILTERS' => $VAR1->[1]{'CONFIG'}{'LOAD_FILTERS'}
-                                                                                                            }, 'Template::Context' ),
-                                                                 'IMPL_Web_View_TTLoader_layoutBase' => 'Layout',
-                                                                 'IMPL_Web_View_TTLoader_initializer' => 'global.tt',
-                                                                 'IMPL_Web_View_TTLoader_provider' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0],
-                                                                 'IMPL_Web_View_TTLoader_ext' => '.tt',
-                                                                 'IMPL_Web_View_TTLoader__globals' => {
-                                                                                                        'site' => $VAR1->[0]{'site'},
-                                                                                                        'view' => $VAR1->[0]{'view'},
-                                                                                                        'date' => $VAR1->[0]{'date'},
-                                                                                                        'dynamic' => $VAR1->[0]{'dynamic'}
-                                                                                                      },
-                                                                 'IMPL_Web_View_TTLoader_options' => $VAR1->[2]{'IMPL_Web_View_TTRegistry_loader'}{'IMPL_Web_View_TTLoader_context'}{'CONFIG'},
-                                                                 'IMPL_Web_View_TTLoader_isInitialized' => 1
-                                                               }, 'IMPL::Web::View::TTLoader' ),
-                   'IMPL_Web_View_TTRegistry__cache' => {}
-                 }, 'IMPL::Web::View::TTRegistry' ),
-          bless( {
-                   'IMPL_Web_View_TTFactory_initialized' => 1,
-                   'IMPL_Web_View_TTFactory_registry' => $VAR1->[2],
-                   'IMPL_Web_View_TTFactory_instances' => 1,
-                   'IMPL_Object_Factory_factory' => 'IMPL::Web::View::TTDocument',
-                   'IMPL_Web_View_TTFactory_baseLocation' => '',
-                   'IMPL_Web_View_TTFactory_context' => $VAR1->[1],
-                   'IMPL_Web_View_TTFactory_blocks' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[2]{'_DEFBLOCKS'},
-                   'IMPL_Web_View_TTFactory_template' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[2]
-                 }, 'IMPL::Web::View::TTFactory' ),
-          bless( {
-                   'require' => $VAR1->[0]{'require'},
-                   'global' => $VAR1->[0]{'global'},
-                   'date' => $VAR1->[0]{'date'},
-                   'inc' => $VAR1->[0]{'inc'},
-                   'dynamic' => $VAR1->[0]{'dynamic'},
-                   'dec' => $VAR1->[0]{'dec'},
-                   '_STRICT' => undef,
-                   'site' => $VAR1->[0]{'site'},
-                   'component' => '',
-                   'dojo' => $VAR1->[0]{'dojo'},
-                   'view' => $VAR1->[0]{'view'},
-                   'user' => 'test_user',
-                   '_DEBUG' => 0,
-                   '_PARENT' => $VAR1->[0]
-                 }, 'Template::Stash::XS' ),
-          bless( {
-                   'PREFIX_MAP' => $VAR1->[1]{'PREFIX_MAP'},
-                   'BLOCKS' => {
-                                 'CTOR' => $VAR1->[1]{'BLOCKS'}{'CTOR'}
-                               },
-                   'TRIM' => 0,
-                   'CONFIG' => {
-                                 'PREFIX_MAP' => $VAR1->[1]{'PREFIX_MAP'},
-                                 'BLOCKS' => $VAR1->[1]{'BLOCKS'},
-                                 'TRIM' => 0,
-                                 'LOAD_PLUGINS' => $VAR1->[1]{'CONFIG'}{'LOAD_PLUGINS'},
-                                 'LOAD_TEMPLATES' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'},
-                                 'BLKSTACK' => $VAR1->[1]{'BLKSTACK'},
-                                 'STASH' => $VAR1->[4],
-                                 '_ERROR' => '',
-                                 'DEBUG_FORMAT' => undef,
-                                 'DEBUG' => 0,
-                                 'EVAL_PERL' => 0,
-                                 'EXPOSE_BLOCKS' => 0,
-                                 'DEBUG_DIRS' => 0,
-                                 'RECURSION' => 0,
-                                 'INIT_BLOCKS' => $VAR1->[1]{'BLOCKS'},
-                                 'LOAD_FILTERS' => $VAR1->[1]{'CONFIG'}{'LOAD_FILTERS'}
-                               },
-                   'LOAD_PLUGINS' => $VAR1->[1]{'CONFIG'}{'LOAD_PLUGINS'},
-                   'LOAD_TEMPLATES' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'},
-                   'BLKSTACK' => [],
-                   'STASH' => $VAR1->[4],
-                   'DEBUG_FORMAT' => undef,
-                   '_ERROR' => '',
-                   'DEBUG' => 0,
-                   'EVAL_PERL' => 0,
-                   'EXPOSE_BLOCKS' => 0,
-                   'DEBUG_DIRS' => 0,
-                   'RECURSION' => 0,
-                   'INIT_BLOCKS' => $VAR1->[5]{'BLOCKS'},
-                   'LOAD_FILTERS' => $VAR1->[1]{'CONFIG'}{'LOAD_FILTERS'}
-                 }, 'Template::Context' ),
-          bless( {
-                   'IMPL_Web_View_TTControl_id' => '_16',
-                   'IMPL_Web_View_TTDocument_registry' => $VAR1->[2],
-                   'IMPL_Web_View_TTControl_template' => $VAR1->[1]{'CONFIG'}{'LOAD_TEMPLATES'}[0]{'HEAD'}[2],
-                   'IMPL_Web_View_TTControl_context' => $VAR1->[5],
-                   'IMPL_Web_View_TTDocument_layout' => undef,
-                   'IMPL_Web_View_TTControl_attributes' => {
-                                                             'factory' => $VAR1->[3],
-                                                             'title' => "\x{414}\x{43e}\x{43a}\x{443}\x{43c}\x{435}\x{43d}\x{442} 1"
-                                                           },
-                   'IMPL_Web_View_TTDocument_layoutBase' => 'Layout'
-                 }, 'IMPL::Web::View::TTDocument' )
+                   'INIT_BLOCKS' => $VAR1->[2]{'BLOCKS'},
+                   'LOAD_FILTERS' => $VAR1->[2]{'CONFIG'}{'LOAD_FILTERS'}
+                 }, 'Template::Context' )
         ];