blob: 3a21dfb27f574ddbb3aed70cb0cc6d89661c0a96 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
package Reply::Plugin::AutoRefresh;
use strict;
use warnings;
# ABSTRACT: automatically refreshes the external code you use
use base 'Reply::Plugin';
use Class::Refresh 0.05 ();
=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.
=cut
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;
|