Skip to content

Instantly share code, notes, and snippets.

/hidden.diff Secret

Created March 15, 2016 23:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/01efc910e10a73f433c5 to your computer and use it in GitHub Desktop.
Save anonymous/01efc910e10a73f433c5 to your computer and use it in GitHub Desktop.
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