changeset 208:3d433a977e3b

corrected RestController for empty PAT_INFO corrected charset for ErrorHandler
author sergey
date Fri, 18 May 2012 18:43:00 +0400
parents f534a60d5b01
children a8db61d0ed33
files Lib/IMPL/Web/Handler/ErrorHandler.pm Lib/IMPL/Web/Handler/RestController.pm Lib/IMPL/Web/Handler/ViewSelector.pm
diffstat 3 files changed, 38 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/Lib/IMPL/Web/Handler/ErrorHandler.pm	Fri May 04 02:09:13 2012 +0400
+++ b/Lib/IMPL/Web/Handler/ErrorHandler.pm	Fri May 18 18:43:00 2012 +0400
@@ -43,6 +43,7 @@
 	
 	if (my $err = $@) {
 		$action->ReinitResponse();
+		$action->response->charset('utf-8');
 		$action->response->contentType($this->contentType);
 		
 		my $vars = {
--- a/Lib/IMPL/Web/Handler/RestController.pm	Fri May 04 02:09:13 2012 +0400
+++ b/Lib/IMPL/Web/Handler/RestController.pm	Fri May 18 18:43:00 2012 +0400
@@ -39,14 +39,20 @@
 	
 	#TODO: path_info is broken for IIS
 	my $pathInfo = $query->path_info;
+	my @segments;
 	
-	my @segments = split /\//, $pathInfo, -1; # keep trailing empty string if present
+	if (length $pathInfo) {
 	
-	# remove first segment since it's always empty
-	shift @segments;
+		@segments = split /\//, $pathInfo, -1; # keep trailing empty string if present
+		
+		# remove first segment since it's always empty
+		shift @segments;
+		
+		my ($obj,$view) = (pop(@segments) =~ m/(.*?)(?:\.(\w+))?$/);
+		push @segments, $obj;
 	
-	my ($obj,$view) = (pop(@segments) =~ m/(.*?)(?:\.(\w+))?$/);
-	push @segments, $obj;
+	}
+	
 	
 	my $res = $this->contract->Transform($this->root, { id => '' } );
 	
--- a/Lib/IMPL/Web/Handler/ViewSelector.pm	Fri May 04 02:09:13 2012 +0400
+++ b/Lib/IMPL/Web/Handler/ViewSelector.pm	Fri May 18 18:43:00 2012 +0400
@@ -57,4 +57,29 @@
     return $handler->Invoke($action,$next);
 }
 
-1;
\ No newline at end of file
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+C<IMPL::Web::Handler::ViewSelector> - Выбор нужного представления на основе заголовка C<Accept>
+
+=head1 DESCRIPTION
+
+Использует заголовок запроса C<Accept> для выбора подходящего представления, если задано свойство C<types>,
+пытается в первую очередь по расширению определить, какое представление подходит.
+
+=head1 MEMBERS
+
+=head2 C<[get,set,list]views>
+
+Список представлений, которые могут быть возвращены.
+
+=head2 C<[get,set]types>
+
+Хеш с соотвествием между расширением и типом содержимого, для подсказки при выборе представления.
+
+=cut
\ No newline at end of file