ASP4

 view release on metacpan or  search on metacpan

lib/ASP4/Config.pm  view on Meta::CPAN


package ASP4::Config;

use strict;
use warnings 'all';
use Carp 'confess';
use base 'ASP4::ConfigNode';


sub new
{
  my ($class, $ref, $root) = @_;
  
  my $s = $class->SUPER::new( $ref );
  
  $s->init_server_root( $root );
  
  $s->_init_inc();
  
  my $vars = $s->system->env_vars;
  foreach my $var ( keys %$vars )
  {
    $ENV{$var} = $vars->{$var};
  }# end foreach()
  
  map { $s->load_class( $_ ) } $s->system->load_modules;
  
  return $s;
}# end new()


sub _init_inc
{
  my $s = shift;
  
  my %saw = map { $_ => 1 } @INC;
  my $web = $s->web;
  push @INC, grep { ! $saw{$_}++ } ( $s->system->libs, $web->handler_root, $web->page_cache_root );
}# end _init_inc()


sub init_server_root
{
  my ($s, $root) = @_;
  
  my $project_root = (sub{
    my @parts = split /\//, $root;
    pop(@parts);
    join '/', @parts;
  })->();
  $s->{web}->{project_root} = $project_root;
  no warnings 'uninitialized';
  foreach( @{ $s->{system}->{libs} } )
  {
    $_ =~ s/\@ServerRoot\@/$root/;
    $_ =~ s/\@ProjectRoot\@/$project_root/;
  }# end foreach()
  
  my $settings = $s->{system}->{settings};
  foreach( keys %$settings )
  {
    $settings->{$_} =~ s/\@ServerRoot\@/$root/;
    $settings->{$_} =~ s/\@ProjectRoot\@/$project_root/;
  }# end foreach()
  
  foreach my $key (qw/ application handler www page_cache /)
  {
    $s->{web}->{"$key\_root"} =~ s/\@ServerRoot\@/$root/;
    $s->{web}->{"$key\_root"} =~ s/\@ProjectRoot\@/$project_root/;
    $s->{web}->{"$key\_root"} =~ s{\\\\}{\\}g;
  }# end foreach()
  $s->{web}->{project_root} = $project_root;
  
  # Just in case we're dealing with a file-based db like SQLite:



( run in 2.108 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )