Apache-Voodoo
view release on metacpan or search on metacpan
lib/Apache/Voodoo/Application.pm view on Meta::CPAN
my $config = $self->{'parser'};
my %old_m = %{$config->models()};
my %old_v = %{$config->views()};
my %old_c = %{$config->controllers()};
my %old_i = %{$config->includes()};
my $old_ns = $config->old_ns();
$config->parse();
$self->_reload_modules('m',\%old_m,$config->models());
$self->_reload_modules('v',\%old_v,$config->views());
if (defined($old_ns) && $old_ns != $config->old_ns()) {
# They've swapped from the old style name for controller to the new syle
# (or vice versa). Drop all the old controllers.
$self->_debug("**Controller namespace has changed**");
foreach (keys %{$self->{'controllers'}}) {
$self->_debug("Removing old module: $_");
delete $self->{'controllers'}->{$_};
}
%old_c = ();
%old_i = ();
}
# load the new includes
$self->_reload_modules('c',\%old_i,$config->includes());
foreach (sort keys %{$config->controllers()}) {
unless (exists($old_c{$_})) {
# new module
$self->_debug("Adding new module: $_");
$self->_prep_page_module($_);
}
delete $old_c{$_};
}
foreach (keys %old_c) {
$self->_debug("Removing old module: $_");
delete $self->{'controllers'}->{$_};
}
# If they didn't define their own HTML view, then we'll use our own;
# this is a web server after all :)
unless (defined($self->{'views'}->{'HTML'})) {
require Apache::Voodoo::View::HTML;
$self->{'views'}->{'HTML'} = Apache::Voodoo::View::HTML->new();
}
# Same idea for JSON. What website these days doesn't use even
# a little AJAX?
unless (defined($self->{'views'}->{'JSON'})) {
require Apache::Voodoo::View::JSON;
$self->{'views'}->{'JSON'} = Apache::Voodoo::View::JSON->new();
}
# models get the config and every model except themselves
# to prevent accidental circular references
foreach my $key (keys %{$self->{'models'}}) {
my %m = map { $_ => $self->{models}->{$_} }
grep { $_ ne $key }
keys %{$self->{'models'}};
eval {
$self->{models}->{$key}->init($config->config(),\%m);
};
if ($@) {
warn "$@\n";
$self->{'errors'}++;
}
}
# views get just the config
foreach (values %{$self->{'views'}}) {
eval {
$_->init($config->config());
};
if ($@) {
warn "$@\n";
$self->{'errors'}++;
}
}
# controllers get the config and all the models
foreach (values %{$self->{'controllers'}}) {
eval {
$_->init($config->config(),$self->{'models'});
};
if ($@) {
warn "$@\n";
$self->{'errors'}++;
}
}
eval {
$self->{'session_handler'} = Apache::Voodoo::Session->new($config->config());
};
if ($@) {
warn "$@\n";
$self->{'errors'}++;
}
eval {
$self->{'debug_handler'} = Apache::Voodoo::Debug->new($config->config());
};
if ($@) {
warn "$@\n";
$self->{'errors'}++;
}
}
sub map_uri {
my $self = shift;
my $uri = shift;
if (defined($self->{'controllers'}->{$uri})) {
( run in 1.390 second using v1.01-cache-2.11-cpan-39bf76dae61 )