package Catalyst::Engine::HTTP::Restarter;
+use Moose;
+use Moose::Util qw/find_meta/;
+use namespace::clean -except => 'meta';
+
+extends 'Catalyst::Engine::HTTP';
-use strict;
-use warnings;
-use base 'Catalyst::Engine::HTTP';
use Catalyst::Engine::HTTP::Restarter::Watcher;
-use NEXT;
-sub run {
+around run => sub {
+ my $orig = shift;
my ( $self, $class, $port, $host, $options ) = @_;
$options ||= {};
close STDIN;
close STDOUT;
+ # Avoid "Setting config after setup" error restarting MyApp.pm
+ $class->setup_finished(0);
+ # Best effort if we can't trap compiles..
+ $self->_make_components_mutable($class)
+ if !Catalyst::Engine::HTTP::Restarter::Watcher::DETECT_PACKAGE_COMPILATION;
+
my $watcher = Catalyst::Engine::HTTP::Restarter::Watcher->new(
- directory => File::Spec->catdir( $FindBin::Bin, '..' ),
+ directory => (
+ $options->{restart_directory} ||
+ File::Spec->catdir( $FindBin::Bin, '..' )
+ ),
+ follow_symlinks => $options->{follow_symlinks},
regex => $options->{restart_regex},
delay => $options->{restart_delay},
);
}
}
- return $self->NEXT::run( $class, $port, $host, $options );
+ return $self->$orig( $class, $port, $host, $options );
+};
+
+# Naive way of trying to avoid Moose blowing up when you re-require components
+# which have been made immutable.
+sub _make_components_mutable {
+ my ($self, $class) = @_;
+
+ my @metas = map { find_meta($_) } ($class, map { blessed($_) } values %{ $class->components });
+
+ foreach my $meta (@metas) {
+ $meta->make_mutable if $meta->is_immutable;
+ }
}
1;
=head1 METHODS
-=over 4
-
-=item run
-
-=back
+=head2 run
=head1 SEE ALSO
=head1 AUTHORS
-Sebastian Riedel, <sri@cpan.org>
-
-Dan Kubb, <dan.kubb-cpan@onautopilot.com>
-
-Andy Grundman, <andy@hybridized.org>
+Catalyst Contributors, see Catalyst.pm
=head1 THANKS