Instantly share code, notes, and snippets.
-
Save anonymous/01efc910e10a73f433c5 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/lib/Mojo/Home.pm b/lib/Mojo/Home.pm | |
index bcc09e6..f6f883f 100644 | |
--- a/lib/Mojo/Home.pm | |
+++ b/lib/Mojo/Home.pm | |
@@ -38,9 +38,9 @@ sub lib_dir { | |
} | |
sub list_files { | |
- my ($self, $dir) = (shift, shift // ''); | |
+ my ($self, $dir, $options) = (shift, shift // '', shift); | |
$dir = catdir @{$self->parts}, split('/', $dir); | |
- return [map { join '/', splitdir abs2rel($_, $dir) } files $dir]; | |
+ return [map { join '/', splitdir abs2rel($_, $dir) } files $dir, $options]; | |
} | |
sub mojo_lib_dir { catdir dirname(__FILE__), '..' } | |
@@ -111,12 +111,25 @@ Path to C<lib> directory of application. | |
my $files = $home->list_files; | |
my $files = $home->list_files('foo/bar'); | |
+ my $files = $home->list_files('foo/bar', {hidden => 1}); | |
Portably list all files recursively in directory relative to the home directory. | |
# List layouts | |
say for @{$home->list_files('templates/layouts')}; | |
+These options are currently available: | |
+ | |
+=over 2 | |
+ | |
+=item hidden | |
+ | |
+ hidden => 1 | |
+ | |
+Include hidden files and directories. | |
+ | |
+=back | |
+ | |
=head2 mojo_lib_dir | |
my $path = $home->mojo_lib_dir; | |
diff --git a/lib/Mojo/Util.pm b/lib/Mojo/Util.pm | |
index 033874e..36a23a6 100644 | |
--- a/lib/Mojo/Util.pm | |
+++ b/lib/Mojo/Util.pm | |
@@ -127,10 +127,13 @@ sub dumper { | |
sub encode { _encoding($_[0])->encode("$_[1]") } | |
sub files { | |
- my $dir = shift; | |
+ my ($dir, $options) = (shift, shift // {}); | |
+ | |
my @files; | |
my $wanted = sub { -d $File::Find::name or push @files, $File::Find::name }; | |
+ local $File::Find::skip_pattern = qr/^\./ unless $options->{hidden}; | |
find {wanted => $wanted, no_chdir => 1}, $dir if -d $dir; | |
+ | |
return sort @files; | |
} | |
@@ -586,12 +589,25 @@ Encode characters to bytes. | |
=head2 files | |
my @files = files '/tmp/uploads'; | |
+ my @files = files '/tmp/uploads', {hidden => 1}; | |
List all files recursively in a directory. | |
# List all templates | |
say for files '/home/sri/myapp/templates'; | |
+These options are currently available: | |
+ | |
+=over 2 | |
+ | |
+=item hidden | |
+ | |
+ hidden => 1 | |
+ | |
+Include hidden files and directories. | |
+ | |
+=back | |
+ | |
=head2 hmac_sha1_sum | |
my $checksum = hmac_sha1_sum $bytes, 'passw0rd'; | |
diff --git a/t/mojo/home.t b/t/mojo/home.t | |
index 591c7ac..39f3aa5 100644 | |
--- a/t/mojo/home.t | |
+++ b/t/mojo/home.t | |
@@ -50,13 +50,16 @@ is $home->rel_dir('foo/bar'), catdir(splitdir($FindBin::Bin), 'foo', 'bar'), | |
# List files | |
is_deeply $home->list_files('lib/does_not_exist'), [], 'no files'; | |
is_deeply $home->list_files('lib/myapp.pl'), [], 'no files'; | |
-my $files = [ | |
+my @files = ( | |
'BaseTest/Base1.pm', 'BaseTest/Base2.pm', | |
'BaseTest/Base3.pm', 'DeprecationTest.pm', | |
'LoaderException.pm', 'LoaderException2.pm', | |
'LoaderTest/A.pm', 'LoaderTest/B.pm', | |
'LoaderTest/C.pm' | |
-]; | |
-is_deeply $home->list_files('lib/Mojo'), $files, 'right files'; | |
+); | |
+is_deeply $home->list_files('lib/Mojo'), \@files, 'right files'; | |
+my @hidden = ('.hidden.txt', '.test/hidden.txt'); | |
+is_deeply $home->list_files('lib/Mojo', {hidden => 1}), [@hidden, @files], | |
+ 'right files'; | |
done_testing(); | |
diff --git a/t/mojo/morbo.t b/t/mojo/morbo.t | |
index ed53db8..f1f5684 100644 | |
--- a/t/mojo/morbo.t | |
+++ b/t/mojo/morbo.t | |
@@ -119,6 +119,7 @@ is_deeply $morbo->modified_files, [], 'directory has not changed'; | |
my @new = map { catfile $subdir, "$_.txt" } qw/test testing/; | |
spurt 'whatever', $_ for @new; | |
is_deeply $morbo->modified_files, \@new, 'two files have changed'; | |
+spurt 'whatever', catfile($subdir, '.hidden.txt'); | |
is_deeply $morbo->modified_files, [], 'directory has not changed again'; | |
# Stop | |
diff --git a/t/mojo/util.t b/t/mojo/util.t | |
index e72eab0..c4ce732 100644 | |
--- a/t/mojo/util.t | |
+++ b/t/mojo/util.t | |
@@ -423,6 +423,9 @@ my @files = map { catfile $lib, split '/' } ( | |
'LoaderTest/C.pm' | |
); | |
is_deeply [map { catfile splitdir $_ } files $lib], \@files, 'right files'; | |
+my @hidden = map { catfile $lib, split '/' } '.hidden.txt', '.test/hidden.txt'; | |
+is_deeply [map { catfile splitdir $_ } files $lib, {hidden => 1}], | |
+ [@hidden, @files], 'right files'; | |
# steady_time | |
like steady_time, qr/^[\d.]+$/, 'high resolution time'; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment