dd3006e2db09aaf3d8150d8a9b5810d616c9720d
[catagits/CatalystX-Declare.git] / lib / CatalystX / Declare / Keyword / Application.pm
1 use MooseX::Declare;
2
3 class CatalystX::Declare::Keyword::Application
4     extends MooseX::Declare::Syntax::Keyword::Class {
5
6     
7     override auto_make_immutable { 0 }
8
9     override add_with_option_customizations (Object $ctx, Str $package, ArrayRef $plugins, HashRef $options) {
10
11         $ctx->add_cleanup_code_parts(
12             sprintf(
13                 '%s->setup(qw( %s ))',
14                 $package,
15                 join(' ', @$plugins),
16             ),
17             '1;',
18         );
19     }
20
21     before add_namespace_customizations (Object $ctx, Str $package) {
22
23         $ctx->add_preamble_code_parts(
24             'use CLASS',
25             'use parent q{Catalyst}',
26         );
27     }
28 }
29
30 =head1 NAME
31
32 CatalystX::Declare::Keyword::Application - Declare Catalyst Application Classes
33
34 =head1 SYNOPSIS
35
36     use CatalystX::Declare;
37
38     application MyApp::Web
39            with Static::Simple
40            with ConfigLoader {
41
42         $CLASS->config(name => 'My App');
43
44         method debug_timestamp {
45             $self->log->debug('Timestamp: ' . time)
46                 if $self->debug;
47         }
48     }
49
50 =head1 DESCRIPTION
51
52 This module provides a keyword handler for the C<application> keyword. It is an
53 extension of L<MooseX::Declare/class>. The role application mechanism behind 
54 the C<with> specification is hijacked and the arguments are passed to 
55 Catalyst's C<setup> method. This hijacking is proably going away someday since
56 in the future plugins will be actual roles.
57
58 You don't have to call the C<setup> method yourself, this will be done by the
59 handler after the body has been run.
60
61 =head1 SUPERCLASSES
62
63 =over
64
65 =item L<MooseX::Declare::Syntax::Keyword::Class>
66
67 =back
68
69 =head1 METHODS
70
71 =head2 auto_make_immutable
72
73     Bool Object->auto_make_immutable ()
74
75 A modified method that returns C<0> to signal to L<MooseX::Declare> that it 
76 should not make this class immutable. Currently, making application classes
77 immutable isn't supported yet, therefore C<is mutable> is currently a no-op.
78 This will likely change as soon as application classes can be made immutable,
79
80 =head1 SEE ALSO
81
82 =over
83
84 =item L<CatalystX::Declare>
85
86 =item L<MooseX::Declare/class>
87
88 =item L<MooseX::Declare::Syntax::Keyword::Class>
89
90 =back
91
92 =head1 AUTHOR
93
94 See L<CatalystX::Declare/AUTHOR> for author information.
95
96 =head1 LICENSE
97
98 This program is free software; you can redistribute it and/or modify it under 
99 the same terms as perl itself.
100
101 =cut