Skip to content

Instantly share code, notes, and snippets.

@kentfredric
Created June 9, 2009 01:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kentfredric/126197 to your computer and use it in GitHub Desktop.
Save kentfredric/126197 to your computer and use it in GitHub Desktop.
Example usage
perl stub.pl --author RAFL --version 0.01 --package Devel-Declare --description 'Something goes here'
#!/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