diff options
Diffstat (limited to 'lib/Carton/CPANfile.pm')
-rw-r--r-- | lib/Carton/CPANfile.pm | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/Carton/CPANfile.pm b/lib/Carton/CPANfile.pm new file mode 100644 index 0000000..a60d690 --- /dev/null +++ b/lib/Carton/CPANfile.pm @@ -0,0 +1,44 @@ +package Carton::CPANfile; +use Path::Tiny (); +use Module::CPANfile; + +use overload q{""} => sub { $_[0]->stringify }, fallback => 1; + +use subs 'path'; + +use Class::Tiny { + path => undef, + _cpanfile => undef, + requirements => sub { $_[0]->_build_requirements }, +}; + +sub stringify { shift->path->stringify(@_) } +sub dirname { shift->path->dirname(@_) } +sub prereqs { shift->_cpanfile->prereqs(@_) } +sub required_modules { shift->requirements->required_modules(@_) } +sub requirements_for_module { shift->requirements->requirements_for_module(@_) } + +sub path { + my $self = shift; + if (@_) { + $self->{path} = Path::Tiny->new($_[0]); + } else { + $self->{path}; + } +} + +sub load { + my $self = shift; + $self->_cpanfile( Module::CPANfile->load($self->path) ); +} + +sub _build_requirements { + my $self = shift; + my $reqs = CPAN::Meta::Requirements->new; + $reqs->add_requirements($self->prereqs->requirements_for($_, 'requires')) + for qw( configure build runtime test develop ); + $reqs->clear_requirement('perl'); + $reqs; +} + +1; |