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? (maybe)
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, );
49 MooseX::Types::Path::Class - A Path::Class type library for Moose
56 use MooseX::Types::Path::Class;
57 with 'MooseX::Getopt'; # optional
61 isa => 'Path::Class::Dir',
68 isa => 'Path::Class::File',
73 # these attributes are coerced to the
74 # appropriate Path::Class objects
75 MyClass->new( dir => '/some/directory/', file => '/some/file' );
80 MooseX::Types::Path::Class creates common L<Moose> types,
81 coercions and option specifications useful for dealing
82 with L<Path::Class> objects as L<Moose> attributes.
84 Coercions (see L<Moose::Util::TypeConstraints>) are made
85 from both 'Str' and 'ArrayRef' to both L<Path::Class::Dir> and
86 L<Path::Class::File> objects. If you have L<MooseX::Getopt> installed,
87 the Getopt option type ("=s") will be added for both
88 L<Path::Class::Dir> and L<Path::Class::File>.
90 This is just meant to be a central place for these constructs, so you
91 don't have to worry about whether they've been created or not, and
92 you're not tempted to copy them into yet another class (like I was).
97 None of these are exported by default. They are provided via
104 These exports can be used instead of the full class names. Example:
108 use MooseX::Types::Path::Class qw(Dir File);
124 Note that there are no quotes around Dir or File.
126 =item is_Dir($value), is_File($value)
128 Returns true or false based on whether $value is a valid Dir or File.
130 =item to_Dir($value), to_File($value)
132 Attempts to coerce $value to a Dir or File. Returns the coerced value
133 or false if the coercion failed.
140 L<Moose>, L<MooseX::Types>, L<Path::Class>
143 =head1 BUGS AND LIMITATIONS
145 If you find a bug please either email the author, or add
146 the bug to cpan-RT L<http://rt.cpan.org>.
151 Todd Hepler C<< <thepler@employees.org> >>
154 =head1 LICENCE AND COPYRIGHT
156 Copyright (c) 2007-2008, Todd Hepler C<< <thepler@employees.org> >>.
158 This module is free software; you can redistribute it and/or
159 modify it under the same terms as Perl itself. See L<perlartistic>.