use 5.006; # pragmas use strict; use warnings; package Test::File::ShareDir::Object::Dist; our $VERSION = '1.001002'; # ABSTRACT: Object Oriented ShareDir creation for distributions our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY use Class::Tiny { inc => sub { require Test::File::ShareDir::Object::Inc; return Test::File::ShareDir::Object::Inc->new(); }, dists => sub { return {}; }, root => sub { require Path::Tiny; return Path::Tiny::path(q[./])->absolute; }, }; use Carp qw( carp ); sub __rcopy { require File::Copy::Recursive; goto \&File::Copy::Recursive::rcopy; } sub dist_names { my ($self) = @_; return keys %{ $self->dists }; } sub dist_share_target_dir { my ( $self, $distname ) = @_; return $self->inc->dist_tempdir->child($distname); } sub dist_share_source_dir { my ( $self, $distname ) = @_; require Path::Tiny; return Path::Tiny::path( $self->dists->{$distname} )->absolute( $self->root ); } sub install_dist { my ( $self, $distname ) = @_; my $source = $self->dist_share_source_dir($distname); my $target = $self->dist_share_target_dir($distname); return __rcopy( $source, $target ); } sub install_all_dists { my ($self) = @_; for my $dist ( $self->dist_names ) { $self->install_dist($dist); } return; } sub add_to_inc { my ($self) = @_; carp 'add_to_inc deprecated since 1.001000, use register'; return $self->register; } sub register { my ($self) = @_; $self->inc->register; return; } sub clear { my ($self) = @_; $self->inc->clear; return; } 1; __END__ =pod =encoding UTF-8 =head1 NAME Test::File::ShareDir::Object::Dist - Object Oriented ShareDir creation for distributions =head1 VERSION version 1.001002 =head1 SYNOPSIS use Test::File::ShareDir::Object::Dist; my $dir = Test::File::ShareDir::Object::Dist->new( root => "some/path", dists => { "Hello-Nurse" => "share/HN" }, ); $dir->install_all_dists; $dir->add_to_inc; =head1 METHODS =head2 C my @names = $instance->dist_names(); Returns the names of all distributions listed in the C set. =head2 C my $dir = $instance->dist_share_target_dir("Dist-Name"); Returns the path where the C will be created for C =head2 C my $dir = $instance->dist_share_source_dir("Dist-Name"); Returns the path where the C will be B I for C =head2 C $instance->install_dist("Dist-Name"); Installs C's C =head2 C $instance->install_all_dists(); Installs all C =head2 C B Use C instead. =head2 C $instance->register(); Adds the C C ( C ) to the global C<@INC> I =head2 C $instance->clear(); Removes the C C ( C ) from the global C<@INC> I =head1 ATTRIBUTES =head2 C A C object. =head2 C A hash of : Dist-Name => "relative/path" =head2 C The origin all paths's are relative to. ( Defaults to C ) =begin MetaPOD::JSON v1.1.0 { "namespace":"Test::File::ShareDir::Object::Dist", "interface":"class", "inherits":"Class::Tiny::Object" } =end MetaPOD::JSON =head1 AUTHOR Kent Fredric =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2017 by Kent Fredric . This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut