Mercurial > pub > Impl
diff 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 |
line wrap: on
line diff
--- a/Lib/IMPL/Web/AutoLocator.pm Tue May 29 20:07:22 2012 +0400 +++ b/Lib/IMPL/Web/AutoLocator.pm Tue Jun 05 07:45:21 2012 +0400 @@ -20,13 +20,13 @@ public property base => PROP_GET | PROP_OWNERSET; public property view => PROP_ALL; public property query => PROP_ALL; - public property hash => RPOP_ALL; + public property hash => PROP_ALL; } -sub fetch { +sub Fetch { my $this = shift; - my $child = shift or die ArgumentException->new(child => "a child resource identifier is required"); - die ArgumentException->new(child => "a child resource can't be a reference"); + my $child = shift or die ArgumentException->new("a child resource identifier is required"); + die ArgumentException->new("a child resource can't be a reference") if ref $child; # safe $child = uri_escape($child); @@ -43,7 +43,36 @@ $args{query} = ref $query eq 'HASH' ? hashMerge($this->query,$query) : $query; } - return __PACKAGE__->new() + return __PACKAGE__->new(%args); +} + +sub SetView { + my ($this,$newView) = @_; + + $this->view($newView); + + return $this; +} + +sub url { + my ($this) = @_; + + my $url = URI->new($this->view ? $this->base . "." . $this->view : $this->base); + $url->query_form($this->query); + $url->fragment($this->hash); + + return $url; +} + +sub AUTOLOAD { + our $AUTOLOAD; + + (my $method) = ($AUTOLOAD =~ m/(\w+)$/); + + return if $method eq 'DESTROY'; + + my $this = shift; + return $this->Fetch($method,@_); } @@ -78,4 +107,18 @@ Для удобстав навигации по ресурсам, полностью отражает классическую структуру иерархически организованных ресурсов. позволяет гибко работать с параметрами запроса и хешем. Для постоты -чтения реализует метод C<AUTOLOAD> для доступа к дочерним ресурсам \ No newline at end of file +чтения реализует метод C<AUTOLOAD> для доступа к дочерним ресурсам. + +=head1 MEMBERS + +=head2 C<CTOR(base => $url,view => $extension, query => $hashQuery, hash => $fragment)> + +Создает новый объект расположение. Позволяет задать путь, расширение, параметры запроса и фрагмент ресурса. + +=head2 C<Fetch($child[,$query])> + +Получает расположение дочернего ресурса. При этом моздается новый объект адреса ресурса. + +=head2 C<AUTLOAD> + +Перенаправляет вызовы методов в метод C<Fetch> передавая первым параметром имя метода.