Commit | Line | Data |
59aedffc |
1 | package Devel::REPL::Script; |
2 | |
3 | use Moose; |
4 | use Devel::REPL; |
5 | use File::HomeDir; |
6 | use File::Spec; |
7 | use namespace::clean -except => [ qw(meta) ]; |
8 | |
9 | with 'MooseX::Getopt'; |
10 | |
11 | has 'rcfile' => ( |
12 | is => 'ro', isa => 'Str', required => 1, default => sub { 'repl.rc' }, |
13 | ); |
14 | |
15 | has '_repl' => ( |
16 | is => 'ro', isa => 'Devel::REPL', required => 1, |
17 | default => sub { Devel::REPL->new() } |
18 | ); |
19 | |
20 | sub BUILD { |
21 | my ($self) = @_; |
22 | $self->load_rcfile; |
23 | } |
24 | |
25 | sub 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 | |
45 | sub eval_rcdata { |
46 | my $_REPL = $_[0]->_repl; |
47 | eval $_[1]; |
48 | } |
49 | |
50 | sub run { |
51 | my ($self) = @_; |
52 | $self->_repl->run; |
53 | } |
54 | |
55 | sub import { |
56 | my ($class, @opts) = @_; |
57 | return unless (@opts == 1 && $opts[0] eq 'run'); |
58 | $class->new_with_options->run; |
59 | } |
60 | |
61 | 1; |