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