X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMooseX%2FTypes%2FPath%2FClass.pm;h=d4e86d039e30ba4d977877468836b2b6a7eaff94;hb=0c2e4a4ee568d1e2b214d537640e9290516dac72;hp=990250dee4e79b4228c139da8bb401737fc30c1c;hpb=5d7c6a0c4eefc0b0f383cc3db01108d2169eda85;p=gitmo%2FMooseX-Types-Path-Class.git diff --git a/lib/MooseX/Types/Path/Class.pm b/lib/MooseX/Types/Path/Class.pm index 990250d..d4e86d0 100644 --- a/lib/MooseX/Types/Path/Class.pm +++ b/lib/MooseX/Types/Path/Class.pm @@ -4,10 +4,9 @@ use warnings FATAL => 'all'; use strict; use Path::Class (); -# TODO: export dir() and file() from Path::Class? (maybe) use MooseX::Types - -declare => [qw( Dir File ExistingDir ExistingFile NonExistingDir NonExistingFile )]; + -declare => [qw( Dir File )]; use MooseX::Types::Moose qw(Str ArrayRef); @@ -17,27 +16,13 @@ class_type('Path::Class::File'); subtype Dir, as 'Path::Class::Dir'; subtype File, as 'Path::Class::File'; -subtype ExistingFile, as File, where { -e $_->stringify }, - message { "File '$_' must exist." }; - -subtype NonExistingFile, as File, where { !-e $_->stringify }, - message { "File '$_' must not exist." }; - -subtype ExistingDir, as Dir, - where { -e $_->stringify && -d $_->stringify }, - message { "Directory '$_' must exist" }; - -subtype NonExistingDir, as Dir, - where { !-e $_->stringify }, - message { "Directory '$_' not must exist" }; - -for my $type ( 'Path::Class::Dir', Dir, ExistingDir, NonExistingDir ) { +for my $type ( 'Path::Class::Dir', Dir ) { coerce $type, from Str, via { Path::Class::Dir->new($_) }, from ArrayRef, via { Path::Class::Dir->new(@$_) }; } -for my $type ( 'Path::Class::File', File, ExistingFile, NonExistingFile ) { +for my $type ( 'Path::Class::File', File ) { coerce $type, from Str, via { Path::Class::File->new($_) }, from ArrayRef, via { Path::Class::File->new(@$_) }; @@ -47,12 +32,7 @@ for my $type ( 'Path::Class::File', File, ExistingFile, NonExistingFile ) { eval { require MooseX::Getopt; }; if ( !$@ ) { MooseX::Getopt::OptionTypeMap->add_option_type_to_map( $_, '=s', ) - for ( - 'Path::Class::Dir', 'Path::Class::File', - Dir, File, - ExistingDir, ExistingFile, - NonExistingFile, NonExistingDir, - ); + for ( 'Path::Class::Dir', 'Path::Class::File', Dir, File, ); } 1; @@ -134,44 +114,13 @@ These exports can be used instead of the full class names. Example: Note that there are no quotes around Dir or File. -=item ExistingDir, ExistingFile - -Like File and Dir, but the files or directories must exist on disk -when the type is checked, and the object on disk must be a file (for -ExistingFile) or directory (for ExistingDir). - -At no point will this library attempt to coerce a path into existence -by creating directories or files. The coercions for ExistingDir and ExistingFile -simply coerce 'Str' and 'ArrayRef' to L objects. - -These types do rely on I/O. The case could be made that this makes them not -suitable to be called "types". Consider a file that gets removed after the -ExistingFile type is checked. This can be a source of difficult to find bugs -(you've been warned). Often, you're going to check (either explicitly or implicitly) -whether a path exists at the point where you're actually going to use it -anyway. In such cases you may be better off using the Dir or File type and then -later (say, in some method) check for existence yourself instead of using these types -constraints that you can't really trust to remain true indefinitely. - - -=item NonExistingDir, NonExistingFile - -Like File and Dir, but the path must not exist on disk -when the type is checked. - -At no point will this library attempt to coerce a path into non-existence -by removing directories or files. The coercions for NonExistingDir and NonExistingFile -simply coerce 'Str' and 'ArrayRef' to L objects. - -The same caveats regarding I/O for the Existing* types above apply here as well. - -=item is_$type($value) +=item is_Dir($value), is_File($value) -Returns true or false based on whether $value passes the constraint for $type. +Returns true or false based on whether $value is a valid Dir or File. -=item to_$type($value) +=item to_Dir($value), to_File($value) -Attempts to coerce $value to the given $type. Returns the coerced value +Attempts to coerce $value to a Dir or File. Returns the coerced value or false if the coercion failed. =back @@ -179,7 +128,7 @@ or false if the coercion failed. =head1 SEE ALSO -L +L, L, L =head1 DEPENDENCIES