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> передавая первым параметром имя метода.