Fix RT#52630
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Script / Create.pm
1 package Catalyst::Script::Create;
2 use Moose;
3 use MooseX::Types::Moose qw/Bool Str/;
4 use namespace::autoclean;
5
6 with 'Catalyst::ScriptRole';
7
8 has force => (
9     traits        => [qw(Getopt)],
10     cmd_aliases   => 'nonew',
11     isa           => Bool,
12     is            => 'ro',
13     documentation => 'Force new scripts',
14 );
15
16 has debug => (
17     traits        => [qw(Getopt)],
18     cmd_aliases   => 'd',
19     isa           => Bool,
20     is            => 'ro',
21     documentation => 'Force debug mode',
22 );
23
24 has mechanize => (
25     traits        => [qw(Getopt)],
26     cmd_aliases   => 'mech',
27     isa           => Bool,
28     is            => 'ro',
29     documentation => 'use WWW::Mechanize',
30 );
31
32 has helper_class => (
33     isa     => Str,
34     is      => 'ro',
35     builder => '_build_helper_class',
36 );
37
38 sub _build_helper_class { 'Catalyst::Helper' }
39
40 sub run {
41     my ($self) = @_;
42
43     $self->_getopt_full_usage if !$self->ARGV->[0];
44
45     my $helper_class = $self->helper_class;
46     Class::MOP::load_class($helper_class);
47     my $helper = $helper_class->new( { '.newfiles' => !$self->force, mech => $self->mechanize } );
48
49     $self->_getopt_full_usage unless $helper->mk_component( $self->application_name, @ARGV );
50
51 }
52
53 __PACKAGE__->meta->make_immutable;
54
55 =head1 NAME
56
57 Catalyst::Script::Create - Create a new Catalyst Component
58
59 =head1 SYNOPSIS
60
61  myapp_create.pl [options] model|view|controller name [helper] [options]
62
63  Options:
64    --force        don't create a .new file where a file to be created exists
65    --mechanize    use Test::WWW::Mechanize::Catalyst for tests if available
66    --help         display this help and exits
67
68  Examples:
69    myapp_create.pl controller My::Controller
70    myapp_create.pl controller My::Controller BindLex
71    myapp_create.pl -mechanize controller My::Controller
72    myapp_create.pl view My::View
73    myapp_create.pl view MyView TT
74    myapp_create.pl view TT TT
75    myapp_create.pl model My::Model
76    myapp_create.pl model SomeDB DBIC::Schema MyApp::Schema create=dynamic\
77    dbi:SQLite:/tmp/my.db
78    myapp_create.pl model AnotherDB DBIC::Schema MyApp::Schema create=static\
79    dbi:Pg:dbname=foo root 4321
80
81  See also:
82    perldoc Catalyst::Manual
83    perldoc Catalyst::Manual::Intro
84
85 =head1 DESCRIPTION
86
87 Create a new Catalyst Component.
88
89 Existing component files are not overwritten.  If any of the component files
90 to be created already exist the file will be written with a '.new' suffix.
91 This behavior can be suppressed with the C<--force> option.
92
93 =head1 AUTHORS
94
95 Catalyst Contributors, see Catalyst.pm
96
97 =head1 COPYRIGHT
98
99 This library is free software, you can redistribute it and/or modify
100 it under the same terms as Perl itself.
101
102 =cut
103