Module-Install-ParseRequires

 view release on metacpan or  search on metacpan

lib/Module/Install/ParseRequires.pm  view on Meta::CPAN

package Module::Install::ParseRequires;
{
  $Module::Install::ParseRequires::VERSION = '0.002';
}
# ABSTRACT: A Module::Install extension that provides an alternate way to specify dependencies

use strict;
use warnings;

use base qw/ Module::Install::Base /;

require ExtUtils::MakeMaker;
   
sub _parse_requires_method ($) {
    local $_ = shift;
    return 'requires' unless defined;
    if ( ! s/=//g ) {
        s/_*$//;
        $_ .= '_requires' unless m/_?(?:requires|recommends)$/;
    }
    return $_;
}

sub parse_requires {
    my $self = shift;
    my ( $requires, $method );
    if ( @_ > 1 ) {
        $method = _parse_requires_method shift;
    }
    else {
        $method = 'requires';
    }
    $requires = shift;

    for my $line ( split m/\n/, $requires ) {
        s/^\s*//, s/\s*$// for $line;
        if ( $line =~ m/^([\w\=]+):$/ ) {
            $method = _parse_requires_method $1;
        }
        else {
            my ( $dist, $version ) = split m/\s+/, $line, 2;
            $version ||= 0;
            $self->$method( $dist => $version );
        }
    }
}

sub parse_recommends {
    my $self = shift;
    $self->parse_requires( recommends => @_ );
}

1;


=pod

=head1 NAME

Module::Install::ParseRequires - A Module::Install extension that provides an alternate way to specify dependencies

=head1 VERSION

version 0.002

=head1 SYNOPSIS

    # In Makefile.PL

    use inc::Module::Install;
    
    parse_requires build => <<_END_;
    Test::More 1
    _END_

    parse_requires <<_END_;
    DBI
    DBIx::Class 
    Moose
    _END_

=head1 DESCRIPTION

Module::Install::ParseRequires is a L<Module::Install> extension that lets you use a here-document to specify dependencies

=head1 USAGE

=head2 parse_requires $document

Parse $document, treating each line as a space-separated distribution/version combination. If no version is specified, then 0 is assumed (as usual)

    parse_requires <<_END_
    Moose
    Xyzzy 1.02
    JSON 2
    _END_

Is equivalent to:

    requires 'Moose' => 0
    requires 'Xyzzy' => 1.02



( run in 2.180 seconds using v1.01-cache-2.11-cpan-71847e10f99 )