comparison Lib/Engine/Action/URICall.pm @ 0:03e58a454b20

Создан репозитарий
author Sergey
date Tue, 14 Jul 2009 12:54:37 +0400
parents
children 16ada169ca75
comparison
equal deleted inserted replaced
-1:000000000000 0:03e58a454b20
1 package Engine::Action::URICall;
2 use strict;
3 use Common;
4 use Engine::Action;
5
6 our $Namespace;
7
8 our %MapOutput;
9 our $DefaultMethod;
10
11 %MapOutput = ( page => 'Engine::Output::Page' , xml => 'Engine::Output::Xml' ) if not %MapOutput;
12
13 =pod
14 /module/submodule/method.format
15 =cut
16
17 sub ConstructAction {
18 my ($class,$uriRequest) = @_;
19
20 my @module = $uriRequest->path_segments;
21
22 my ($function,$format) = (((pop @module) or $DefaultMethod) =~ m/^(.*?)(?:\.(\w+))?$/);
23 @module = grep $_, @module;
24 my $module = @module ? ($Namespace ? $Namespace . '::' : '').join('::',@module) : $Namespace;
25
26 return new Engine::Action( Package => $module, Method => $function, Output => $class->MapOutput($format), RequestURI => $uriRequest);
27 }
28
29 sub MapOutput {
30 my ($class,$format) = @_;
31 my $module = $MapOutput{$format} or return undef;
32
33 eval "require $module;" or die new Exception('Failed to load output module',$module,$@);
34
35 if ($module->can('construct')) {
36 return $module->construct($format);
37 } else {
38 return $module;
39 }
40 }
41
42 1;