Mojo-File-Role-HomeDir

 view release on metacpan or  search on metacpan

lib/Mojo/File/Role/HomeDir.pm  view on Meta::CPAN


use Role::Tiny;
use File::HomeDir;
use strict;


$\ = "\n"; $, = "\t";

my @subs = qw/
    my_home
    my_desktop
    my_documents
    my_music
    my_pictures
    my_videos
    my_data
    my_dist_config
    my_dist_data
    users_home
    users_documents
    users_data
    users_desktop
    users_music
    users_pictures
    users_videos
    /;


for my $name (grep { /^my_/ } @subs) {
    monkey_patch(__PACKAGE__, $name => sub { return shift()->new(File::HomeDir->$name, @_) });
};

lib/Mojo/File/Role/HomeDir.pm  view on Meta::CPAN


=head1 SYNOPSIS

  use Mojo::File;
  use Mojo::File::Role::HomeDir;

  my $file = Mojo::File->new->with_roles('+Mojo::File::Role::HomeDir');

  # Use the methods provided by File::HomeDir:
  my $home_dir     = $file->my_home;
  my $desktop_dir  = $file->my_desktop;
  my $documents_dir = $file->my_documents;
  # ... and others

=head1 DESCRIPTION

This role adds a collection of directory-related methods from L<File::HomeDir> 
to L<Mojo::File> objects. Each method returns a new Mojo::File object pointing 
to the directory path provided by File::HomeDir.

The following methods are added:

=over 4

=item * my_home

=item * my_desktop

=item * my_documents

=item * my_music

=item * my_pictures

=item * my_videos

=item * my_data

lib/Mojo/File/Role/HomeDir.pm  view on Meta::CPAN

=item * my_dist_config

=item * my_dist_data

=item * users_home

=item * users_documents

=item * users_data

=item * users_desktop

=item * users_music

=item * users_pictures

=item * users_videos

=back

=head1 METHODS

t/01_use.t  view on Meta::CPAN

use Mojo::File qw/path/;
use File::HomeDir;
use Test::More;

my $user = getlogin() || $ENV{USER} || $ENV{LOGNAME} || getpwuid($<);

my $p = path()->with_roles("+HomeDir");

my @subs = qw/
    my_home
    my_desktop
    my_documents
    my_music
    my_pictures
    my_videos
    my_data
    my_dist_config
    my_dist_data
    users_home
    users_documents
    users_data
    users_desktop
    users_music
    users_pictures
    users_videos
    /;
for my $sub (grep { /^my/ && !/^my_dist/} @subs) {
    SKIP: {
        my $expected = eval { File::HomeDir->$sub };
        if ($@ || !defined $expected) {
            skip("'$sub' $@" =~ s/\ at.+//mrs, 1);
            next;



( run in 0.429 second using v1.01-cache-2.11-cpan-299005ec8e3 )