ASP4

 view release on metacpan or  search on metacpan

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

      return $HandlerCache{"$ENV{DOCUMENT_ROOT}:$uri"} = $page->package;
    }
    else
    {
      return;
    }# end if()
  }# end if()
}# end resolve_request_handler()


sub check_reload
{
  my ($s, $uri) = @_;

  if( $uri =~ m/^\/handlers\// )
  {
    (my $handler = $uri) =~ s/^\/handlers\///;
    $handler =~ s/[^a-z0-9_]/::/gi;
    (my $path = "$handler.pm") =~ s/::/\//g;
    my $filepath = $s->context->config->web->handler_root . "/$path";
    (my $inc_entry = "$handler.pm") =~ s/::/\//g;
    return unless -f $filepath;
    
    if( stat($filepath)->mtime > ($FileTimes{ "$ENV{DOCUMENT_ROOT}:$filepath" } || 0) )
    {
      $FileTimes{ "$ENV{DOCUMENT_ROOT}:$filepath" } = stat($filepath)->mtime;
      $s->_forget_package(
        $inc_entry, $handler
      );
      delete( $HandlerCache{"$ENV{DOCUMENT_ROOT}:$uri"} );
    }# end if()
  }
  else
  {
    my $info = ASP4::PageLoader->discover( script_name => $uri );
    return if $info->{is_static};
    return unless -f $info->{saved_to};
    $FileTimes{ "$ENV{DOCUMENT_ROOT}:$info->{filename}" } ||= 0;
    if( stat($info->{filename})->mtime > $FileTimes{ "$ENV{DOCUMENT_ROOT}:$info->{filename}" } )
    {
      $FileTimes{ "$ENV{DOCUMENT_ROOT}:$info->{filename}" } = stat($info->{filename})->mtime;
      $s->_forget_package(
        $info->{compiled_as}, $info->{package}
      );
      delete( $HandlerCache{"$ENV{DOCUMENT_ROOT}:$uri"} );
    }# end if()
  }# end if()
}# end check_reload()


sub _forget_package
{
  my ($s, $inc, $package) = @_;
  
  # Forcibly forget all about the handler we are going to reload:
  no strict 'refs';
  delete( $INC{ $inc } );
  if( *{"$package\::run"} )
  {
    no warnings;
    *{"$package\::run"} = undef;
    *{"$package\::before_run"} = undef;
    *{"$package\::after_run"} = undef;
  }# end if()
}# end _forget_package()

1;# return true:



( run in 1.020 second using v1.01-cache-2.11-cpan-d80b1682f3f )