env dir code
[scpubgit/DKit.git] / lib / DX / Lib / FS / Role / RunOn.pm
1 package DX::Lib::FS::Role::RunOn;
2
3 use DX::Lib::FS::Guts;
4 use Moo::Role;
5
6 my $local = DX::Lib::FS::Guts->new;
7 my %conn_cache; # HEINOUS
8
9 sub _call_guts {
10   my ($self, $type, @args) = @_;
11   my ($on, $path) = $self->path =~ /^(?:([^\/]+):)?(.*)$/;
12   my $guts = $on ? $self->_conn_to($on) : $local;
13   $guts->$type($path, @args);
14 }
15
16 sub _conn_to {
17   my ($self, $on) = @_;
18   $conn_cache{$on} ||= do {
19     require Object::Remote;
20     DX::Lib::FS::Guts->new::on($on);
21   };
22 }
23
24 1;