Initial Commit
This commit is contained in:
448
database/perl/vendor/lib/Test/File/ShareDir.pm
vendored
Normal file
448
database/perl/vendor/lib/Test/File/ShareDir.pm
vendored
Normal file
@@ -0,0 +1,448 @@
|
||||
use 5.006; # pragmas
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
package Test::File::ShareDir;
|
||||
|
||||
our $VERSION = '1.001002';
|
||||
|
||||
# ABSTRACT: Create a Fake ShareDir for your modules for testing.
|
||||
|
||||
our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
use File::ShareDir 1.00 qw();
|
||||
use Exporter qw();
|
||||
use Test::File::ShareDir::Utils qw( extract_dashes );
|
||||
use Carp qw( croak );
|
||||
use parent qw( Exporter );
|
||||
|
||||
our @EXPORT_OK = qw( with_dist_dir with_module_dir );
|
||||
|
||||
sub import {
|
||||
my ( $package, @args ) = @_;
|
||||
|
||||
my ( @imports, %params );
|
||||
|
||||
# ->import( { }, qw( imports ) )
|
||||
if ( 'HASH' eq ref $args[0] ) {
|
||||
%params = %{ shift @args };
|
||||
@imports = @args;
|
||||
}
|
||||
else {
|
||||
# ->import( -arg => value, -arg => value, @imports );
|
||||
while (@args) {
|
||||
if ( $args[0] =~ /\A-(.*)\z/msx ) {
|
||||
$params{ $args[0] } = $args[1];
|
||||
splice @args, 0, 2, ();
|
||||
next;
|
||||
}
|
||||
push @imports, shift @args;
|
||||
}
|
||||
}
|
||||
|
||||
if ( keys %params ) {
|
||||
require Test::File::ShareDir::TempDirObject;
|
||||
|
||||
my $tempdir_object = Test::File::ShareDir::TempDirObject->new( \%params );
|
||||
|
||||
for my $module ( $tempdir_object->_module_names ) {
|
||||
$tempdir_object->_install_module($module);
|
||||
}
|
||||
|
||||
for my $dist ( $tempdir_object->_dist_names ) {
|
||||
$tempdir_object->_install_dist($dist);
|
||||
}
|
||||
|
||||
unshift @INC, $tempdir_object->_tempdir->stringify;
|
||||
|
||||
}
|
||||
if (@imports) {
|
||||
$package->export_to_level( 1, undef, @imports );
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
# This code is just to make sure any guard objects
|
||||
# are not lexically visible to the sub they contain creating a self reference.
|
||||
sub _mk_clearer {
|
||||
my ($clearee) = @_;
|
||||
return sub { $clearee->clear };
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub with_dist_dir {
|
||||
my ( $config, $code ) = @_;
|
||||
if ( 'CODE' ne ( ref $code || q{} ) ) {
|
||||
croak( 'CodeRef expected at end of with_dist_dir(), ' . ( ref $code || qq{scalar="$code"} ) . ' found' );
|
||||
}
|
||||
require Test::File::ShareDir::Object::Dist;
|
||||
require Scope::Guard;
|
||||
my $dist_object = Test::File::ShareDir::Object::Dist->new( extract_dashes( 'dists', $config ) );
|
||||
$dist_object->install_all_dists();
|
||||
$dist_object->register();
|
||||
my $guard = Scope::Guard->new( _mk_clearer($dist_object) ); ## no critic (Variables::ProhibitUnusedVarsStricter)
|
||||
return $code->();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub with_module_dir {
|
||||
my ( $config, $code ) = @_;
|
||||
if ( 'CODE' ne ( ref $code || q{} ) ) {
|
||||
croak( 'CodeRef expected at end of with_module_dir(), ' . ( ref $code || qq{scalar="$code"} ) . ' found' );
|
||||
}
|
||||
|
||||
require Test::File::ShareDir::Object::Module;
|
||||
require Scope::Guard;
|
||||
|
||||
my $module_object = Test::File::ShareDir::Object::Module->new( extract_dashes( 'modules', $config ) );
|
||||
|
||||
$module_object->install_all_modules();
|
||||
$module_object->register();
|
||||
my $guard = Scope::Guard->new( _mk_clearer($module_object) ); ## no critic (Variables::ProhibitUnusedVarsStricter)
|
||||
|
||||
return $code->();
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Test::File::ShareDir - Create a Fake ShareDir for your modules for testing.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 1.001002
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Test::More;
|
||||
|
||||
# use FindBin; optional
|
||||
|
||||
use Test::File::ShareDir
|
||||
# -root => "$FindBin::Bin/../" # optional,
|
||||
-share => {
|
||||
-module => { 'My::Module' => 'share/MyModule' }
|
||||
-dist => { 'My-Dist' => 'share/somefolder' }
|
||||
};
|
||||
|
||||
use My::Module;
|
||||
|
||||
use File::ShareDir qw( module_dir dist_dir );
|
||||
|
||||
module_dir( 'My::Module' ) # dir with files from $dist/share/MyModule
|
||||
|
||||
dist_dir( 'My-Dist' ) # dir with files from $dist/share/somefolder
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
C<Test::File::ShareDir> is some low level plumbing to enable a distribution to perform tests while consuming its own C<share>
|
||||
directories in a manner similar to how they will be once installed.
|
||||
|
||||
This allows C<File::ShareDir> to see the I<latest> version of content instead of simply whatever is installed on whichever target
|
||||
system you happen to be testing on.
|
||||
|
||||
B<Note:> This module only has support for creating 'new' style share dirs and are NOT compatible with old File::ShareDirs.
|
||||
|
||||
For this reason, unless you have File::ShareDir 1.00 or later installed, this module will not be usable by you.
|
||||
|
||||
=head1 SIMPLE INTERFACE
|
||||
|
||||
Starting with version C<0.4.0>, there are a few extra interfaces you can use.
|
||||
|
||||
These will probably be more useful, and easier to grok, because they don't have a layer of
|
||||
indirection in order to simultaneously support both C<Module> and C<Dist> C<ShareDir>'s.
|
||||
|
||||
=head2 Simple Exporter Interfaces
|
||||
|
||||
=head3 C<Test::File::ShareDir::Dist>
|
||||
|
||||
L<< C<Test::File::ShareDir::Dist>|Test::File::ShareDir::Dist >> provides a simple export interface
|
||||
for making C<TempDir> C<ShareDir>'s from a given path:
|
||||
|
||||
use Test::File::ShareDir::Dist { "Dist-Name" => "share/" };
|
||||
|
||||
This will automatically create a C<ShareDir> for C<Dist-Name> in a C<TempDir> based on the contents of C<CWD/share/>
|
||||
|
||||
See L<< C<Test::File::ShareDir::Dist>|Test::File::ShareDir::Dist >> for details.
|
||||
|
||||
=head3 C<Test::File::ShareDir::Module>
|
||||
|
||||
L<< C<Test::File::ShareDir::Module>|Test::File::ShareDir::Module >> provides a simple export interface
|
||||
for making C<TempDir> C<ShareDir>'s from a given path:
|
||||
|
||||
use Test::File::ShareDir::Module { "Module::Name" => "share/" };
|
||||
|
||||
This will automatically create a C<ShareDir> for C<Module::Name> in a C<TempDir> based on the contents of C<CWD/share/>
|
||||
|
||||
See L<< C<Test::File::ShareDir::Module>|Test::File::ShareDir::Module >> for details.
|
||||
|
||||
=head2 Simple Object Oriented Interfaces
|
||||
|
||||
=head3 C<Test::File::ShareDir::Object::Dist>
|
||||
|
||||
L<< C<Test::File::ShareDir::Object::Dist>|Test::File::ShareDir::Object::Dist >> provides a simple object oriented interface for
|
||||
making C<TempDir> C<ShareDir>'s from a given path:
|
||||
|
||||
use Test::File::ShareDir::Object::Dist;
|
||||
|
||||
my $obj = Test::File::ShareDir::Object::Dist->new( dists => { "Dist-Name" => "share/" } );
|
||||
$obj->install_all_dists;
|
||||
$obj->register;
|
||||
|
||||
This will automatically create a C<ShareDir> for C<Dist-Name> in a C<TempDir> based on the contents of C<CWD/share/>
|
||||
|
||||
See L<< C<Test::File::ShareDir::Object::Dist>|Test::File::ShareDir::Object::Dist >> for details.
|
||||
|
||||
=head3 C<Test::File::ShareDir::Object::Module>
|
||||
|
||||
L<< C<Test::File::ShareDir::Object::Module>|Test::File::ShareDir::Object::Module >> provides a simple object oriented interface
|
||||
for making C<TempDir> C<ShareDir>'s from a given path:
|
||||
|
||||
use Test::File::ShareDir::Object::Module;
|
||||
|
||||
my $obj = Test::File::ShareDir::Object::Module->new( modules => { "Module::Name" => "share/" } );
|
||||
$obj->install_all_modules;
|
||||
$obj->register;
|
||||
|
||||
This will automatically create a C<ShareDir> for C<Module::Name> in a C<TempDir> based on the contents of C<CWD/share/>
|
||||
|
||||
See L<< C<Test::File::ShareDir::Object::Module>|Test::File::ShareDir::Object::Module >> for details.
|
||||
|
||||
=head1 SCOPE LIMITED UTILITIES
|
||||
|
||||
C<Test::File::ShareDir> provides a few utility functions to aide in temporarily adjusting C<ShareDir> behavior.
|
||||
|
||||
use Test::File::ShareDir qw( with_dist_dir with_module_dir );
|
||||
|
||||
with_dist_dir({ 'Dist-Name' => 'Some/Path' }, sub {
|
||||
# dist_dir() now behaves differently here
|
||||
});
|
||||
with_module_dir({ 'Module::Name' => 'Some/Path' }, sub {
|
||||
# module_dir() now behaves differently here
|
||||
});
|
||||
|
||||
See L<< C<EXPORTABLE FUNCTIONS>|/EXPORTABLE FUNCTIONS >> for details.
|
||||
|
||||
=head1 IMPORTING
|
||||
|
||||
Since C<1.001000>, there are 2 ways of passing arguments to C<import>
|
||||
|
||||
use Foo { -root => ... options }, qw( functions to import );
|
||||
use Foo -optname => option, -optname => option, qw( functions to import );
|
||||
|
||||
Both should work, but the former might be less prone to accidental issues.
|
||||
|
||||
=head2 IMPORT OPTIONS
|
||||
|
||||
=head3 -root
|
||||
|
||||
This parameter is the prefix the other paths are relative to.
|
||||
|
||||
If this parameter is not specified, it defaults to the Current Working Directory ( C<CWD> ).
|
||||
|
||||
In versions prior to C<0.3.0>, this value was mandatory.
|
||||
|
||||
The rationale behind using C<CWD> as the default value is as follows.
|
||||
|
||||
=over 4
|
||||
|
||||
=item * Most users of this module are likely to be using it to test distributions
|
||||
|
||||
=item * Most users of this module will be using it in C<$project/t/> to load files from C<$project/share/>
|
||||
|
||||
=item * Most C<CPAN> tools run tests with C<CWD> = $project
|
||||
|
||||
=back
|
||||
|
||||
Therefor, defaulting to C<CWD> is a reasonably sane default for most people, but where it is not it can
|
||||
still be overridden.
|
||||
|
||||
-root => "$FindBin::Bin/../" # resolves to project root from t/ regardless of Cwd.
|
||||
|
||||
=head3 -share
|
||||
|
||||
This parameter is mandatory, and contains a C<hashref> containing the data that explains what directories you want shared.
|
||||
|
||||
-share => { ..... }
|
||||
|
||||
=head4 -module
|
||||
|
||||
C<-module> contains a C<hashref> mapping Module names to path names for module_dir style share dirs.
|
||||
|
||||
-share => {
|
||||
-module => { 'My::Module' => 'share/mymodule/', }
|
||||
}
|
||||
|
||||
...
|
||||
|
||||
module_dir('My::Module')
|
||||
|
||||
Notedly, it is a C<hashref>, which means there is a limitation of one share dir per module. This is simply because having more
|
||||
than one share dir per module makes no sense at all.
|
||||
|
||||
=head4 -dist
|
||||
|
||||
C<-dist> contains a C<hashref> mapping Distribution names to path names for dist_dir style share dirs. The same limitation
|
||||
applied to C<-module> applies here.
|
||||
|
||||
-share => {
|
||||
-dist => { 'My-Dist' => 'share/mydist' }
|
||||
}
|
||||
...
|
||||
dist_dir('My-Dist')
|
||||
|
||||
=head1 EXPORTABLE FUNCTIONS
|
||||
|
||||
=head2 with_dist_dir
|
||||
|
||||
Sets up a C<ShareDir> environment with limited context.
|
||||
|
||||
# with_dist_dir(\%config, \&sub);
|
||||
with_dist_dir( { 'Dist-Name' => 'share/' } => sub {
|
||||
|
||||
# File::ShareDir resolves to a copy of share/ in this context.
|
||||
|
||||
} );
|
||||
|
||||
C<%config> can contain anything L<< C<Test::File::ShareDir::Dist>|Test::File::ShareDir::Dist >> accepts.
|
||||
|
||||
=over 4
|
||||
|
||||
=item C<-root>: Defaults to C<$CWD>
|
||||
|
||||
=item C<I<$distName>>: Declare C<$distName>'s C<ShareDir>.
|
||||
|
||||
=back
|
||||
|
||||
I<Since 1.001000>
|
||||
|
||||
=head2 with_module_dir
|
||||
|
||||
Sets up a C<ShareDir> environment with limited context.
|
||||
|
||||
# with_module_dir(\%config, \&sub);
|
||||
with_module_dir( { 'Module::Name' => 'share/' } => sub {
|
||||
|
||||
# File::ShareDir resolves to a copy of share/ in this context.
|
||||
|
||||
} );
|
||||
|
||||
C<%config> can contain anything L<< C<Test::File::ShareDir::Module>|Test::File::ShareDir::Module >> accepts.
|
||||
|
||||
=over 4
|
||||
|
||||
=item C<-root>: Defaults to C<$CWD>
|
||||
|
||||
=item C<I<$moduleName>>: Declare C<$moduleName>'s C<ShareDir>.
|
||||
|
||||
=back
|
||||
|
||||
I<Since 1.001000>
|
||||
|
||||
=begin MetaPOD::JSON v1.1.0
|
||||
|
||||
{
|
||||
"namespace":"Test::File::ShareDir",
|
||||
"interface":"exporter"
|
||||
}
|
||||
|
||||
|
||||
=end MetaPOD::JSON
|
||||
|
||||
=head1 THANKS
|
||||
|
||||
Thanks to the C<#distzilla> crew for ideas,suggestions, code review and debugging, even though not all of it made it into releases.
|
||||
|
||||
=for stopwords DOLMEN ETHER HAARG RJBS
|
||||
|
||||
=over 4
|
||||
|
||||
=item * L<DOLMEN|cpan:///author/dolmen>
|
||||
|
||||
=item * L<ETHER|cpan:///author/ether>
|
||||
|
||||
=item * L<HAARG|cpan:///author/haarg>
|
||||
|
||||
=item * L<RJBS|cpan:///author/rjbs>
|
||||
|
||||
=back
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kent Fredric <kentnl@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.
|
||||
|
||||
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
|
||||
94
database/perl/vendor/lib/Test/File/ShareDir/Dist.pm
vendored
Normal file
94
database/perl/vendor/lib/Test/File/ShareDir/Dist.pm
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
use 5.006; # pragmas
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
package Test::File::ShareDir::Dist;
|
||||
|
||||
our $VERSION = '1.001002';
|
||||
|
||||
# ABSTRACT: Simplified dist oriented ShareDir tester
|
||||
|
||||
our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
|
||||
|
||||
use File::ShareDir 1.00 qw();
|
||||
use Test::File::ShareDir::Utils qw( extract_dashes );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub import {
|
||||
my ( undef, $arg ) = @_;
|
||||
|
||||
if ( not ref $arg or 'HASH' ne ref $arg ) {
|
||||
require Carp;
|
||||
return Carp::croak q[Must pass a hashref];
|
||||
}
|
||||
|
||||
my %input_config = %{$arg};
|
||||
|
||||
require Test::File::ShareDir::Object::Dist;
|
||||
|
||||
my $dist_object = Test::File::ShareDir::Object::Dist->new(extract_dashes('dists', \%input_config ));
|
||||
$dist_object->install_all_dists();
|
||||
$dist_object->register();
|
||||
return 1;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Test::File::ShareDir::Dist - Simplified dist oriented ShareDir tester
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 1.001002
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Test::File::ShareDir::Dist {
|
||||
'-root' => 'some/root/path',
|
||||
'Dist-Zilla-Plugin-Foo' => 'share/DZPF',
|
||||
};
|
||||
|
||||
C<-root> is optional, and defaults to C<cwd>
|
||||
|
||||
B<NOTE:> There's a bug prior to 5.18 with C<< use Foo { -key => } >>, so for backwards compatibility, make sure you either quote
|
||||
the key: C<< use Foo { '-key' => } >>, or make it the non-first key.
|
||||
|
||||
=begin MetaPOD::JSON v1.1.0
|
||||
|
||||
{
|
||||
"namespace":"Test::File::ShareDir::Dist",
|
||||
"interface":"exporter"
|
||||
}
|
||||
|
||||
|
||||
=end MetaPOD::JSON
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kent Fredric <kentnl@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.
|
||||
|
||||
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
|
||||
94
database/perl/vendor/lib/Test/File/ShareDir/Module.pm
vendored
Normal file
94
database/perl/vendor/lib/Test/File/ShareDir/Module.pm
vendored
Normal file
@@ -0,0 +1,94 @@
|
||||
use 5.006; # pragmas
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
package Test::File::ShareDir::Module;
|
||||
|
||||
our $VERSION = '1.001002';
|
||||
|
||||
# ABSTRACT: Simplified module oriented ShareDir tester
|
||||
|
||||
our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
|
||||
|
||||
use File::ShareDir 1.00 qw();
|
||||
use Test::File::ShareDir::Utils qw( extract_dashes );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub import {
|
||||
my ( undef, $arg ) = @_;
|
||||
|
||||
if ( not ref $arg or 'HASH' ne ref $arg ) {
|
||||
require Carp;
|
||||
return Carp::croak q[Must pass a hashref];
|
||||
}
|
||||
|
||||
my %input_config = %{$arg};
|
||||
|
||||
require Test::File::ShareDir::Object::Module;
|
||||
|
||||
my $module_object = Test::File::ShareDir::Object::Module->new(extract_dashes('modules', \%input_config ));
|
||||
$module_object->install_all_modules();
|
||||
$module_object->register();
|
||||
return 1;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Test::File::ShareDir::Module - Simplified module oriented ShareDir tester
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 1.001002
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Test::File::ShareDir::Module {
|
||||
'-root' => "some/root/path",
|
||||
'Module::Foo' => "share/ModuleFoo",
|
||||
};
|
||||
|
||||
C<-root> is optional, and defaults to C<cwd>
|
||||
|
||||
B<NOTE:> There's a bug prior to 5.18 with C<< use Foo { -key => } >>, so for backwards compatibility, make sure you either quote
|
||||
the key: C<< use Foo { '-key' => } >>, or make it the non-first key.
|
||||
|
||||
=begin MetaPOD::JSON v1.1.0
|
||||
|
||||
{
|
||||
"namespace":"Test::File::ShareDir::Module",
|
||||
"interface":"exporter"
|
||||
}
|
||||
|
||||
|
||||
=end MetaPOD::JSON
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kent Fredric <kentnl@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.
|
||||
|
||||
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
|
||||
298
database/perl/vendor/lib/Test/File/ShareDir/Object/Dist.pm
vendored
Normal file
298
database/perl/vendor/lib/Test/File/ShareDir/Object/Dist.pm
vendored
Normal file
@@ -0,0 +1,298 @@
|
||||
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<dist_names>
|
||||
|
||||
my @names = $instance->dist_names();
|
||||
|
||||
Returns the names of all distributions listed in the C<dists> set.
|
||||
|
||||
=head2 C<dist_share_target_dir>
|
||||
|
||||
my $dir = $instance->dist_share_target_dir("Dist-Name");
|
||||
|
||||
Returns the path where the C<ShareDir> will be created for C<Dist-Name>
|
||||
|
||||
=head2 C<dist_share_source_dir>
|
||||
|
||||
my $dir = $instance->dist_share_source_dir("Dist-Name");
|
||||
|
||||
Returns the path where the C<ShareDir> will be B<COPIED> I<FROM> for C<Dist-Name>
|
||||
|
||||
=head2 C<install_dist>
|
||||
|
||||
$instance->install_dist("Dist-Name");
|
||||
|
||||
Installs C<Dist-Name>'s C<ShareDir>
|
||||
|
||||
=head2 C<install_all_dists>
|
||||
|
||||
$instance->install_all_dists();
|
||||
|
||||
Installs all C<dist_names>
|
||||
|
||||
=head2 C<add_to_inc>
|
||||
|
||||
B<DEPRECATED:> Use C<register> instead.
|
||||
|
||||
=head2 C<register>
|
||||
|
||||
$instance->register();
|
||||
|
||||
Adds the C<Tempdir> C<ShareDir> ( C<inc> ) to the global C<@INC>
|
||||
|
||||
I<Since 1.001000>
|
||||
|
||||
=head2 C<clear>
|
||||
|
||||
$instance->clear();
|
||||
|
||||
Removes the C<Tempdir> C<ShareDir> ( C<inc> ) from the global C<@INC>
|
||||
|
||||
I<Since 1.001000>
|
||||
|
||||
=head1 ATTRIBUTES
|
||||
|
||||
=head2 C<inc>
|
||||
|
||||
A C<Test::File::ShareDir::Object::Inc> object.
|
||||
|
||||
=head2 C<dists>
|
||||
|
||||
A hash of :
|
||||
|
||||
Dist-Name => "relative/path"
|
||||
|
||||
=head2 C<root>
|
||||
|
||||
The origin all paths's are relative to.
|
||||
|
||||
( Defaults to C<cwd> )
|
||||
|
||||
=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 <kentnl@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.
|
||||
|
||||
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
|
||||
209
database/perl/vendor/lib/Test/File/ShareDir/Object/Inc.pm
vendored
Normal file
209
database/perl/vendor/lib/Test/File/ShareDir/Object/Inc.pm
vendored
Normal file
@@ -0,0 +1,209 @@
|
||||
use 5.006; # pragmas
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
package Test::File::ShareDir::Object::Inc;
|
||||
|
||||
our $VERSION = '1.001002';
|
||||
|
||||
# ABSTRACT: Shared tempdir object code to inject into @INC
|
||||
|
||||
our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
my @cache;
|
||||
|
||||
use Class::Tiny {
|
||||
tempdir => sub {
|
||||
require Path::Tiny;
|
||||
my $dir = Path::Tiny::tempdir( CLEANUP => 1 );
|
||||
push @cache, $dir; # explicit keepalive
|
||||
return $dir;
|
||||
},
|
||||
module_tempdir => sub {
|
||||
my ($self) = @_;
|
||||
my $dir = $self->tempdir->child('auto/share/module');
|
||||
$dir->mkpath();
|
||||
return $dir->absolute;
|
||||
},
|
||||
dist_tempdir => sub {
|
||||
my ($self) = @_;
|
||||
my $dir = $self->tempdir->child('auto/share/dist');
|
||||
$dir->mkpath();
|
||||
return $dir->absolute;
|
||||
},
|
||||
};
|
||||
use Carp qw( carp );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub add_to_inc {
|
||||
my ($self) = @_;
|
||||
carp 'add_to_inc deprecated sice 1.001000, use register instead';
|
||||
return $self->register;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub register {
|
||||
my ($self) = @_;
|
||||
unshift @INC, $self->tempdir->stringify;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub clear {
|
||||
my ($self) = @_;
|
||||
## no critic (Variables::RequireLocalizedPunctuationVars)
|
||||
@INC = grep { ref or $_ ne $self->tempdir->stringify } @INC;
|
||||
return;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Test::File::ShareDir::Object::Inc - Shared tempdir object code to inject into @INC
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 1.001002
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Test::File::ShareDir::Object::Inc;
|
||||
|
||||
my $inc = Test::File::ShareDir::Object::Inc->new();
|
||||
|
||||
$inc->tempdir() # add files to here
|
||||
|
||||
$inc->module_tempdir() # or here
|
||||
|
||||
$inc->dist_tempdir() # or here
|
||||
|
||||
$inc->add_to_inc;
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
This class doesn't do very much on its own.
|
||||
|
||||
It simply exists to facilitate C<tempdir> creation,
|
||||
and the injection of those C<tempdir>'s into C<@INC>
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 C<add_to_inc>
|
||||
|
||||
B<DEPRECATED:> Use C<register> instead.
|
||||
|
||||
=head2 C<register>
|
||||
|
||||
$instance->register;
|
||||
|
||||
Allows this C<Inc> to be used.
|
||||
|
||||
Presently, this injects the associated C<tempdir> into C<@INC>
|
||||
|
||||
I<Since 1.001000>
|
||||
|
||||
=head2 C<clear>
|
||||
|
||||
$instance->clear();
|
||||
|
||||
Prevents this C<Inc> from being used.
|
||||
|
||||
Presently, this removes the C<tempdir> from C<@INC>
|
||||
|
||||
I<Since 1.001000>
|
||||
|
||||
=head1 ATTRIBUTES
|
||||
|
||||
=head2 C<tempdir>
|
||||
|
||||
A path to a C<tempdir> of some description.
|
||||
|
||||
=head2 C<module_tempdir>
|
||||
|
||||
The C<module> C<ShareDir> base directory within the C<tempdir>
|
||||
|
||||
=head2 C<dist_tempdir>
|
||||
|
||||
The C<dist> C<ShareDir> base directory within the C<tempdir>
|
||||
|
||||
=begin MetaPOD::JSON v1.1.0
|
||||
|
||||
{
|
||||
"namespace":"Test::File::ShareDir::Object::Inc",
|
||||
"interface":"class",
|
||||
"inherits":"Class::Tiny::Object"
|
||||
}
|
||||
|
||||
|
||||
=end MetaPOD::JSON
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kent Fredric <kentnl@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.
|
||||
|
||||
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
|
||||
301
database/perl/vendor/lib/Test/File/ShareDir/Object/Module.pm
vendored
Normal file
301
database/perl/vendor/lib/Test/File/ShareDir/Object/Module.pm
vendored
Normal file
@@ -0,0 +1,301 @@
|
||||
use 5.006; # pragmas
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
package Test::File::ShareDir::Object::Module;
|
||||
|
||||
our $VERSION = '1.001002';
|
||||
|
||||
# ABSTRACT: Object Oriented ShareDir creation for modules
|
||||
|
||||
our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
use Class::Tiny {
|
||||
inc => sub {
|
||||
require Test::File::ShareDir::Object::Inc;
|
||||
return Test::File::ShareDir::Object::Inc->new();
|
||||
},
|
||||
modules => 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 module_names {
|
||||
my ( $self, ) = @_;
|
||||
return keys %{ $self->modules };
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub module_share_target_dir {
|
||||
my ( $self, $module ) = @_;
|
||||
|
||||
$module =~ s/::/-/msxg;
|
||||
|
||||
return $self->inc->module_tempdir->child($module);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub module_share_source_dir {
|
||||
my ( $self, $module ) = @_;
|
||||
require Path::Tiny;
|
||||
return Path::Tiny::path( $self->modules->{$module} )->absolute( $self->root );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub install_module {
|
||||
my ( $self, $module ) = @_;
|
||||
my $source = $self->module_share_source_dir($module);
|
||||
my $target = $self->module_share_target_dir($module);
|
||||
return __rcopy( $source, $target );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub install_all_modules {
|
||||
my ($self) = @_;
|
||||
for my $module ( $self->module_names ) {
|
||||
$self->install_module($module);
|
||||
}
|
||||
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::Module - Object Oriented ShareDir creation for modules
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 1.001002
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Test::File::ShareDir::Object::Module;
|
||||
|
||||
my $dir = Test::File::ShareDir::Object::Module->new(
|
||||
root => "some/path",
|
||||
modules => {
|
||||
"Hello::Nurse" => "share/HN"
|
||||
},
|
||||
);
|
||||
|
||||
$dir->install_all_modules;
|
||||
$dir->add_to_inc;
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 C<module_names>
|
||||
|
||||
my @names = $instance->module_names();
|
||||
|
||||
Returns the names of all modules listed in the C<modules> set.
|
||||
|
||||
=head2 C<module_share_target_dir>
|
||||
|
||||
my $dir = $instance->module_share_target_dir("Module::Name");
|
||||
|
||||
Returns the path where the C<ShareDir> will be created for C<Module::Name>
|
||||
|
||||
=head2 C<module_share_source_dir>
|
||||
|
||||
my $dir = $instance->module_share_source_dir("Module::Name");
|
||||
|
||||
Returns the path where the C<ShareDir> will be B<COPIED> I<FROM> for C<Module::Name>
|
||||
|
||||
=head2 C<install_module>
|
||||
|
||||
$instance->install_module("Module::Name");
|
||||
|
||||
Installs C<Module::Name>'s C<ShareDir>
|
||||
|
||||
=head2 C<install_all_modules>
|
||||
|
||||
$instance->install_all_modules();
|
||||
|
||||
Installs all C<module_names>.
|
||||
|
||||
=head2 C<add_to_inc>
|
||||
|
||||
B<DEPRECATED:> Use C<register> instead.
|
||||
|
||||
=head2 C<register>
|
||||
|
||||
$instance->register();
|
||||
|
||||
Adds the C<Tempdir> C<ShareDir> ( C<inc> ) to the global C<@INC>
|
||||
|
||||
I<Since 1.001000>
|
||||
|
||||
=head2 C<clear>
|
||||
|
||||
$instance->clear();
|
||||
|
||||
Removes the C<Tempdir> C<ShareDir> ( C<inc> ) from the global C<@INC>
|
||||
|
||||
I<Since 1.001000>
|
||||
|
||||
=head1 ATTRIBUTES
|
||||
|
||||
=head2 C<inc>
|
||||
|
||||
A C<Test::File::ShareDir::Object::Inc> object.
|
||||
|
||||
=head2 C<modules>
|
||||
|
||||
A hash of :
|
||||
|
||||
Module::Name => "relative/path"
|
||||
|
||||
=head2 C<root>
|
||||
|
||||
The origin all paths's are relative to.
|
||||
|
||||
( Defaults to C<cwd> )
|
||||
|
||||
=begin MetaPOD::JSON v1.1.0
|
||||
|
||||
{
|
||||
"namespace":"Test::File::ShareDir::Object::Module",
|
||||
"interface":"class",
|
||||
"inherits":"Class::Tiny::Object"
|
||||
}
|
||||
|
||||
|
||||
=end MetaPOD::JSON
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kent Fredric <kentnl@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.
|
||||
|
||||
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
|
||||
206
database/perl/vendor/lib/Test/File/ShareDir/TempDirObject.pm
vendored
Normal file
206
database/perl/vendor/lib/Test/File/ShareDir/TempDirObject.pm
vendored
Normal file
@@ -0,0 +1,206 @@
|
||||
use 5.006; # pragmas
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
package Test::File::ShareDir::TempDirObject;
|
||||
|
||||
our $VERSION = '1.001002';
|
||||
|
||||
# ABSTRACT: Internal Object to make code simpler.
|
||||
|
||||
our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
use Path::Tiny qw(path);
|
||||
use Carp qw(confess);
|
||||
## no critic (Subroutines::RequireArgUnpacking)
|
||||
sub __rcopy { require File::Copy::Recursive; goto \&File::Copy::Recursive::rcopy; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub new {
|
||||
my ( $class, $config ) = @_;
|
||||
|
||||
confess('Need -share => for Test::File::ShareDir') unless exists $config->{-share};
|
||||
|
||||
my $realconfig = {
|
||||
root => path(q{./})->absolute, #->resolve->absolute,
|
||||
modules => {},
|
||||
dists => {},
|
||||
};
|
||||
|
||||
$realconfig->{root} = path( delete $config->{-root} )->absolute if exists $config->{-root};
|
||||
$realconfig->{modules} = delete $config->{-share}->{-module} if exists $config->{-share}->{-module};
|
||||
$realconfig->{dists} = delete $config->{-share}->{-dist} if exists $config->{-share}->{-dist};
|
||||
|
||||
confess( 'Unsupported -share types : ' . join q{ }, keys %{ $config->{-share} } ) if keys %{ $config->{-share} };
|
||||
|
||||
delete $config->{-share};
|
||||
|
||||
confess( 'Unsupported parameter to import() : ' . join q{ }, keys %{$config} ) if keys %{$config};
|
||||
|
||||
return bless $realconfig, $class;
|
||||
}
|
||||
|
||||
my @cache;
|
||||
|
||||
sub _tempdir {
|
||||
my ($self) = shift;
|
||||
return $self->{tempdir} if exists $self->{tempdir};
|
||||
$self->{tempdir} = Path::Tiny::tempdir( CLEANUP => 1 );
|
||||
|
||||
# Explicit keepalive till GC
|
||||
push @cache, $self->{tempdir};
|
||||
return $self->{tempdir};
|
||||
}
|
||||
|
||||
sub _module_tempdir {
|
||||
my ($self) = shift;
|
||||
return $self->{module_tempdir} if exists $self->{module_tempdir};
|
||||
$self->{module_tempdir} = $self->_tempdir->child('auto/share/module');
|
||||
$self->{module_tempdir}->mkpath();
|
||||
return $self->{module_tempdir}->absolute;
|
||||
}
|
||||
|
||||
sub _dist_tempdir {
|
||||
my ($self) = shift;
|
||||
return $self->{dist_tempdir} if exists $self->{dist_tempdir};
|
||||
$self->{dist_tempdir} = $self->_tempdir->child('auto/share/dist');
|
||||
$self->{dist_tempdir}->mkpath();
|
||||
return $self->{dist_tempdir}->absolute;
|
||||
}
|
||||
|
||||
sub _root {
|
||||
my ($self) = shift;
|
||||
return $self->{root};
|
||||
}
|
||||
|
||||
sub _modules { return shift->{modules}; }
|
||||
|
||||
sub _dists { return shift->{dists} }
|
||||
|
||||
sub _module_names {
|
||||
my ($self) = shift;
|
||||
return keys %{ $self->_modules };
|
||||
}
|
||||
|
||||
sub _dist_names {
|
||||
my ($self) = shift;
|
||||
return keys %{ $self->_dists };
|
||||
}
|
||||
|
||||
sub _module_share_target_dir {
|
||||
my ( $self, $modname ) = @_;
|
||||
|
||||
## no critic (RegularExpressions)
|
||||
$modname =~ s/::/-/g;
|
||||
|
||||
return $self->_module_tempdir->child($modname);
|
||||
}
|
||||
|
||||
sub _dist_share_target_dir {
|
||||
my ( $self, $distname ) = @_;
|
||||
return $self->_dist_tempdir->child($distname);
|
||||
}
|
||||
|
||||
sub _module_share_source_dir {
|
||||
my ( $self, $module ) = @_;
|
||||
return path( $self->_modules->{$module} )->absolute( $self->_root );
|
||||
}
|
||||
|
||||
sub _dist_share_source_dir {
|
||||
my ( $self, $dist ) = @_;
|
||||
return path( $self->_dists->{$dist} )->absolute( $self->_root );
|
||||
}
|
||||
|
||||
sub _install_module {
|
||||
my ( $self, $module ) = @_;
|
||||
return __rcopy( $self->_module_share_source_dir($module), $self->_module_share_target_dir($module) );
|
||||
}
|
||||
|
||||
sub _install_dist {
|
||||
my ( $self, $dist ) = @_;
|
||||
return __rcopy( $self->_dist_share_source_dir($dist), $self->_dist_share_target_dir($dist) );
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Test::File::ShareDir::TempDirObject - Internal Object to make code simpler.
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 1.001002
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
my $object = $class->new({
|
||||
-root => 'foo', # optional
|
||||
-share => {
|
||||
-module => {
|
||||
'baz' => 'dir',
|
||||
},
|
||||
-dist => {
|
||||
'Task-baz' => 'otherdir',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
# installs a sharedir for 'baz' by copying 'foo/dir'
|
||||
$object->_install_module('baz');
|
||||
|
||||
# installs a shardir for distribution 'Task-baz' by copying 'foo/otherdir'
|
||||
$object->_install_dist('Task-baz');
|
||||
|
||||
# add to @INC
|
||||
unshift @INC, $object->_tempdir->stringify;
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 new
|
||||
|
||||
Creates a new instance of this object.
|
||||
|
||||
=begin MetaPOD::JSON v1.1.0
|
||||
|
||||
{
|
||||
"namespace":"Test::File::ShareDir::TempDirObject",
|
||||
"interface":"class"
|
||||
}
|
||||
|
||||
|
||||
=end MetaPOD::JSON
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kent Fredric <kentnl@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.
|
||||
|
||||
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
|
||||
115
database/perl/vendor/lib/Test/File/ShareDir/Utils.pm
vendored
Normal file
115
database/perl/vendor/lib/Test/File/ShareDir/Utils.pm
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
use 5.006;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
package Test::File::ShareDir::Utils;
|
||||
|
||||
our $VERSION = '1.001002';
|
||||
|
||||
our $AUTHORITY = 'cpan:KENTNL'; # AUTHORITY
|
||||
|
||||
# ABSTRACT: Simple utilities for File::ShareDir testing
|
||||
|
||||
use Exporter 5.57 qw(import);
|
||||
use Carp qw( croak );
|
||||
|
||||
our @EXPORT_OK = qw( extract_dashes );
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
sub extract_dashes {
|
||||
my ( $undashed_to, $source ) = @_;
|
||||
if ( not ref $source or 'HASH' ne ref $source ) {
|
||||
return croak(q[Must pass a hashref]);
|
||||
}
|
||||
my %input_config = %{$source};
|
||||
my $params = {};
|
||||
for my $key ( keys %input_config ) {
|
||||
next unless $key =~ /\A-(.*)\z/msx;
|
||||
$params->{$1} = delete $input_config{$key};
|
||||
}
|
||||
$params->{$undashed_to} = {} if not exists $params->{$undashed_to};
|
||||
for my $key ( keys %input_config ) {
|
||||
$params->{$undashed_to}->{$key} = $input_config{$key};
|
||||
}
|
||||
return $params;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Test::File::ShareDir::Utils - Simple utilities for File::ShareDir testing
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 1.001002
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
use Test::File::ShareDir::Utils qw( extract_dashes );
|
||||
|
||||
my $hash = extract_dashes('dists', $oldhash );
|
||||
|
||||
=head1 EXPORTABLE FUNCTIONS
|
||||
|
||||
=head2 extract_dashes
|
||||
|
||||
A utility that helps transform:
|
||||
|
||||
-opt_a => bar
|
||||
-opt_b => baz
|
||||
NameA => NameAValue
|
||||
NameB => NameBValue
|
||||
|
||||
Into
|
||||
|
||||
opt_a => bar
|
||||
opt_b => baz
|
||||
modules => {
|
||||
NameA => NameAValue
|
||||
NameB => NameBValue
|
||||
}
|
||||
|
||||
This is a useful approach used all over import and functional style interfaces due to explicit configuration
|
||||
being needed only on rare occasions.
|
||||
|
||||
=head1 AUTHOR
|
||||
|
||||
Kent Fredric <kentnl@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2017 by Kent Fredric <kentnl@cpan.org>.
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user