changeset 232:5c82eec23bb6

Fixed degradations due refactoring
author sergey
date Tue, 09 Oct 2012 20:12:47 +0400
parents ff1e8fa932f2
children 3cebcf6fdb9b
files Lib/IMPL/DOM/Schema.pm Lib/IMPL/Exception.pm Lib/IMPL/Object/Factory.pm Lib/IMPL/SQL/Schema.pm Lib/IMPL/SQL/Schema/Column.pm Lib/IMPL/SQL/Schema/Constraint.pm Lib/IMPL/SQL/Schema/Constraint/ForeignKey.pm Lib/IMPL/SQL/Schema/Table.pm Lib/IMPL/SQL/Schema/Type.pm Lib/IMPL/Test/HarnessRunner.pm Lib/IMPL/Web/AutoLocator.pm Lib/IMPL/Web/Security.pm Lib/IMPL/Web/View/TTControl.pm Lib/IMPL/Web/View/TTDocument.pm Lib/IMPL/Web/View/TTFactory.pm Lib/IMPL/Web/View/TTLoader.pm _test/Test/DOM/Builder.pm _test/Test/DOM/Schema.pm _test/Test/Web/AutoLocator.pm
diffstat 19 files changed, 84 insertions(+), 86 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/DOM/Schema.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/DOM/Schema.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -17,7 +17,7 @@
     Builder => 'IMPL::DOM::Navigator::Builder',
     XMLReader => 'IMPL::DOM::XMLReader',
     InflateFactory => 'IMPL::DOM::Schema::InflateFactory',
-    Loader => 'Code::Loader'
+    Loader => 'IMPL::Code::Loader'
 };
 
 use parent qw(IMPL::DOM::Document);
@@ -55,7 +55,10 @@
     if ($class->isa('IMPL::DOM::Schema::Validator')) {
         $class = $validatorLoader->GetFullName($nodeName);
         unless (eval {$class->can('new')}) {
-            $validatorLoader->Require($nodeName);
+        	eval {
+                $validatorLoader->Require($nodeName);
+        	};
+        	my $e = $@;
             die new IMPL::Exception("Invalid validator",$class,$e) if $e;
         }
     }
@@ -88,7 +91,7 @@
     
     my $class = ref $this || $this;
     
