Mercurial > pub > Impl
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, ]