David R. Baird > MasonX-Maypole-0.215 > MasonX::Maypole

Download:
MasonX-Maypole-0.215.tar.gz

Dependencies

Annotate this POD

Related Modules

Class::DBI
Apache::ASP
CGI::Application
more...
By perlmonks.org

CPAN RT

New  1
Open  0
View/Report Bugs
Module Version: 0.215   Source   Latest Release: MasonX-Maypole-0.51

NAME ^

MasonX::Maypole - use Mason as the frontend and view for Maypole version 2

VERSION ^

Version 0.02_05

SYNOPSIS ^

    package BeerDB;
    use warnings;
    use strict;

    use Class::DBI::Loader::Relationship;

    use MasonX::Maypole 0.2;
    use base 'MasonX::Maypole';

    BeerDB->setup( 'dbi:mysql:beerdb' );

    BeerDB->config->{view}           = 'MasonX::Maypole::View';
    BeerDB->config->{template_root}  = '/var/www/beerdb';
    BeerDB->config->{uri_base}       = '/beerdb';
    BeerDB->config->{rows_per_page}  = 10;
    BeerDB->config->{display_tables} = [ qw( beer brewery pub style ) ];

    BeerDB->config->masonx->{comp_root}  = [ factory => '/var/www/maypole/factory' ];
    BeerDB->config->masonx->{data_dir}   = '/path/to/mason/data_dir';
    BeerDB->config->masonx->{in_package} = 'My::Mason::App';

    BeerDB::Brewery->untaint_columns( printable => [qw/name notes url/] );

    BeerDB::Style->untaint_columns( printable => [qw/name notes/] );

    BeerDB::Beer->untaint_columns(
        printable => [qw/abv name price notes/],
        integer => [qw/style brewery score/],
        date => [ qw/date/],
    );

    BeerDB->config->{loader}->relationship($_) for (
        "a brewery produces beers",
        "a style defines beers",
        "a pub has beers on handpumps");

    1;

DEVELOPER RELEASE ^

This release is fundamentally different from previous MasonX::Maypole releases, and will break sites that are using them. Previous releases did not work with Maypole 2. This and future releases will not work with Maypole 1.

DESCRIPTION ^

A frontend and view for Maypole 2, using Mason.

CONFIGURING MASON ^

Set any parameters for the Mason ApacheHandler in My::Maypole::App-config->{masonx}>. This is where to tell Maypole/Mason where the factory templates are stored.

Note that the user the server runs as must have permission to read the files in the factory templates directory, which also means all directories in the path to the templates must be readable and executable (i.e. openable). If Mason can't read these templates, you may get a cryptic 'file doesn't exist' error, but you will not get a 'not permitted' error.

TEMPLATES ^

This distribution includes Masonized versions of the standard Maypole templates, plus a dhandler and autohandler. The autohandler simply takes care of adding a header and footer to every page, while the dhandler loads the template specified in the Maypole request object.

So if you set the factory comp_root to point at the Maypole factory templates, the thing should Just Work right out of the box.

METHODS ^

init

This method is called by Maypole while processing the first request the server receives. Probably better under mod_perl to call this explicitly at the end of your setup code (BeerDB->init) to share memory among Apache children. Sets up the Mason ApacheHandler, including the search path behaviour.

set_mason_comp_roots

The default search path for a component is:

    /template_root/<table_moniker>/<component>  # if querying a table
    /template_root/custom/<component>
    /template_root/<component>
    /factory/template/root/<component>

where /factory/template/root defaults to /template_root/factory, but can be altered by providing a factory comp_root to the masonx config as shown in the synopsis.

You can provide extra component roots in the masonx config setup. For other modifications to the search path, make a subclass that overrides this method.

parse_args

Uses Mason to extract the request arguments from the request.

parse_location

This method is not implemented here, but in Apache::MVC. However, the method there assumes your Maypole app is configured in its own Location directive in the Apache config file. Here's a method that instead uses the base_url Maypole config parameter. Put it in your Maypole class if you need it:

    sub parse_location {
        my ( $self ) = @_;

        my $uri = $self->ar->uri;

        # Apache::MVC uses $self->ar->location here
        my $base = $self->config->uri_base;

        ( my $path = $uri ) =~ s/^($base)?\///;

        $self->path( $path );

        $self->parse_path;
        $self->parse_args;
    }
send_output

Template variables have already been exported to Mason components namespace in MasonX::Maypole::View::template. This method now runs the Mason Cexec> phase to generate and send output.

get_template_root

Returns template_root from the config.

This varies from Apache::MVC, which concatenates document_root and location from the Apache request server config.

AUTHOR ^

David Baird, <cpan@riverside-cms.co.uk>

TODO ^

Currently hard-coded to use Apache/mod_perl. Shouldn't be too hard to use CGI instead.

BUGS ^

Please report any bugs or feature requests to bug-masonx-maypole2@rt.cpan.org, or through the web interface at http://rt.cpan.org. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

TESTS ^

There are none. The module loads Mason::ApacheHandler, which causes compile time errors unless loaded within mod_perl.

ACKNOWLEDGEMENTS ^

COPYRIGHT & LICENSE ^

Copyright 2004 David Baird, All Rights Reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

syntax highlighting: