basic packaging code
[p5sagit/Devel-REPL.git] / lib / Devel / REPL / Script.pm
CommitLineData
59aedffc 1package Devel::REPL::Script;
2
3use Moose;
4use Devel::REPL;
5use File::HomeDir;
6use File::Spec;
7use namespace::clean -except => [ qw(meta) ];
8
9with 'MooseX::Getopt';
10
11has 'rcfile' => (
12 is => 'ro', isa => 'Str', required => 1, default => sub { 'repl.rc' },
13);
14
15has '_repl' => (
16 is => 'ro', isa => 'Devel::REPL', required => 1,
17 default => sub { Devel::REPL->new() }
18);
19
20sub BUILD {
21 my ($self) = @_;
22 $self->load_rcfile;
23}
24
25sub load_rcfile {
26 my ($self) = @_;
27
28 my $rc_file = $self->rcfile;
29
30 # plain name => ~/.re.pl/${rc_file}
31 if ($rc_file !~ m!/!) {
32 $rc_file = File::Spec->catfile(File::HomeDir->my_home, '.re.pl', $rc_file);
33 }
34
35 if (-r $rc_file) {
36 open RCFILE, '<', $rc_file || die "Couldn't open ${rc_file}: $!";
37 my $rc_data;
38 { local $/; $rc_data = <RCFILE>; }
39 close RCFILE; # Don't care if this fails
40 $self->eval_rcdata($rc_data);
41 warn "Error executing rc file ${rc_file}: $@\n" if $@;
42 }
43}
44
45sub eval_rcdata {
46 my $_REPL = $_[0]->_repl;
47 eval $_[1];
48}
49
50sub run {
51 my ($self) = @_;
52 $self->_repl->run;
53}
54
55sub import {
56 my ($class, @opts) = @_;
57 return unless (@opts == 1 && $opts[0] eq 'run');
58 $class->new_with_options->run;
59}
60
611;