Mercurial > pub > Impl
view Lib/Engine/Action/URICall.pm @ 14:65a7bb156fb7
Дом модель и схема
author | Sergey |
---|---|
date | Fri, 04 Sep 2009 16:38:15 +0400 |
parents | 03e58a454b20 |
children | 16ada169ca75 |
line wrap: on
line source
package Engine::Action::URICall; use strict; use Common; use Engine::Action; our $Namespace; our %MapOutput; our $DefaultMethod; %MapOutput = ( page => 'Engine::Output::Page' , xml => 'Engine::Output::Xml' ) if not %MapOutput; =pod /module/submodule/method.format =cut sub ConstructAction { my ($class,$uriRequest) = @_; my @module = $uriRequest->path_segments; my ($function,$format) = (((pop @module) or $DefaultMethod) =~ m/^(.*?)(?:\.(\w+))?$/); @module = grep $_, @module; my $module = @module ? ($Namespace ? $Namespace . '::' : '').join('::',@module) : $Namespace; return new Engine::Action( Package => $module, Method => $function, Output => $class->MapOutput($format), RequestURI => $uriRequest); } sub MapOutput { my ($class,$format) = @_; my $module = $MapOutput{$format} or return undef; eval "require $module;" or die new Exception('Failed to load output module',$module,$@); if ($module->can('construct')) { return $module->construct($format); } else { return $module; } } 1;