package Reply::Plugin::AutoRefresh;
our $AUTHORITY = 'cpan:DOY';
$Reply::Plugin::AutoRefresh::VERSION = '0.42';
use strict;
use warnings;
# ABSTRACT: automatically refreshes the external code you use
use base 'Reply::Plugin';
use Class::Refresh 0.05 ();
sub new {
my $class = shift;
my %opts = @_;
$opts{track_require} = 1
unless defined $opts{track_require};
Class::Refresh->import(track_require => $opts{track_require});
# so that when we load things after this plugin, they get a copy of
# Module::Runtime which has the call to require() rebound to our overridden
# copy. if this plugin is loaded first, these should be the only
# modules loaded so far which load arbitrary user-specified modules.
Class::Refresh->refresh_module('Module::Runtime');
Class::Refresh->refresh_module('base');
return $class->SUPER::new(@_);
}
sub compile {
my $self = shift;
my ($next, @args) = @_;
Class::Refresh->refresh;
$next->(@args);
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Reply::Plugin::AutoRefresh - automatically refreshes the external code you use
=head1 VERSION
version 0.42
=head1 SYNOPSIS
; .replyrc
[AutoRefresh]
track_require = 1
=head1 DESCRIPTION
This plugin automatically refreshes all loaded modules before every
statement execution. It's useful if you are working on a module in
a file and you want the changes to automatically be loaded in Reply.
It takes a single argument, C<track_require>, which defaults to true.
If this option is set, the C<track_require> functionality from
L<Class::Refresh> will be enabled.
Note that to use the C<track_require> functionality, this module must
be loaded as early as possible (preferably first), so that other
modules correctly see the global override.
=head1 AUTHOR
Jesse Luehrs <doy@tozt.net>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2016 by Jesse Luehrs.
This is free software, licensed under:
The MIT (X11) License
=cut