File Coverage

blib/lib/Devel/PackagePath.pm
Criterion Covered Total %
statement 13 13 100.0
branch n/a
condition n/a
subroutine 5 5 100.0
pod n/a
total 18 18 100.0


line stmt bran cond sub pod time code
1             package Devel::PackagePath;
2 2     2   52533 use Moose;
  2         1264279  
  2         19  
3             our $VERSION = 0.03;
4 2     2   18068 use MooseX::Types::Path::Class qw(Dir);
  2         307413  
  2         19  
5              
6             has package => (
7             isa => 'Str',
8             is => 'ro',
9             required => 1,
10             );
11              
12             has base => (
13             isa => 'Str',
14             is => 'ro',
15             lazy => 1,
16             default => '.',
17             );
18              
19             has directory => (
20             isa => Dir,
21             is => 'ro',
22             lazy_build => 1,
23             handles => {
24             create => 'mkpath',
25             path => 'stringify',
26             },
27             );
28              
29             sub _build_directory {
30 1     1   33 my @pkg_list = split '::', $_[0]->package;
31 1         3 pop @pkg_list; # pop off the file name
32 1         45 Path::Class::Dir->new( $_[0]->base, @pkg_list );
33             }
34              
35             has file_name => (
36             isa => 'Str',
37             is => 'ro',
38             lazy_build => 1,
39             );
40              
41             sub _build_file_name {
42 1     1   46 return ( split '::', $_[0]->package )[-1] . '.pm';
43             }
44              
45 2     2   2966 no Moose;
  2         11  
  2         17  
46             1;
47             __END__
48              
49              
50             =head1 NAME
51              
52             Devel::PackagePath - Inspect and Manipulate a Path based on a Package Name
53              
54             =head1 VERSION
55              
56             This document describes Devel::PackagePath version 0.0.1
57              
58             =head1 SYNOPSIS
59              
60             use Devel::PackagePath;
61              
62             my $path = Devel::PackagePath->new( package => 'MyApp::Base::Object', base => 'lib');
63             $path->create; # creates lib/MyApp/Base
64            
65             =head1 DESCRIPTION
66              
67             Devel::PackagePath is a simple way to inspect and manipulate a path based on a
68             package name. I went looking for a way to do this when building a class
69             generator for another project and didn't find anything simple.
70              
71             =head1 METHODS
72              
73             =over 4
74              
75             =item new
76              
77             =over 4
78              
79             =item package PackageName
80              
81             A package name to turn into a path.
82              
83             =item base Str
84              
85             A base directory, defaults to '.'.
86              
87             =back
88              
89             =item create
90              
91             Create the path on the filesystem.
92              
93             =item path
94              
95             Get the path back as a string.
96              
97             =back
98              
99             =head1 CONFIGURATION AND ENVIRONMENT
100              
101             Devel::PackagePath requires no configuration files or environment variables.
102              
103             =head1 DEPENDENCIES
104              
105             Squirrel, MooseX::Types::Path::Class
106              
107             =head1 INCOMPATIBILITIES
108              
109             None reported.
110              
111             =head1 BUGS AND LIMITATIONS
112              
113             No bugs have been reported.
114              
115             Please report any bugs or feature requests to
116             C<bug-devel-generatepackagepath@rt.cpan.org>, or through the web interface at
117             L<http:/ / rt . cpan . org > .
118              
119             =head1 AUTHOR
120              
121             Chris Prather C<< <perigrin@cpan.org> >>
122             based on an IRC conversation with Matt Trout.
123              
124             =head1 LICENCE AND COPYRIGHT
125              
126             Copyright (c) 2008, Chris Prather C<< <perigrin@cpan.org> >>. All rights reserved.
127              
128             This module is free software; you can redistribute it and/or
129             modify it under the same terms as Perl itself. See L<perlartistic>.
130              
131             =head1 DISCLAIMER OF WARRANTY
132              
133             BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
134             FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
135             OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
136             PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
137             EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
138             WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
139             ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
140             YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
141             NECESSARY SERVICING, REPAIR, OR CORRECTION.
142              
143             IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
144             WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
145             REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
146             LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
147             OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
148             THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
149             RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
150             FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
151             SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
152             SUCH DAMAGES.