File: Application.pm

package info (click to toggle)
maypole 2.10-1
  • links: PTS
  • area: main
  • in suites: etch-m68k
  • size: 472 kB
  • ctags: 108
  • sloc: perl: 1,345; makefile: 21
file content (131 lines) | stat: -rw-r--r-- 3,320 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package Maypole::Application;

use strict;
use warnings;
use UNIVERSAL::require;
use Maypole;
use Maypole::Config;

our @ISA;
our $VERSION = '2.09';

sub import {
    my ( $class, @plugins ) = @_;
    my $caller = caller(0);
    
    my $frontend = 'Apache::MVC' if $ENV{MOD_PERL};
    
    my $masonx;
    if ( grep { /^MasonX$/ } @plugins )
    {
        $masonx++;
        @plugins = grep { ! /^MasonX$/ } @plugins;
        $frontend = 'MasonX::Maypole';
    }
    
    $frontend ||= 'CGI::Maypole';
    
    $frontend->require or die "Loading $frontend frontend failed: $@";
    push @ISA, $frontend;

    my $autosetup=0;
    my @plugin_modules;
    {
        foreach (@plugins) {
            if    (/^\-Setup$/) { $autosetup++; }
            elsif (/^\-Debug(\d*)$/) {
                my $d = $1 || 1;
                no strict 'refs';
                *{"$caller\::debug"} = sub { $d };
                warn "Debugging (level $d) enabled for $caller";
            }
            elsif (/^-.*$/) { warn "Unknown flag: $_" }
            else {
                my $plugin = "Maypole::Plugin::$_";
                if ($plugin->require) {
                    push @plugin_modules, "Maypole::Plugin::$_";
		    unshift @ISA, "Maypole::Plugin::$_";
                    warn "Loaded plugin: $plugin for $caller"
                        if $caller->can('debug') && $caller->debug;
                } else {
                    die qq(Loading plugin "$plugin" for $caller failed: )
                        . $UNIVERSAL::require::ERROR;
                }
            }
        }
    }
    no strict 'refs';
    push @{"${caller}::ISA"}, @plugin_modules, $class;
    $caller->config(Maypole::Config->new);
    $caller->config->masonx({}) if $masonx;
    $caller->setup() if $autosetup;
}

1;

=head1 NAME

Maypole::Application - Universal Maypole Frontend

=head1 SYNOPSIS

    use Maypole::Application;

    use Maypole::Application qw(Config::YAML);

    use Maypole::Application qw(-Debug Config::YAML -Setup);

    use Maypole::Application qw(Config::YAML Loader -Setup -Debug);

    use Maypole::Application qw(-Debug2 MasonX AutoUntaint);

=head1 DESCRIPTION

This is a universal frontend for mod_perl1, mod_perl2, HTML::Mason and CGI.

You can omit the Maypole::Plugin:: prefix from plugins.
So Maypole::Plugin::Config::YAML becomes Config::YAML.

    use Maypole::Application qw(Config::YAML);

You can also set special flags like -Setup and -Debug.

    use Maypole::Application qw(-Debug Config::YAML -Setup);

The position of plugins and flags in the chain is important,
because they are loaded/executed in the same order they appear.

=head2 -Setup

    use Maypole::Application qw(-Setup);

is equivalent to

    use Maypole::Application;
    MyApp->setup;

Note that no options are passed to C<setup()>. You must ensure that the
required model config parameters are set in C<MyApp-E<gt>config>. See
L<Maypole::Config> for more information.

=head2 -Debug

    use Maypole::Application qw(-Debug);

is equivalent to

    use Maypole::Application;
    sub debug { 1 }

You can specify a higher debug level by saying C<-Debug2> etc. 

=head1 AUTHOR

Sebastian Riedel, C<sri@oook.de>
Idea by Marcus Ramberg, C<marcus@thefeed.no>

=head1 LICENSE

You may distribute this code under the same terms as Perl itself.

=cut