# HG changeset patch # User sergey # Date 1346843426 -14400 # Node ID b6cde007a175fadbe59c856569f6782b0ae731f4 # Parent a1e868b0fba993cc2cc52832c52760b237d13c7c Added resource contract diff -r a1e868b0fba9 -r b6cde007a175 Lib/IMPL/Code/Binding.pm --- a/Lib/IMPL/Code/Binding.pm Fri Aug 31 16:41:18 2012 +0400 +++ b/Lib/IMPL/Code/Binding.pm Wed Sep 05 15:10:26 2012 +0400 @@ -25,9 +25,9 @@ $text } CODE - my $body = eval $code; #$compiler_env->reval($code,'strict'); + my $method = eval $code; #$compiler_env->reval($code,'strict'); - + return $method; } 1; @@ -38,7 +38,7 @@ =head1 NAME -C - превращает выражения в связыватель +C - превращает выражения в процедуру. =head1 SYNOPSIS @@ -51,7 +51,8 @@ my $person = DB->SearchPerson({name => 'Peter'})->First; my $bind = Binding->new( - [qw(obj)] => q{ $obj->addresses->[0]->country->code } + [qw(obj)] => + q{ $obj->addresses->[0]->country->code } ); print $bind->($person); @@ -65,8 +66,7 @@ Выражение параметризуется произвольным количеством именованных параметров, которые будут доступны внутри выражения как переменные. При создании связывателя -в конструктор передается выражение связывания, ссылка насписок из параметров -и могут быть переданы связи для копозиции. +в конструктор передается выражение связывания, ссылка насписок из параметров. При создания связывателя будет проверен синтаксис, и если в выражении допущена ошибка, возникнет исключение. @@ -76,7 +76,7 @@ =head1 MEMBERS -=head2 C +=head2 C Возвращает ссылку на процедуру. diff -r a1e868b0fba9 -r b6cde007a175 Lib/IMPL/Web/Application/ResourceContract.pm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Lib/IMPL/Web/Application/ResourceContract.pm Wed Sep 05 15:10:26 2012 +0400 @@ -0,0 +1,65 @@ +package IMPL::Web::Application::ResourceContract; +use strict; +use IMPL::lang qw(:declare); +use IMPL::declare { + base => [ + 'IMPL::Object' => undef + ] +}; + +BEGIN { + public property operations => PROP_ALL; + private property _namedResources => PROP_ALL; + private property _regexpResources => PROP_ALL; +} + +1; + +__END__ + +=pod + +=head1 NAME + +C - описание ресурса + +=head1 SYNIOSIS + +=begin code + +use IMPL::require { + ResourceContract => 'IMPL::Web::Application::ResourceContract', + OperationContract => 'IMPL::Web::Application::OperationContract' +}; + +my $contract = ResourceContract->new( + operations => { + get => OperationContract->new( + bind => sub { + return "Hello!"; + } + ) + }, + resources => [ + { + name => 'info', + bind => sub { + return $_[0]->model->info; + }, + contract => ResourceContract->new( + get => OperationContract->new( + bind => sub { + my ($resource,$model) = @_; + return $model; # or the same: $resource->model; + } + ) + ) + } + ] +) + +=end code + +=head1 DESCRIPTION + +=cut \ No newline at end of file diff -r a1e868b0fba9 -r b6cde007a175 _test/Resources/resources.xsd --- a/_test/Resources/resources.xsd Fri Aug 31 16:41:18 2012 +0400 +++ b/_test/Resources/resources.xsd Wed Sep 05 15:10:26 2012 +0400 @@ -14,7 +14,7 @@ - + @@ -43,9 +43,18 @@ - + + + + + + + + + + - + @@ -71,25 +80,32 @@ minOccurs="0" /> + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -100,18 +116,20 @@ - + + - - - - + + + + @@ -149,5 +167,11 @@ + + + + + + \ No newline at end of file diff -r a1e868b0fba9 -r b6cde007a175 _test/Resources/sample.xml --- a/_test/Resources/sample.xml Fri Aug 31 16:41:18 2012 +0400 +++ b/_test/Resources/sample.xml Wed Sep 05 15:10:26 2012 +0400 @@ -3,17 +3,24 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://implab.org/schemas/resources resources.xsd "> - + + + projects - - + + + + + - - - - + + + + + + @@ -22,32 +29,43 @@ - (\w+) - + (\w+) + + + + + - - - - - + + + + + + library - - + + + + sources - - + + + + - + + + \ No newline at end of file