annotate Lib/IMPL/Web/Application/CustomResource.pm @ 250:129e48bb5afb

DOM refactoring ObjectToDOM methods are virtual QueryToDOM uses inflators Fixed transform for the complex values in the ObjectToDOM QueryToDOM doesn't allow to use complex values (HASHes) as values for nodes (overpost problem)
author sergey
date Wed, 07 Nov 2012 04:17:53 +0400
parents 814d755e5d12
children 9b25e1f50144
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
229
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
1 package IMPL::Web::Application::CustomResource;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
2 use strict;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
3
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
4 use IMPL::Const qw(:prop);
229
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
5
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
6 use IMPL::declare {
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
7 require => {
248
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
8 Factory => 'IMPL::Object::Factory',
229
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
9 CustomResourceContract => 'IMPL::Web::Application::CustomResourceContract'
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
10 },
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
11 base => [
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
12 'IMPL::Web::Application::Resource' => '@_'
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
13 ]
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
14 };
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
15
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
16 __PACKAGE__->static_accessor(contractFactory => CustomResourceContract );
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
17 __PACKAGE__->static_accessor_own(_contractInstance => undef);
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
18
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
19 sub contractInstance {
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
20 my ($self) = @_;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
21
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
22 $self = ref $self || $self;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
23 $self->_contractInstance ? $self->_contractInstance : $self->InitContract();
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
24 }
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
25
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
26 sub InitContract {
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
27 my ($self) = @_;
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
28 $self->_contractInstance(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
29 $self->contractFactory->new(
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
30 resourceFactory => $self,
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
31 resources => [ $self->GetChildResources() ]
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
32 )
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
33 );
229
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
34 }
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
35
248
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
36 sub CreateContract {
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
37 my ($self, %args) = @_;
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
38
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
39 $self->contractFactory->new(
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
40 resourceFactory => Factory->new(
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
41 $self,
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
42 \%args
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
43 ),
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
44 resources => [ $self->GetChildResources() ]
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
45 )
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
46 }
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
47
229
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
48 sub GetChildResources {
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
49
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
50 }
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
51
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
52
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
53 1;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
54
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
55 __END__
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
56
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
57 =pod
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
58
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
59 =head1 NAME
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
60
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
61 C<IMPL::Web::Application::CustomResource> - базовый класс для ресурсов,
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
62 реальзуемых в коде.
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
63
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
64 =head1 SYNOPSIS
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
65
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
66 =begin code
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
67
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
68 package MyApp::Web::Resources::ProfileResource;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
69 use IMPL::declare {
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
70 base => [
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
71 'IMPL::Web::Application::CustomResource' => '@_'
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
72 ]
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
73 }
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
74
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
75 sub HttpGet {
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
76 my ($this) = @_;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
77 return $this->model;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
78 }
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
79
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
80 sub HttpPut {
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
81 my ($this,$action) = @_;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
82
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
83 my $form = MyApp::Web::Schema::UpdateUser->new();
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
84
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
85 $this->model->update( $form->Bind($action) );
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
86 }
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
87
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
88 =end code
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
89
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
90 =head1 MEMBERS
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
91
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
92 =head2 C<[static]contractFactory>
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
93
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
94 Фабрика, используемая для получения контракта ресурса. По умолчанию
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
95 C<IMPL::Web::Application::CustomResourceContract>.
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
96
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
97 =head2 C<[static]contractInstance>
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
98
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
99 Экземпляр контракта для ресурса. Создается при первом обращении при помощи
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
100 метода C<InitContract()>.
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
101
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
102 =head2 C<[static]InitContract()>
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
103
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
104 Создает новый экземпляр контракта, используя фабрику из свойства C<contractFactory>.
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
105
248
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
106 =head2 C<[static]CreateContract(%args)>
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
107
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
108 Создает новый контракт, который при создании ресурсов будет передавать им в
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
109 конструкторе параметры C<%args>. Реализуется при помощи C<IMPL::Object::Factory>
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
110 которой задается параметр ссылка на C<%args>, т.о. при создании ресурса, ему в
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
111 конструкторе будет передан список из ключей и значений хеша C<%args>, а затем
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
112 остальные аргументы.
814d755e5d12 Minor fixes
sergey
parents: 240
diff changeset
113
229
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
114 =head2 C<[static]GetChildResources()>
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
115
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
116 Статический метод, который должны переопределять новые классы ресурсов, у
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
117 которых есть дочерние ресурсы.
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
118
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
119 =begin code
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
120
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
121 package MyApp::Web::MyResource
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
122
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
123 sub GetChildResources {
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
124 my $self = shift;
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
125 return
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
126 $self->SUPER::GetChildResources(),
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
127 {
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
128 name => 'info',
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
129 contract => $contractInfo
229
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
130 };
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
131 }
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
132
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
133 =end code
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
134
230
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
135 Метод возвращает список из хешей, которые будут переданы в качестве параметра
6d8092d8ce1b *reworked IMPL::Security
sergey
parents: 229
diff changeset
136 C<resources> контракту данного ресурса.
229
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
137
47f77e6409f7 heavily reworked the resource model of the web application:
sergey
parents:
diff changeset
138 =cut