summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-06-25 17:09:46 -0400
committerJesse Luehrs <doy@tozt.net>2013-06-25 17:09:46 -0400
commitec23bd9a3a9a2a972eff470fd424f2616703e865 (patch)
tree5a50dc92706e3d8a450365a2378e48831e466aaf
parentfafc32ebd2af52f6576c247e7d989bad13da2c9b (diff)
downloadreply-ec23bd9a3a9a2a972eff470fd424f2616703e865.tar.gz
reply-ec23bd9a3a9a2a972eff470fd424f2616703e865.zip
use the new track_require functionality in the AutoRefresh plugin
-rw-r--r--dist.ini2
-rw-r--r--lib/Reply/Plugin/AutoRefresh.pm30
2 files changed, 30 insertions, 2 deletions
diff --git a/dist.ini b/dist.ini
index 69d56a3..46aa79f 100644
--- a/dist.ini
+++ b/dist.ini
@@ -29,7 +29,7 @@ skip = ^Proc::InvokeEditor$
[Prereqs / RuntimeRecommends]
App::Nopaste = 0
-Class::Refresh = 0.04
+Class::Refresh = 0.05
Data::Dump = 0
Data::Printer = 0
Proc::InvokeEditor = 0
diff --git a/lib/Reply/Plugin/AutoRefresh.pm b/lib/Reply/Plugin/AutoRefresh.pm
index 06e4550..3a21dfb 100644
--- a/lib/Reply/Plugin/AutoRefresh.pm
+++ b/lib/Reply/Plugin/AutoRefresh.pm
@@ -4,12 +4,13 @@ use warnings;
# ABSTRACT: automatically refreshes the external code you use
use base 'Reply::Plugin';
-use Class::Refresh 0.04;
+use Class::Refresh 0.05 ();
=head1 SYNOPSIS
; .replyrc
[AutoRefresh]
+ track_require = 1
=head1 DESCRIPTION
@@ -17,8 +18,35 @@ 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) = @_;