package Module::New;
use strict;
use warnings;
use Carp;
use Module::New::Loader;
our $VERSION = '0.11';
my $CONTEXT;
sub options {qw( help|h|? author=s email=s force|f grace subdir|in=s )}
sub default { 'help' }
sub setup {
my ($class, @bases) = @_;
my $loader = Module::New::Loader->new( @bases );
$CONTEXT = $loader->load( 'Context', undef, @bases );
$CONTEXT->config->get_options( $class->options );
$CONTEXT;
}
sub context { $CONTEXT ? $CONTEXT : shift->setup }
sub dispatch {
my ($class, @bases) = @_;
$class->setup(@bases);
my $name = shift @ARGV || $class->default;
unshift @ARGV, $name if $CONTEXT->config('help');
my $recipe = $CONTEXT->loader->load_class( Recipe => $name );
$CONTEXT->config->get_options( $recipe->options );
croak "author is required" unless $CONTEXT->config('author');
croak "email is required" unless $CONTEXT->config('email');
$recipe->run( @ARGV );
}
1;
__END__
=head1 NAME
Module::New - creates module/distribution skeleton and more
From a command line
> module_new dist Dist-Name
> cd Dist-Name/trunk
> module_new file Dist::Name::Plugin
> module_new file t/dist_test.t --edit
> module_new manifest --force
=head1 DESCRIPTION
This is yet another module starter. You can use this not only when you create a new distribution but also when you add a new module or test or plain text to the distribution. You may want to edit a new file after creation. You may want to update MANIFEST. This'll do.
Generally, 'module_new' command takes one recipe (sub-command) name, arguments for the recipe and global or local options if any. See appropriate PODs for details.
=head1 METHODS
=head2 options
specifies global command line options, which all the recipes (sub-commands) should have.
=head2 default
specifies a default recipe which would be executed when you don't give any recipe ('help' by default).
=head2 dispatch
parses command line options and dispatches to the requested recipe.
=head2 setup
sets up a context object.
=head2 context
sets up a context object if necessary, and returns the object.
=head1 AUTHOR
Kenichi Ishigaki, E<lt>ishigaki at cpan.orgE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2007-2009 by Kenichi Ishigaki.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
=cut