1 package MooseX::Types::Path::Class;
3 use warnings FATAL => 'all';
7 our $AUTHORITY = 'cpan:THEPLER';
10 # TODO: export dir() and file() from Path::Class
13 -declare => [qw( Dir File )];
15 use MooseX::Types::Moose qw(Str ArrayRef);
17 class_type('Path::Class::Dir');
18 class_type('Path::Class::File');
20 subtype Dir, as 'Path::Class::Dir';
21 subtype File, as 'Path::Class::File';
23 for my $type ( 'Path::Class::Dir', Dir ) {
25 from Str, via { Path::Class::Dir->new($_) },
26 from ArrayRef, via { Path::Class::Dir->new(@$_) };
29 for my $type ( 'Path::Class::File', File ) {
31 from Str, via { Path::Class::File->new($_) },
32 from ArrayRef, via { Path::Class::File->new(@$_) };
35 # optionally add Getopt option type
36 use English qw(-no_match_vars);
37 eval { require MooseX::Getopt; };
39 MooseX::Getopt::OptionTypeMap->add_option_type_to_map( $_, '=s', )
40 for ( 'Path::Class::Dir', 'Path::Class::File', Dir, File, );
48 MooseX::Types::Path::Class - A Path::Class type library for Moose
55 use MooseX::Types::Path::Class;
56 with 'MooseX::Getopt'; # optional
60 isa => 'Path::Class::Dir',
67 isa => 'Path::Class::File',
72 # these attributes are coerced to the
73 # appropriate Path::Class objects
74 MyClass->new( dir => '/some/directory/', file => '/some/file' );
79 MooseX::Types::Path::Class creates common L<Moose> types,
80 coercions and option specifications useful for dealing
81 with L<Path::Class> objects as L<Moose> attributes.
83 Coercions (see L<Moose::Util::TypeConstraints>) are made
84 from both 'Str' and 'ArrayRef' to both L<Path::Class::Dir> and
85 L<Path::Class::File> objects. If you have L<MooseX::Getopt> installed,
86 the Getopt option type ("=s") will be added for both
87 L<Path::Class::Dir> and L<Path::Class::File>.
89 This is just meant to be a central place for these constructs, so you
90 don't have to worry about whether they've been created or not, and
91 you're not tempted to copy them into yet another class (like I was).
95 None of these are exported by default. They are provided via
102 These exports can be used instead of the full class names. Example:
106 use MooseX::Types::Path::Class qw(Dir File);
122 Note that there are no quotes around Dir or File.
124 =item is_Dir($value), is_File($value)
126 Returns true or false based on whether $value is a valid Dir or File.
128 =item to_Dir($value), to_File($value)
130 Attempts to coerce $value to a Dir or File. Returns the coerced value
131 or false if the coercion failed.
138 L<Moose>, L<MooseX::Types>, L<Path::Class>
141 =head1 BUGS AND LIMITATIONS
143 If you find a bug please either email the author, or add
144 the bug to cpan-RT L<http://rt.cpan.org>.
149 Todd Hepler C<< <thepler@employees.org> >>
152 =head1 LICENCE AND COPYRIGHT
154 Copyright (c) 2007-2008, Todd Hepler C<< <thepler@employees.org> >>.
156 This module is free software; you can redistribute it and/or
157 modify it under the same terms as Perl itself. See L<perlartistic>.