changeset 248:814d755e5d12

Minor fixes
author sergey
date Tue, 06 Nov 2012 00:58:15 +0400
parents 2270de2469ff
children 0057f48f7945
files Lib/IMPL/DOM/Schema/InflateFactory.pm Lib/IMPL/DOM/Schema/SimpleNode.pm Lib/IMPL/Security.pm Lib/IMPL/Web/Application/CustomResource.pm Lib/IMPL/Web/Application/Resource.pm Lib/IMPL/Web/Application/ResourceContract.pm
diffstat 6 files changed, 35 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/DOM/Schema/InflateFactory.pm	Wed Oct 31 04:18:35 2012 +0400
+++ b/Lib/IMPL/DOM/Schema/InflateFactory.pm	Tue Nov 06 00:58:15 2012 +0400
@@ -5,7 +5,7 @@
 require IMPL::Object::Factory;
 
 sub new {
-    my ($self,$value) = @_;
+    my ($self,$value,$schema) = @_;
     
     if ($value =~ /^(\w+(?:::\w+)*)(?:\.(\w+))?$/) {
         return IMPL::Object::Factory->new($1,undef,$2);    
--- a/Lib/IMPL/DOM/Schema/SimpleNode.pm	Wed Oct 31 04:18:35 2012 +0400
+++ b/Lib/IMPL/DOM/Schema/SimpleNode.pm	Tue Nov 06 00:58:15 2012 +0400
@@ -44,7 +44,7 @@
     my ($this,$value) = @_;
     
     if ( my $inflator = $this->inflator ) {
-        return $inflator->new($value);
+        return $inflator->new($value,$this);
     } else {
         return $value;
     }
--- a/Lib/IMPL/Security.pm	Wed Oct 31 04:18:35 2012 +0400
+++ b/Lib/IMPL/Security.pm	Tue Nov 06 00:58:15 2012 +0400
@@ -53,7 +53,7 @@
 }
 
 sub context {
-    AbstractContext->current;
+    AbstractContext->current || Context->nobody;
 }
 
 1;
--- a/Lib/IMPL/Web/Application/CustomResource.pm	Wed Oct 31 04:18:35 2012 +0400
+++ b/Lib/IMPL/Web/Application/CustomResource.pm	Tue Nov 06 00:58:15 2012 +0400
@@ -5,6 +5,7 @@
 
 use IMPL::declare {
     require => {
+        Factory => 'IMPL::Object::Factory',
         CustomResourceContract => 'IMPL::Web::Application::CustomResourceContract'        
     },
     base => [
@@ -32,6 +33,18 @@
     ); 
 }
 
+sub CreateContract {
+    my ($self, %args) = @_;
+    
+    $self->contractFactory->new(
+        resourceFactory => Factory->new(
+            $self,
+            \%args
+        ),
+        resources => [ $self->GetChildResources() ]
+    )
+}
+
 sub GetChildResources {
     
 }
@@ -90,6 +103,14 @@
 
 Создает новый экземпляр контракта, используя фабрику из свойства C<contractFactory>.
 
+=head2 C<[static]CreateContract(%args)>
+
+Создает новый контракт, который при создании ресурсов будет передавать им в
+конструкторе параметры C<%args>. Реализуется при помощи C<IMPL::Object::Factory>
+которой задается параметр ссылка на C<%args>, т.о. при создании ресурса, ему в
+конструкторе будет передан список из ключей и значений хеша C<%args>, а затем
+остальные аргументы.
+
 =head2 C<[static]GetChildResources()>
 
 Статический метод, который должны переопределять новые классы ресурсов, у
--- a/Lib/IMPL/Web/Application/Resource.pm	Wed Oct 31 04:18:35 2012 +0400
+++ b/Lib/IMPL/Web/Application/Resource.pm	Tue Nov 06 00:58:15 2012 +0400
@@ -69,8 +69,15 @@
       die NotFoundException->new($this->location->url,$childId) unless $info;
       
       my $binding = $info->{binding};
-      my $contract = $info->{contract}
-        or die OperationException->new("Can't fetch a contract for the resource", $childId);
+      my $contract = $info->{contract};
+        
+      if (ref $contract eq 'CODE') {
+          $contract = $contract->();
+          $info->{contract} = $contract;
+      }
+      
+      die OperationException->new("Can't fetch a contract for the resource", $childId)
+        unless $contract;
         
       my %args = (
             parent => $this,
@@ -152,7 +159,7 @@
 
 =head2 C<[get]contract>
 
-Обязательное свойство для ресурса, ссылается, на контракт, соотсетствующий
+Обязательное свойство для ресурса, ссылается, на контракт, соответствующий
 данному ресурсу, используется для выполнения C<HTTP> методов и получения
 дочерних ресурсов.
 
--- a/Lib/IMPL/Web/Application/ResourceContract.pm	Wed Oct 31 04:18:35 2012 +0400
+++ b/Lib/IMPL/Web/Application/ResourceContract.pm	Tue Nov 06 00:58:15 2012 +0400
@@ -11,7 +11,7 @@
 	  base  => [ 'IMPL::Object' => undef ],
 	  props => [
 		resourceFactory  => PROP_ALL,
-		verbs       => PROP_ALL,
+		verbs            => PROP_ALL,
 		_namedResources  => PROP_ALL,
 		_regexpResources => PROP_ALL | PROP_LIST,
 	  ]