Created
June 9, 2009 01:38
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Example usage | |
perl stub.pl --author RAFL --version 0.01 --package Devel-Declare --description 'Something goes here' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use strict; | |
use warnings; | |
{ | |
package MyApp; | |
use Moose; | |
use FindBin; | |
use File::Basename; | |
use Carp; | |
with 'MooseX::Getopt'; | |
has 'author' => ( | |
isa => 'Str', | |
requried => 1, | |
is => 'rw', | |
); | |
has 'package' => ( | |
isa => 'Str', | |
required => 1, | |
is => 'rw', | |
); | |
has 'description' => ( | |
isa => 'Str', | |
required => 1, | |
is => 'rw', | |
); | |
has 'version' => ( | |
isa => 'Str', | |
required => 1, | |
is => 'rw', | |
); | |
sub ebuild { | |
my $self = shift; | |
return join "\n", | |
q{# Copyright 1999-2009 Gentoo Foundation}, | |
q{# Distributed under the terms of the GNU General Public License v2}, | |
q{# $Header: $}, | |
q{EAPI=2}, | |
q{MODULE_AUTHOR=} . $self->author, | |
q{inherit perl-module}, | |
q{}, | |
q{DESCRIPTION="} . $self->description . q{"}, | |
q{LICENSE="|| ( Artistic GPL-2 )"}, | |
q{SLOT="0"}, | |
q{KEYWORDS="~amd64 ~x86"}, | |
q{IUSE="test"}, | |
q{COMMON_DEPEND=""}, | |
qq/DEPEND="\n\t\${COMMON_DEPEND}\n\ttest? ( )\n"/, | |
qq/RDEPEND="\n\t\${COMMON_DEPEND}\n"/, | |
q{SRC_TEST="do"}; | |
} | |
sub metadata { | |
return q{<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> | |
<pkgmetadata> | |
<herd>perl</herd> | |
<maintainer> | |
<email>kentfredric@gmail.com</email> | |
<name>Kent Fredric</name> | |
</maintainer> | |
</pkgmetadata>}; | |
} | |
sub filename { | |
my $self = shift; | |
return | |
'dev-perl/' | |
. $self->package . '/' | |
. $self->package . '-' | |
. $self->version; | |
} | |
sub fullFilename { | |
my $self = shift; | |
return "$FindBin::Bin/" . $self->filename . '.ebuild'; | |
} | |
sub mkfolder { | |
my $self = shift; | |
my $d = File::Basename::dirname( $self->fullFilename ); | |
if ( !-e -d $d ) { | |
mkdir File::Basename::dirname( $self->fullFilename ) | |
or Carp::croak("Mkdir failed $! $@"); | |
} | |
} | |
sub mkmeta { | |
my $self = shift; | |
my $m = | |
File::Basename::dirname( $self->fullFilename ) . '/metadata.xml'; | |
if ( !-e $m ) { | |
open my $fh, '>', $m or Carp::croak("Generate Meta Failed $! $@"); | |
print $fh $self->metadata; | |
close $fh; | |
} | |
} | |
sub mkfile { | |
my $self = shift; | |
if ( -e $self->fullFilename ) { | |
Carp::croak("File Already Exists :/ "); | |
} | |
open my $fh, '>', $self->fullFilename | |
or Carp::croak("OpenRW error, $! $@ "); | |
print $fh $self->ebuild; | |
close $fh; | |
} | |
sub create { | |
my $self = shift; | |
$self->mkfolder; | |
$self->mkmeta; | |
$self->mkfile; | |
print "Stub Ebuild created at " . $self->fullFilename; | |
print "\n\n"; | |
} | |
} | |
my $a = MyApp->new_with_options(); | |
print $a->create(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment