Al Newkirk > MongoDBI-0.0.12 > MongoDBI::Application

Download:
MongoDBI-0.0.12.tar.gz

Dependencies

Annotate this POD

Website

View/Report Bugs
Module Version: 0.0.12   Source   Latest Release: MongoDBI-0.02

NAME ^

MongoDBI::Application - MongoDBI Application Class and Document Class Controller

VERSION ^

version 0.0.12

SYNOPSIS ^

    package CDDB;

    use MongoDBI;
    
    app {
    
        # shared mongodb connection
        database => {
            name => 'mongodbi_cddb',
            host => 'mongodb://localhost:27017'
        },
    
        # load child doc classes
        classes => {
            self => 1 # loads CDDB::*
        }
    
    };
    
    1;

DESCRIPTION ^

MongoDBI::Application is used to load and configure associated document classes. It is essentially the application hub (or starting-point). Because all MongoDBI document classes can have their own database configuration, and thus need to be setup individually, MongoDBI::Application can be used to bring those individual classes together to form a single application.

MongoDBI::Application exports the app() method which allows you to configure your application having the configuration applied to all associated document classes. MongoDBI::Application will also load all associated classes and make them available through the class() method after instantiation.

Modeling your database schema will involve learning how models are crafted using MongoDBI::Document, please read that documentation towards getting started. Enjoy!!!

EXPORTS ^

app

The app method will be exported into the calling class allowing it to configure all associated document classes. MongoDBI::Document classes are designed so that each class may use a different database connection for greater flexibility, however there are times when you will want/need all of your application's document classes to share a single database connection and MongoDBI::Application allows you to do that. MongoDBI::Application can also preload specified classes. MongoDBI::Application also handling connection pooling seamlessly.

The following examples are recognized parameters the app() method uses to configure your application.

    # share mongodb connection across all document classes
    app {
        
        # shared mongodb connection
        # accepts all parameters MongoDB::Connection does
        database => {
            name => 'mongodbi_cddb',
            host => 'mongodb://localhost:27017'
        }
        
    };
    
    # load desired document classes 
    app {
        
        classes => {
            self => 1, # cascade, loads all classes under the current namespace
            load => [
                'Other::Classes', # does not cascade
                'More::Classes', # does not cascade
            ]
        }
        
    };
    
    # connection pooling, clustered master/slave environments
    app {
        
        master => {
            name => 'mongodbi_cddb',
            host => 'mongodb://localhost:27017'
        },
        slaves => [{
            name => 'mongodbi_cddb',
            host => 'mongodb://192.168.1.101:27017'
        },{
            name => 'mongodbi_cddb',
            host => 'mongodb://192.168.1.102:27017'
        },{
            name => 'mongodbi_cddb',
            host => 'mongodb://192.168.1.103:27017'
        }]
        
    };

ATTRIBUTES ^

config

The config attribute gives you access to the MongoDBI::Application class configuration although it is likely you will never need to used it as the important elements are all exposed via methods.

    my $app = App->new;
    
    $app->config;

METHODS ^

class

The class method returns the class (string, uninstantiated) for the associated document class registered by the app() method. The class method accepts a class short-name and returns the fully-qualified class name.

    my $app = App->new;
    
    # base class name under same namespace not required (e.g. app_*)
    
    my $foo = $app->class('foo'); # returns App::Foo;
    my $bar = $app->class('bar_baz'); # returns App::BarBaz;
    
    # must specify the base class name on foreign classes
    
    my $xyz = $app->class('app2_xyz'); # returns App2::XYZ;
    
    # if you're a stickler for convention,
    # you can also use case-appropriate syntax
    
    my $foo = $app->class('Foo'); # returns App::Foo;
    my $bar = $app->class('BarBaz'); # returns App::BarBaz;

AUTHOR ^

Al Newkirk <awncorp@cpan.org>

COPYRIGHT AND LICENSE ^

This software is copyright (c) 2011 by awncorp.

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

syntax highlighting: