r66653 - in /branches/upstream/libmodule-starter-smart-perl: ./ current/ current/lib/ current/lib/Module/ current/lib/Module/Starter/ current/t/

ghedo-guest at users.alioth.debian.org ghedo-guest at users.alioth.debian.org
Thu Dec 30 17:34:47 UTC 2010


Author: ghedo-guest
Date: Thu Dec 30 17:34:30 2010
New Revision: 66653

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=66653
Log:
[svn-inject] Installing original source of libmodule-starter-smart-perl (0.0.2)

Added:
    branches/upstream/libmodule-starter-smart-perl/
    branches/upstream/libmodule-starter-smart-perl/current/
    branches/upstream/libmodule-starter-smart-perl/current/Changes
    branches/upstream/libmodule-starter-smart-perl/current/MANIFEST
    branches/upstream/libmodule-starter-smart-perl/current/META.yml
    branches/upstream/libmodule-starter-smart-perl/current/Makefile.PL
    branches/upstream/libmodule-starter-smart-perl/current/README
    branches/upstream/libmodule-starter-smart-perl/current/lib/
    branches/upstream/libmodule-starter-smart-perl/current/lib/Module/
    branches/upstream/libmodule-starter-smart-perl/current/lib/Module/Starter/
    branches/upstream/libmodule-starter-smart-perl/current/lib/Module/Starter/Smart.pm
    branches/upstream/libmodule-starter-smart-perl/current/t/
    branches/upstream/libmodule-starter-smart-perl/current/t/00.load.t
    branches/upstream/libmodule-starter-smart-perl/current/t/pod-coverage.t
    branches/upstream/libmodule-starter-smart-perl/current/t/pod.t

Added: branches/upstream/libmodule-starter-smart-perl/current/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/Changes?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/Changes (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/Changes Thu Dec 30 17:34:30 2010
@@ -1,0 +1,6 @@
+Revision history for Module-Starter-Smart
+
+0.0.1  Sun May  7 19:11:17 2006
+       Initial release.
+0.0.2  Tue April 3 14:00:00 2007
+       Add use cases

Added: branches/upstream/libmodule-starter-smart-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/MANIFEST?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/MANIFEST (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/MANIFEST Thu Dec 30 17:34:30 2010
@@ -1,0 +1,9 @@
+Changes
+MANIFEST
+META.yml # Will be created by "make dist"
+Makefile.PL
+README
+lib/Module/Starter/Smart.pm
+t/00.load.t
+t/pod-coverage.t
+t/pod.t

Added: branches/upstream/libmodule-starter-smart-perl/current/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/META.yml?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/META.yml (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/META.yml Thu Dec 30 17:34:30 2010
@@ -1,0 +1,14 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
+name:         Module-Starter-Smart
+version:      v0.0.2
+version_from: lib/Module/Starter/Smart.pm
+installdirs:  site
+requires:
+    ExtUtils::Command:             0
+    File::Spec:                    0
+    Test::More:                    0
+    version:                       0
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.30

Added: branches/upstream/libmodule-starter-smart-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/Makefile.PL?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/Makefile.PL (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/Makefile.PL Thu Dec 30 17:34:30 2010
@@ -1,0 +1,19 @@
+use strict;
+use warnings;
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+    NAME                => 'Module::Starter::Smart',
+    AUTHOR              => 'Ruey-Cheng Chen <rueycheng at gmail.com>',
+    VERSION_FROM        => 'lib/Module/Starter/Smart.pm',
+    ABSTRACT_FROM       => 'lib/Module/Starter/Smart.pm',
+    PL_FILES            => {},
+    PREREQ_PM => {
+        'Test::More' => 0,
+	'ExtUtils::Command' => 0,
+	'File::Spec' => 0,
+        'version'    => 0,
+    },
+    dist                => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
+    clean               => { FILES => 'Module-Starter-Smart-*' },
+);

Added: branches/upstream/libmodule-starter-smart-perl/current/README
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/README?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/README (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/README Thu Dec 30 17:34:30 2010
@@ -1,0 +1,23 @@
+Module-Starter-Smart version 0.0.1
+
+INSTALLATION
+
+To install this module, run the following commands:
+
+    perl Makefile.PL
+    make
+    make test
+    make install
+
+DEPENDENCIES
+
+ExtUtils::Command
+File::Spec
+Module::Starter::Simple
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2006, Ruey-Cheng Chen
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.

Added: branches/upstream/libmodule-starter-smart-perl/current/lib/Module/Starter/Smart.pm
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/lib/Module/Starter/Smart.pm?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/lib/Module/Starter/Smart.pm (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/lib/Module/Starter/Smart.pm Thu Dec 30 17:34:30 2010
@@ -1,0 +1,428 @@
+package Module::Starter::Smart;
+
+use version; $VERSION = qv('0.0.2');
+
+use warnings;
+use strict;
+
+=head1 NAME
+
+Module::Starter::Smart - Add new modules into an existing distribution with this plugin
+
+=head1 VERSION
+
+version 0.0.2
+
+=head1 SYNOPSIS
+
+    use Module::Starter qw/Module::Starter::Simple Module::Starter::Smart/;
+    Module::Starter->create_distro(%args);
+
+    # or in ~/.module-starter/config
+    plugin: Module::Starter::Simple Module::Starter::Smart
+
+    # create a new distribution named 'Foo-Bar'
+    $ module-starter --module=Foo::Bar
+
+    # add a new module
+    $ module-starter --module=Foo::Bar::Me --distro=Foo-Bar
+
+=head1 DESCRIPTION
+
+Module::Starter::Smart is a simple helper plugin for Module::Starter.  It overrides
+the C<create_distro>, C<create_modules>, and C<create_t> subroutines defined 
+in whichever engine plugin in use (say, Module::Starter::Simple.)  When 
+invoked with a existing distribution, the plugin may bypass the C<create_basedir>
+subroutine, pull in a list of existing modules as well as test files, create new
+modules, and recreate the manifest file accordingly.  
+
+=head2 Adding a new module to an existing distribution
+
+Say you have an existing distro, Goof-Ball, and you want to add a new module, Goof::Troop.
+
+    % ls -R Goof-Ball
+    Build.PL  Changes   MANIFEST  README    lib/      t/
+    
+    Goof-Ball/lib:
+    Goof/
+    
+    Goof-Ball/lib/Goof:
+    Ball.pm
+    
+    Goof-Ball/t:
+    00.load.t       perlcritic.t    pod-coverage.t  pod.t
+
+Go to the directory containing your existing distribution and run module-starter, giving it the names of the existing distribution and the new module:
+
+    % module-starter --distro=Goof-Ball --module=Goof::Troop
+    Created starter directories and files
+    
+    % ls -R Goof-Ball
+    Build.PL  Changes   MANIFEST  README    lib/      t/
+    
+    Goof-Ball/lib:
+    Goof/
+    
+    Goof-Ball/lib/Goof:
+    Ball.pm   Troop.pm
+    
+    Goof-Ball/t:
+    00.load.t       perlcritic.t    pod-coverage.t  pod.t
+
+Troop.pm has been added to Goof-Ball/lib/Goof.
+
+=head2 Placing an existing module into a new distribution
+
+Let Foo::Baz be your existing module, and Globbo be the new distribution you will be creating.
+
+Put Foo/Baz.pm in a lib directory if it's not already.
+
+    % mkdir lib
+    % cp -R /some/other/location/Foo ./lib
+    % ls -R ./lib
+    Foo/
+    ./lib/Foo:
+    Baz.pm
+
+Make sure you're in the parent directory that contains the lib directory. Then make your new distro, but give module-starter the name of your existing module, too:
+
+    % module-starter --distro=Globbo --module=Foo::Baz
+    Created starter directories and files
+    
+    % ls -R Globbo
+    Build.PL  Changes   MANIFEST  README    lib/      t/
+    
+    Globbo/lib:
+    Foo/
+    
+    Globbo/lib/Foo:
+    Baz.pm
+    
+    Globbo/t:
+    00.load.t       perlcritic.t    pod-coverage.t  pod.t
+
+Foo/Baz.pm has been added to Globbo's lib directory.
+
+=head2 Adding an existing module to an existing distribution
+
+Say you have an existing distro, Foo::Bar, and you want to add to it an existing module, Foo::Baz:
+
+    % module-starter --module Foo::Baz --distro=Foo-Bar
+    Created starter directories and files
+    
+    % ls -R Foo-Bar
+    Build.PL  Changes   MANIFEST  README    lib/      t/
+    
+    Foo-Bar/lib:
+    Foo/
+    
+    Foo-Bar/lib/Foo:
+    Bar.pm  Baz.pm
+    
+    Foo-Bar/t:
+    00.load.t       perlcritic.t    pod-coverage.t  pod.t
+
+Foo/Baz.pm has been placed in lib/Foo.
+
+=cut
+
+use ExtUtils::Command qw/mkpath/;
+use File::Spec;
+
+# Module implementation here
+use subs qw/_sort _pull_modules _list_modules _pull_t _list_t/;
+
+=head1 INTERFACE
+
+No public methods.  The module works by subclassing Module::Starter::Simple and rewiring its internal behaviors.
+
+=cut
+
+sub create_distro {
+    my $class = shift;
+    my %config = @_;
+
+    my @modules = map { split /,/ } @{$config{modules}};
+    my $distro;
+
+    if (not $config{distro}) {
+	$distro = $modules[0];
+	$distro =~ s/::/-/g;
+    }
+
+    my $basedir = $config{dir} || $config{distro} || $distro;
+    $config{modules} = [ join ',', _sort _pull_modules($basedir), @modules ];
+    $class->SUPER::create_distro(%config);
+}
+
+sub create_basedir {
+    my $self = shift;
+    return $self->SUPER::create_basedir(@_) unless -e $self->{basedir} && !$self->{force};
+    $self->progress( "Found $self->{basedir}.  Use --force if you want to stomp on it." );
+}
+
+sub create_modules {
+    my $self = shift;
+    $self->SUPER::create_modules(@_);
+}
+
+sub _create_module {
+    my $self = shift;
+    my $module = shift;
+    my $rtname = shift;
+
+    my @parts = split( /::/, $module );
+    my $filepart = (pop @parts) . ".pm";
+    my @dirparts = ( $self->{basedir}, 'lib', @parts );
+    my $manifest_file = join( "/", "lib", @parts, $filepart );
+    if ( @dirparts ) {
+        my $dir = File::Spec->catdir( @dirparts );
+        if ( not -d $dir ) {
+            local @ARGV = $dir;
+            mkpath @ARGV;
+            $self->progress( "Created $dir" );
+        }
+    }
+
+    my $module_file = File::Spec->catfile( @dirparts,  $filepart );
+
+    $self->{module_file}{$module} =
+        File::Spec->catfile('lib', @parts, $filepart);
+
+    if (-e $module_file) {
+	$self->progress( "Skipped $module_file" );
+    } else {
+	open( my $fh, ">", $module_file ) or die "Can't create $module_file: $!\n";
+	print $fh $self->module_guts( $module, $rtname );
+	close $fh;
+	$self->progress( "Created $module_file" );
+    }
+
+    return $manifest_file;
+}
+
+sub create_t {
+    my $self = shift;
+    _sort $self->SUPER::create_t(@_), _pull_t $self->{basedir};
+}
+
+sub _create_t {
+    my $self = shift;
+    my $filename = shift;
+    my $content = shift;
+
+    my @dirparts = ( $self->{basedir}, "t" );
+    my $tdir = File::Spec->catdir( @dirparts );
+    if ( not -d $tdir ) {
+        local @ARGV = $tdir;
+        mkpath();
+        $self->progress( "Created $tdir" );
+    }
+
+    my $fname = File::Spec->catfile( @dirparts, $filename );
+
+    if (-e $fname) {
+	$self->progress( "Skipped $fname" );
+    } else {
+	open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
+	print $fh $content;
+	close $fh;
+	$self->progress( "Created $fname" );
+    }
+
+    return "t/$filename";
+}
+
+sub create_Makefile_PL {
+    my $self = shift;
+    my $main_module = shift;
+
+    my @parts = split( /::/, $main_module );
+    my $pm = pop @parts;
+    my $main_pm_file = File::Spec->catfile( "lib", @parts, "${pm}.pm" );
+       $main_pm_file =~ s{\\}{/}g; # even on Win32, use forward slash
+
+    my $fname = File::Spec->catfile( $self->{basedir}, "Makefile.PL" );
+
+    if (-e $fname) {
+	$self->progress( "Skipped $fname" );
+    } else {
+	open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
+	print $fh $self->Makefile_PL_guts($main_module, $main_pm_file);
+	close $fh;
+	$self->progress( "Created $fname" );
+    }
+
+    return "Makefile.PL";
+}
+
+sub create_Build_PL {
+    my $self = shift;
+    my $main_module = shift;
+
+    my @parts = split( /::/, $main_module );
+    my $pm = pop @parts;
+    my $main_pm_file = File::Spec->catfile( "lib", @parts, "${pm}.pm" );
+       $main_pm_file =~ s{\\}{/}g; # even on Win32, use forward slash
+
+    my $fname = File::Spec->catfile( $self->{basedir}, "Build.PL" );
+    
+    if (-e $fname) {
+	$self->progress( "Skipped $fname" );
+    } else {
+	open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
+	print $fh $self->Build_PL_guts($main_module, $main_pm_file);
+	close $fh;
+	$self->progress( "Created $fname" );
+    }
+
+    return "Build.PL";
+}
+
+sub create_Changes {
+    my $self = shift;
+
+    my $fname = File::Spec->catfile( $self->{basedir}, "Changes" );
+
+    if (-e $fname) {
+	$self->verbose( "Skipped $fname" );
+    } else {
+	open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
+	print $fh $self->Changes_guts();
+	close $fh;
+	$self->verbose( "Created $fname" );
+    }
+
+    return "Changes";
+}
+
+sub create_README {
+    my $self = shift;
+    my $build_instructions = shift;
+
+    my $fname = File::Spec->catfile( $self->{basedir}, "README" );
+
+    if (-e $fname) {
+	$self->verbose( "Skipped $fname" );
+    } else {
+	open( my $fh, ">", $fname ) or die "Can't create $fname: $!\n";
+	print $fh $self->README_guts($build_instructions);
+	close $fh;
+	$self->verbose( "Created $fname" );
+    }
+
+    return "README";
+}
+
+sub _pull_modules {
+    my $basedir = shift;
+    return unless $basedir;
+    my $libdir = File::Spec->catdir($basedir, "lib");
+    return unless $libdir && -d $libdir;
+    return _list_modules($libdir);
+}
+
+sub _list_modules {
+    my $dir = shift;
+    my $prefix = shift || '';
+
+    opendir my $dh, $dir or die "Cannot opendir $dir: $!";
+    my @entries = grep { !/^\.{1,2}/ } readdir $dh;
+    close $dh;
+
+    my @modules = ();
+    for (@entries) {
+        my $name = File::Spec->catfile($dir, $_);
+        push @modules, _list_modules($name, $prefix ? "$prefix\:\:$_": $_) and next if -d $name;
+        $_ =~ s/\.pm$// and push @modules, $prefix ? "$prefix\:\:$_": $_ if $name =~ /\.pm$/;
+    }
+
+    return sort @modules;
+}
+
+sub _pull_t {
+    my $basedir = shift;
+    return unless $basedir;
+    my $tdir = File::Spec->catdir($basedir, "t");
+    return unless $tdir && -d $tdir;
+    return _list_t($tdir);
+}
+
+sub _list_t {
+    my $dir = shift;
+
+    opendir my $dh, $dir or die "Cannot opendir $dir: $!";
+    my @entries = grep { !/^\.{1,2}/ && /\.t$/ } readdir $dh;
+    close $dh;
+
+    map { "t/$_"  } @entries;
+}
+
+# Remove duplicated entries
+sub _sort {
+    my %bag = map { $_ => 1 } @_;
+    sort keys %bag;
+}
+
+# Magic true value required at end of module
+1;
+
+__END__
+
+
+=head1 DEPENDENCIES
+
+Module::Starter::Smart relies on Module::Starter::Simple to properly function.
+Be sure to load Module::Starter::Simple or any of its subclasses before
+Module::Starter::Smart when importing Module::Starter.
+
+=head1 INCOMPATIBILITIES
+
+The plugin works perfectly with other template plugins, i.e. Module::Starter::PBP
+(I started this module with its built-in templates.  Hail Damian Conway!)
+
+=head1 BUGS AND LIMITATIONS
+
+No bugs have been reported.
+
+Please report any bugs or feature requests to
+C<bug-module-starter-smart at rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org>.
+
+=head1 ACKNOWLEDGEMENT
+
+Special thanks to David Messina, who wrote the entire section of use-cases.
+
+=head1 AUTHOR
+
+Ruey-Cheng Chen  C<< <rueycheng at gmail.com> >>
+
+=head1 LICENCE AND COPYRIGHT
+
+Copyright (c) 2006, Ruey-Cheng Chen C<< <rueycheng at gmail.com> >>. All rights reserved.
+
+This module is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself. See L<perlartistic>.
+
+=head1 DISCLAIMER OF WARRANTY
+
+BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE
+LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
+OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.

Added: branches/upstream/libmodule-starter-smart-perl/current/t/00.load.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/t/00.load.t?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/t/00.load.t (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/t/00.load.t Thu Dec 30 17:34:30 2010
@@ -1,0 +1,7 @@
+use Test::More tests => 1;
+
+BEGIN {
+use_ok( 'Module::Starter::Smart' );
+}
+
+diag( "Testing Module::Starter::Smart $Module::Starter::Smart::VERSION" );

Added: branches/upstream/libmodule-starter-smart-perl/current/t/pod-coverage.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/t/pod-coverage.t?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/t/pod-coverage.t (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/t/pod-coverage.t Thu Dec 30 17:34:30 2010
@@ -1,0 +1,8 @@
+#!perl -T
+
+use Test::More;
+eval "use Test::Pod::Coverage 1.04";
+plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage" if $@;
+plan tests => 1;
+my $trustme = { trustme => [qr/^create_/] };
+pod_coverage_ok('Module::Starter::Smart', $trustme);

Added: branches/upstream/libmodule-starter-smart-perl/current/t/pod.t
URL: http://svn.debian.org/wsvn/pkg-perl/branches/upstream/libmodule-starter-smart-perl/current/t/pod.t?rev=66653&op=file
==============================================================================
--- branches/upstream/libmodule-starter-smart-perl/current/t/pod.t (added)
+++ branches/upstream/libmodule-starter-smart-perl/current/t/pod.t Thu Dec 30 17:34:30 2010
@@ -1,0 +1,6 @@
+#!perl -T
+
+use Test::More;
+eval "use Test::Pod 1.14";
+plan skip_all => "Test::Pod 1.14 required for testing POD" if $@;
+all_pod_files_ok();




More information about the Pkg-perl-cvs-commits mailing list