Mercurial > pub > Impl
comparison Lib/IMPL/Web/AutoLocator.pm @ 211:2b9b55cfb79b
Completed IMPL::Web::AutoLocator, added tests
author | cin |
---|---|
date | Tue, 05 Jun 2012 07:45:21 +0400 |
parents | 6adaeb86945d |
children | 292226770180 |
comparison
equal
deleted
inserted
replaced
210:6adaeb86945d | 211:2b9b55cfb79b |
---|---|
18 | 18 |
19 BEGIN { | 19 BEGIN { |
20 public property base => PROP_GET | PROP_OWNERSET; | 20 public property base => PROP_GET | PROP_OWNERSET; |
21 public property view => PROP_ALL; | 21 public property view => PROP_ALL; |
22 public property query => PROP_ALL; | 22 public property query => PROP_ALL; |
23 public property hash => RPOP_ALL; | 23 public property hash => PROP_ALL; |
24 } | 24 } |
25 | 25 |
26 sub fetch { | 26 sub Fetch { |
27 my $this = shift; | 27 my $this = shift; |
28 my $child = shift or die ArgumentException->new(child => "a child resource identifier is required"); | 28 my $child = shift or die ArgumentException->new("a child resource identifier is required"); |
29 die ArgumentException->new(child => "a child resource can't be a reference"); | 29 die ArgumentException->new("a child resource can't be a reference") if ref $child; |
30 | 30 |
31 # safe | 31 # safe |
32 $child = uri_escape($child); | 32 $child = uri_escape($child); |
33 | 33 |
34 my %args; | 34 my %args; |
41 my $query = shift; | 41 my $query = shift; |
42 | 42 |
43 $args{query} = ref $query eq 'HASH' ? hashMerge($this->query,$query) : $query; | 43 $args{query} = ref $query eq 'HASH' ? hashMerge($this->query,$query) : $query; |
44 } | 44 } |
45 | 45 |
46 return __PACKAGE__->new() | 46 return __PACKAGE__->new(%args); |
47 } | |
48 | |
49 sub SetView { | |
50 my ($this,$newView) = @_; | |
51 | |
52 $this->view($newView); | |
53 | |
54 return $this; | |
55 } | |
56 | |
57 sub url { | |
58 my ($this) = @_; | |
59 | |
60 my $url = URI->new($this->view ? $this->base . "." . $this->view : $this->base); | |
61 $url->query_form($this->query); | |
62 $url->fragment($this->hash); | |
63 | |
64 return $url; | |
65 } | |
66 | |
67 sub AUTOLOAD { | |
68 our $AUTOLOAD; | |
69 | |
70 (my $method) = ($AUTOLOAD =~ m/(\w+)$/); | |
71 | |
72 return if $method eq 'DESTROY'; | |
73 | |
74 my $this = shift; | |
75 return $this->Fetch($method,@_); | |
47 } | 76 } |
48 | 77 |
49 | 78 |
50 | 79 |
51 1; | 80 1; |
76 | 105 |
77 =head1 DESCRIPTION | 106 =head1 DESCRIPTION |
78 | 107 |
79 Для удобстав навигации по ресурсам, полностью отражает классическую структуру иерархически | 108 Для удобстав навигации по ресурсам, полностью отражает классическую структуру иерархически |
80 организованных ресурсов. позволяет гибко работать с параметрами запроса и хешем. Для постоты | 109 организованных ресурсов. позволяет гибко работать с параметрами запроса и хешем. Для постоты |
81 чтения реализует метод C<AUTOLOAD> для доступа к дочерним ресурсам | 110 чтения реализует метод C<AUTOLOAD> для доступа к дочерним ресурсам. |
111 | |
112 =head1 MEMBERS | |
113 | |
114 =head2 C<CTOR(base => $url,view => $extension, query => $hashQuery, hash => $fragment)> | |
115 | |
116 Создает новый объект расположение. Позволяет задать путь, расширение, параметры запроса и фрагмент ресурса. | |
117 | |
118 =head2 C<Fetch($child[,$query])> | |
119 | |
120 Получает расположение дочернего ресурса. При этом моздается новый объект адреса ресурса. | |
121 | |
122 =head2 C<AUTLOAD> | |
123 | |
124 Перенаправляет вызовы методов в метод C<Fetch> передавая первым параметром имя метода. |