Mercurial > pub > Impl
comparison Lib/IMPL/Web/AutoLocator.pm @ 229:47f77e6409f7
heavily reworked the resource model of the web application:
*some ResourcesContraact functionality moved to Resource
+Added CustomResource
*Corrected action handlers
author | sergey |
---|---|
date | Sat, 29 Sep 2012 02:34:47 +0400 |
parents | 292226770180 |
children | 5c82eec23bb6 |
comparison
equal
deleted
inserted
replaced
228:431db7034a88 | 229:47f77e6409f7 |
---|---|
1 package IMPL::Web::AutoLocator; | 1 package IMPL::Web::AutoLocator; |
2 use strict; | 2 use strict; |
3 | 3 |
4 use IMPL::lang qw(:declare :constants :hash); | 4 use IMPL::lang qw(:constants :hash); |
5 use URI; | 5 use URI; |
6 use URI::Escape; | 6 use URI::Escape; |
7 use IMPL::declare { | 7 use IMPL::declare { |
8 require => { | 8 require => { |
9 Exception => 'IMPL::Exception', | 9 Exception => 'IMPL::Exception', |
11 }, | 11 }, |
12 base => [ | 12 base => [ |
13 'IMPL::Object' => undef, | 13 'IMPL::Object' => undef, |
14 'IMPL::Object::Autofill' => '@_', | 14 'IMPL::Object::Autofill' => '@_', |
15 'IMPL::Object::Serializable' => '@_' | 15 'IMPL::Object::Serializable' => '@_' |
16 ], | |
17 props => [ | |
18 base => PROP_GET | PROP_OWNERSET, | |
19 view => PROP_ALL, | |
20 query => PROP_ALL, | |
21 hash => PROP_ALL | |
16 ] | 22 ] |
17 }; | 23 }; |
18 | 24 |
19 BEGIN { | 25 sub Child { |
20 public property base => PROP_GET | PROP_OWNERSET; | |
21 public property view => PROP_ALL; | |
22 public property query => PROP_ALL; | |
23 public property hash => PROP_ALL; | |
24 } | |
25 | |
26 sub Fetch { | |
27 my $this = shift; | 26 my $this = shift; |
28 my $child = shift or die ArgumentException->new("a child resource identifier is required"); | 27 my $child = shift or die ArgumentException->new("a child resource identifier is required"); |
29 die ArgumentException->new("a child resource can't be a reference") if ref $child; | 28 die ArgumentException->new("a child resource can't be a reference") if ref $child; |
30 | 29 |
31 # safe | 30 # safe |
70 (my $method) = ($AUTOLOAD =~ m/(\w+)$/); | 69 (my $method) = ($AUTOLOAD =~ m/(\w+)$/); |
71 | 70 |
72 return if $method eq 'DESTROY'; | 71 return if $method eq 'DESTROY'; |
73 | 72 |
74 my $this = shift; | 73 my $this = shift; |
75 return $this->Fetch($method,@_); | 74 return $this->Child($method,@_); |
76 } | 75 } |
77 | 76 |
78 | 77 |
79 | 78 |
80 1; | 79 1; |
81 | 80 |
82 __END__ | 81 __END__ |
83 | 82 |
84 =head1 NAME | 83 =head1 NAME |
85 | 84 |
85 C<IMPL::Web::AutoLocator> - Обертка вокруг адреса ресурса. | |
86 | |
86 =head1 SYNOPSIS | 87 =head1 SYNOPSIS |
87 | |
88 C<IMPL::Web::AutoLocator> - Обертка вокруг адреса ресурса. | |
89 | 88 |
90 =begin code | 89 =begin code |
91 | 90 |
92 use IMPL::require { | 91 use IMPL::require { |
93 Locator => 'IMPL::Web::Locator' | 92 Locator => 'IMPL::Web::AutoLocator' |
94 }; | 93 }; |
95 | 94 |
96 my $bugTracker = Locator->new(base => "http://myhost.org/bugzilla")->SetView("cgi"); | 95 my $bugTracker = Locator->new(base => "http://myhost.org/bugzilla")->SetView("cgi"); |
97 | 96 |
98 my $bug = $bugTracker->show_bug({id = 1}); | 97 my $bug = $bugTracker->show_bug({id = 1}); |
99 | 98 |
100 my $wikiPages = Locator->new(base => "http://myhost.org/wiki/bin/view"); | 99 my $wikiPages = Locator->new(base => "http://myhost.org/wiki/bin/view"); |
101 | 100 |
102 my $page = $wiki->Main->HowTo; | 101 my $page = $wiki->Main->HowTo; |
103 | 102 |
103 my $images = Locator->new(base => "http://static.myhost.org/images", view => "png"); | |
104 | |
105 my $editIco = $images->icons->small->edit; | |
106 | |
104 =end code | 107 =end code |
105 | 108 |
106 =head1 DESCRIPTION | 109 =head1 DESCRIPTION |
107 | 110 |
108 Для удобстав навигации по ресурсам, полностью отражает классическую структуру иерархически | 111 Для удобстав навигации по ресурсам, полностью отражает классическую структуру |
109 организованных ресурсов. позволяет гибко работать с параметрами запроса и хешем. Для постоты | 112 иерархически организованных ресурсов. позволяет гибко работать с параметрами |
110 чтения реализует метод C<AUTOLOAD> для доступа к дочерним ресурсам. | 113 запроса и хешем. Для постоты чтения реализует метод C<AUTOLOAD> для доступа |
114 к дочерним ресурсам. | |
111 | 115 |
112 =head1 MEMBERS | 116 =head1 MEMBERS |
113 | 117 |
114 =head2 C<CTOR(base => $url,view => $extension, query => $hashQuery, hash => $fragment)> | 118 =head2 C<CTOR(%args)> |
115 | 119 |
116 Создает новый объект расположение. Позволяет задать путь, расширение, параметры запроса и фрагмент ресурса. | 120 Создает новый объект расположение. Позволяет задать путь, расширение, параметры |
121 запроса и фрагмент ресурса. | |
117 | 122 |
118 =head2 C<Fetch($child[,$query])> | 123 =over |
119 | 124 |
120 Получает расположение дочернего ресурса. При этом моздается новый объект адреса ресурса. | 125 =item * C<base> |
126 | |
127 Строка с базовым адресом для дочерних ресурсов. | |
128 | |
129 =item * C<view> | |
130 | |
131 Задает суфикс, обозначающий представление ресурса, аналогично расширению у | |
132 файлов. Данный суффикс может использоваться контроллером для выбора | |
133 представления ресурса. | |
134 | |
135 =item * C<query> | |
136 | |
137 Ссылка на хеш с параметрами запроса | |
138 | |
139 =item * C<hash> | |
140 | |
141 Часть C<uri> обозначающая фрагмент документа (все, что идет после символа C<#>). | |
142 | |
143 =back | |
144 | |
145 =head2 C<Child($child[,$query])> | |
146 | |
147 Получает расположение дочернего ресурса. При этом cоздается новый объект адреса ресурса. | |
148 | |
149 =head2 C<SetView($view)> | |
150 | |
151 Позволяет указать представление (расширение) у текущего адреса ресурса. Изменяет | |
152 представление и возвращает измененный адрес ресурса. | |
153 | |
154 =head2 C<[get]base> | |
155 | |
156 Базовый адрес, относительно которого будут получены дочерние ресурсы. | |
157 | |
158 =head2 C<[get,set]view> | |
159 | |
160 Представление для ресурсов, аналогично расширению у файлов. | |
161 | |
162 =head2 C<[get,set]query> | |
163 | |
164 Ссылка на хеш с параметрами для C<GET> запроса. | |
165 | |
166 =head2 C<[get,set]hash> | |
167 | |
168 Часть адреса ресурса, отвечающая за фрагмент. | |
169 | |
170 =head2 C<[get]url> | |
171 | |
172 Объект C<URI> для текущего адреса. | |
121 | 173 |
122 =head2 C<AUTLOAD> | 174 =head2 C<AUTLOAD> |
123 | 175 |
124 Перенаправляет вызовы методов в метод C<Fetch> передавая первым параметром имя метода. | 176 Перенаправляет вызовы методов в метод C<Child> передавая первым параметром имя метода. |
125 | 177 |
126 =cut | 178 =cut |
127 | 179 |