view Lib/IMPL/Web/Application.pm @ 59:0f3e369553bd

Rewritten property implementation (probably become slower but more flexible) Configuration infrastructure in progress (in the aspect of the lazy activation) Initial concept for the code generator
author wizard
date Tue, 09 Mar 2010 02:50:45 +0300
parents a35b60b16a99
children b0c068da93ac
line wrap: on
line source

package IMPL::Web::Application;
use strict;
use warnings;

use base qw(IMPL::Object IMPL::Object::Singleton);

require IMPL::Web::Application::Action;
require IMPL::Web::Application::Response;

use IMPL::Class::Property;
use CGI;

BEGIN {
    public property handlerError => prop_all;
    public property factoryAction => prop_all;
    public property handlersQuery => prop_all | prop_list;
}

# custom factory
sub new {
    my ($self,$file) = @_;
    
    return $self->LoadXMLFile($file);
}

sub Run {
    my ($this) = @_;
    
    while (my $query = $this->FetchRequest()) {
        my $response = new IMPL::Web::Application::Response(request => $query);
        
        my $action = new IMPL::Web::Application::Action(
        	request => $query,
        	response => $response,
        	application => $this, 
        ); 
        
        $action->ChainHandler($_) foreach $this->handlersQuery;
        
        $action->Invoke();
    }
}

{
	my $hasFetched = 0;

	sub FetchRequest {
		return undef if $hasFetched;
		$hasFetched = 1;
		return CGI->new();
	}
}

1;

__END__

=pod

=head1 SYNOPSIS

require MyApp;
MyApp->spawn('app.config')->Run();

=head1 DESCRIPTION

Зкземпляр приложения содержит в себе глобальные настройки, реализует контроллер запросов,
в качестве источника запросов используется CGI или иной совместимый модуль.

Процесс обработки запроса состоит из следующих частей

1. Получение cgi запроса
2. Вызов модуля для инициализации объекта действия
3. Инициализация контекста выполнения 
4. Выполнение запроса
5. Преобразование полученных данных в тело ответа




=cut