-    my $reader = Reader->(
+    my $reader = XMLReader->new(
         Navigator => Builder->new(
             $class,
             $class->MetaSchema
@@ -129,7 +132,7 @@
     
     return $schema if $schema;
     
-    $schema = Schema->new();
+    $schema = __PACKAGE__->new();
     
     $schema->appendRange(
         ComplexNode->new(name => 'schema')->appendRange(
@@ -199,7 +202,7 @@
                 AnyNode->new(maxOccur => 'unbounded', minOccur => 0, type=>'Validator')
             ),
             Property->new(name => 'type'),
-            Property->(name => 'inflator', optional => 1, inflator => 'IMPL::DOM::Schema::InflateFactory')
+            Property->new(name => 'inflator', optional => 1, inflator => 'IMPL::DOM::Schema::InflateFactory')
         ),
         ComplexType->new(type => 'SimpleNode', nativeType => 'IMPL::DOM::Schema::SimpleNode')->appendRange(
             NodeList->new()->appendRange(
--- a/Lib/IMPL/Exception.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Exception.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -11,6 +11,7 @@
 }
 
 use parent qw(IMPL::Object::Abstract Error Class::Accessor);
+require IMPL::Class::Property::Accessor;
 
 BEGIN {
     __PACKAGE__->mk_accessors( qw(Message Args CallStack Source) );
@@ -84,6 +85,10 @@
     ($this->Message || ref $this) . join("\n",'',map { my $s = $_; local $_; indent("$s",1) } @{$this->Args} ) . ( $notrace ? '' : "\n" . $this->CallStack);
 }
 
+sub _PropertyImplementor {
+	'IMPL::Class::Property::Accessor'
+}
+
 package IMPL::InvalidOperationException;
 our @ISA = qw(IMPL::Exception);
 __PACKAGE__->PassThroughArgs;
--- a/Lib/IMPL/Object/Factory.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Object/Factory.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -1,15 +1,19 @@
 package IMPL::Object::Factory;
 use strict;
 
-use parent qw(IMPL::Object IMPL::Object::Serializable);
-
-use IMPL::lang qw(:declare :constants);
+use IMPL::Const qw(:prop);
 
-BEGIN {
-    public property factory => PROP_GET | PROP_OWNERSET;
-    public property parameters => PROP_GET | PROP_OWNERSET;
-    public property method => PROP_GET | PROP_OWNERSET; 
-}
+use IMPL::declare {
+    base => [
+        'IMPL::Object' => undef,
+        'IMPL::Object::Serializable' => undef
+    ],
+    props => [
+        factory => PROP_RO,
+        parameters => PROP_RO,
+        method => PROP_RO
+    ]
+};
 
 # custom factory, overrides default
 sub new {
--- a/Lib/IMPL/SQL/Schema.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/SQL/Schema.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -1,9 +1,7 @@
 use strict;
 package IMPL::SQL::Schema;
 
-use IMPL::_core::version;
-
-use IMPL::lang qw(is :declare :constants);
+use IMPL::lang qw(is :declare);
 
 use parent qw(
     IMPL::Object
--- a/Lib/IMPL/SQL/Schema/Column.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/SQL/Schema/Column.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -2,7 +2,7 @@
 package IMPL::SQL::Schema::Column;
 use parent qw(IMPL::Object IMPL::Object::Autofill);
 
-use IMPL::lang qw( :DEFAULT :compare :declare :constants :hash );
+use IMPL::lang qw( :DEFAULT :compare :declare :hash );
 use IMPL::Class::Property::Direct;
 use IMPL::Exception();
 
--- a/Lib/IMPL/SQL/Schema/Constraint.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/SQL/Schema/Constraint.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 
-use IMPL::lang qw(:declare :constants is);
+use IMPL::lang qw(:declare is);
 
 use parent qw(IMPL::Object IMPL::Object::Disposable);
 
--- a/Lib/IMPL/SQL/Schema/Constraint/ForeignKey.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/SQL/Schema/Constraint/ForeignKey.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -2,7 +2,7 @@
 use strict;
 use warnings;
 
-use IMPL::lang qw(:declare :constants is);
+use IMPL::lang qw(:declare is);
 
 use parent qw(IMPL::SQL::Schema::Constraint);
 
--- a/Lib/IMPL/SQL/Schema/Table.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/SQL/Schema/Table.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -1,7 +1,7 @@
 use strict;
 package IMPL::SQL::Schema::Table;
 
-use IMPL::lang qw(:declare :constants is);
+use IMPL::lang qw(:declare  is);
 
 use parent qw(
     IMPL::Object
--- a/Lib/IMPL/SQL/Schema/Type.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/SQL/Schema/Type.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -4,7 +4,7 @@
 
 use parent qw(IMPL::Object IMPL::Object::Autofill);
 
-use IMPL::lang qw( :declare :constants :compare );
+use IMPL::lang qw( :declare :compare );
 
 use IMPL::Class::Property::Direct;
 
--- a/Lib/IMPL/Test/HarnessRunner.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Test/HarnessRunner.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -3,14 +3,12 @@
 use warnings;
 
 use parent qw(IMPL::Object IMPL::Object::Autofill IMPL::Object::Serializable);
-use IMPL::lang qw(:declare :constants);
+
 use TAP::Parser;
 use Test::Harness;
 
 __PACKAGE__->PassThroughArgs;
 
-BEGIN {
-}
 
 sub CTOR {
     my $this = shift;
--- a/Lib/IMPL/Web/AutoLocator.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Web/AutoLocator.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -1,7 +1,8 @@
 package IMPL::Web::AutoLocator;
 use strict;
 
-use IMPL::lang qw(:constants :hash);
+use IMPL::Const qw(:prop);
+use IMPL::lang qw( :hash );
 use URI;
 use URI::Escape;
 use IMPL::declare {
@@ -15,10 +16,10 @@
         'IMPL::Object::Serializable' => '@_'
 	],
 	props => [
-	   base => PROP_GET | PROP_OWNERSET,
-	   view => PROP_ALL,
-	   query => PROP_ALL,
-	   hash => PROP_ALL
+	   base => PROP_RO,
+	   view => PROP_RW,
+	   query => PROP_RW,
+	   hash => PROP_RW
 	]
 };
 
--- a/Lib/IMPL/Web/Security.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Web/Security.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -26,16 +26,11 @@
         };
     }
     
-    my ($status,$answer) = $auth->DoAuth($challenge);
-    
-    if ($status != AUTH_FAIL) {
-        SecurityContext->current->authority->InitSession(
-            $user,
-            $auth,
-            [$user->roles],
-            $answer
-        );
-    }
+    my $status = SecurityContext->current->authority->InitSession(
+        $user,
+        $auth,
+        [$user->roles]
+    );
     
     return {
         status => $status,
@@ -69,37 +64,32 @@
 
 C<IMPL::Web::Security> Модуль для аутентификации и авторизации веб запроса.
 
-=head1 SINOPSYS
-
-=begin code xml
-
-<security type='IMPL::Config::Activator'>
-    <factory>IMPL::Web::Security</factory>
-    <parameters type='HASH'>
-        <sessionFactory type='IMPL::Object::Factory'>
-            <factory type='IMPL::Object::Factory'>App::Data::Session</factory>
-            <method>insert</method>
-        </sessionFactory>
-    </parameters>
-</security>
-
-=end code xml
-
 =head1 DESCRIPTION
 
-Отвечает за инфраструктуру аутентификации и авторизации запросов. Основная особенность
-заключается в том, что запросы приходят через значительные интевалы времени, хотя и
-относятся к одной логической транзакции. В промежутках между запросами сервер не
-сохраняет свое состояние. Поэтому при каждом обращении сервер восстанавливает
-контекст безопасности.
+Текущий модуль обеспечивает функции верхнего уровня для работы с системой
+безопасности. Поскольку модуль является абстрактым, конкретные функции
+хранения и реализацию объектов модели безопасности должно обеспечить само
+приложение.
+
+Сама система безопасности в веб приложении состоит из двух частей
+
+=over
+
+=item Модель системы безопасности
 
-C<IMPL::Web::Security::Session> Объект обеспечивающий сохранение состояния в рамках одной сессии
-пользователя. Кроме контекста безопасности хранит дополнительние данные, которые необходимо
-сохранить между обработкой запросов.
+Предоставляет такие объкты безопасности, как пользователь, сессия роль,
+определяет правила проверки прав доступа субъекта к объекту.
+
+=item Модуль безопасности
 
-C<IMPL::Web::Security::User> Объект, устанавливающий связь между идентификатором пользователя
-C<IMPL::Security::Principal>, его ролями и данными безопасности для создания объектов
-аутентификации C<IMPL::Security::Auth>.
+Как правило встраивается в транспортный уровеь в виде обработчика
+C<IMPL::Web::Handler> и реализует непосредственно протокол аутентификации и
+обмена с пользователем.
+
+Также модуль безопасности использует модель для хранения сессий и данных
+аутентификции. Контекст безопасности создается именно этим модулем.
+
+=back
 
 =head1 MEMBERS
 
--- a/Lib/IMPL/Web/View/TTControl.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Web/View/TTControl.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -2,7 +2,7 @@
 use strict;
 
 use IMPL::DOM::Property qw(_dom);
-use IMPL::lang qw(:declare :constants);
+use IMPL::lang qw(:declare );
 
 use Template::Context();
 use Scalar::Util qw(weaken);
--- a/Lib/IMPL/Web/View/TTDocument.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Web/View/TTDocument.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -1,7 +1,7 @@
 package IMPL::Web::View::TTDocument;
 use strict;
 
-use IMPL::lang qw(:declare :constants);
+use IMPL::lang qw(:declare );
 use IMPL::DOM::Property qw(_dom);
 use IMPL::Web::View::TTFactory();
 use IMPL::Web::View::TTControl();
--- a/Lib/IMPL/Web/View/TTFactory.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Web/View/TTFactory.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -3,7 +3,7 @@
 
 use Template::Context();
 
-use IMPL::lang qw(:hash :declare :constants);
+use IMPL::lang qw(:hash :declare );
 use IMPL::Exception();
 use Scalar::Util qw(weaken);
 
--- a/Lib/IMPL/Web/View/TTLoader.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/Lib/IMPL/Web/View/TTLoader.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -1,7 +1,7 @@
 package IMPL::Web::View::TTLoader;
 use strict;
 
-use IMPL::lang qw(:declare :constants);
+use IMPL::lang qw(:declare);
 
 use Template::Provider();
 use Template::Context();
--- a/_test/Test/DOM/Builder.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/_test/Test/DOM/Builder.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -25,12 +25,12 @@
     $schema->appendRange(
         IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange(
             IMPL::DOM::Schema::NodeSet->new()->appendRange(
-                new IMPL::DOM::Schema::SimpleNode( name => 'firstName' ),
-                new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ),
-                new IMPL::DOM::Schema::ComplexNode( name => 'address', maxOccur => 'unbounded' )->appendRange(
+                IMPL::DOM::Schema::SimpleNode->new( name => 'firstName' ),
+                IMPL::DOM::Schema::SimpleNode->new( name => 'lastName' ),
+                IMPL::DOM::Schema::ComplexNode->new( name => 'address', maxOccur => 'unbounded' )->appendRange(
                     IMPL::DOM::Schema::NodeSet->new()->appendRange(
-                        new IMPL::DOM::Schema::SimpleNode( name => 'street' ),
-                        new IMPL::DOM::Schema::SimpleNode( name => 'line', minOccur => 0 )
+                        IMPL::DOM::Schema::SimpleNode->new( name => 'street' ),
+                        IMPL::DOM::Schema::SimpleNode->new( name => 'line', minOccur => 0 )
                     )
                 )
             )
--- a/_test/Test/DOM/Schema.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/_test/Test/DOM/Schema.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -35,12 +35,12 @@
     $schema->appendRange(
         IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange(
             IMPL::DOM::Schema::NodeSet->new()->appendRange(
-                new IMPL::DOM::Schema::SimpleNode( name => 'firstName' ),
-                new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ),
-                new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange(
+                IMPL::DOM::Schema::SimpleNode->new( name => 'firstName' ),
+                IMPL::DOM::Schema::SimpleNode->new( name => 'lastName' ),
+                IMPL::DOM::Schema::ComplexNode->new( name => 'address' )->appendRange(
                     IMPL::DOM::Schema::NodeSet->new()->appendRange(
-                        new IMPL::DOM::Schema::SimpleNode( name => 'street' ),
-                        new IMPL::DOM::Schema::SimpleNode( name => 'line', minOccur => 0 )
+                        IMPL::DOM::Schema::SimpleNode->new( name => 'street' ),
+                        IMPL::DOM::Schema::SimpleNode->new( name => 'line', minOccur => 0 )
                     )
                 )
             )
@@ -59,11 +59,11 @@
     my $schema = new IMPL::DOM::Schema;
     $schema->appendRange(
         IMPL::DOM::Schema::ComplexNode->new( name => 'personInfo' )->appendRange(
-            new IMPL::DOM::Schema::ComplexType( type => 'someType' ),
-            new IMPL::DOM::Schema::SimpleNode( name => 'lastName' ),
-            new IMPL::DOM::Schema::ComplexNode( name => 'address' )->appendRange(
-                new IMPL::DOM::Schema::SimpleNode( name => 'street' ),
-                new IMPL::DOM::Schema::SimpleNode( name => 'line' )
+            IMPL::DOM::Schema::ComplexType->new( type => 'someType' ),
+            IMPL::DOM::Schema::SimpleNode->new( name => 'lastName' ),
+            IMPL::DOM::Schema::ComplexNode->new( name => 'address' )->appendRange(
+                IMPL::DOM::Schema::SimpleNode->new( name => 'street' ),
+                IMPL::DOM::Schema::SimpleNode->new( name => 'line' )
             )
         )
     );
--- a/_test/Test/Web/AutoLocator.pm	Tue Oct 09 03:09:41 2012 +0400
+++ b/_test/Test/Web/AutoLocator.pm	Tue Oct 09 20:12:47 2012 +0400
@@ -1,7 +1,6 @@
 package Test::Web::AutoLocator;
 use strict;
 
-use IMPL::lang qw(:declare :constants);
 use IMPL::Test qw(test assert);
 use URI();