Class::Loader(3pm) User Contributed Perl Documentation Class::Loader(3pm)NAME
Class::Loader - Load modules and create objects on demand.
VERSION
$Revision: 2.2 $
$Date: 2001/07/18 20:21:39 $
SYNOPSIS
package Web::Server;
use Class::Loader;
@ISA = qw(Class::Loader);
$self->_load( 'Content_Handler', {
Module => "Filter::URL",
Constructor => "new",
Args => [ ],
}
);
DESCRIPTION
Certain applications like to defer the decision to use a particular module till runtime. This is possible in perl, and is a useful trick in
situations where the type of data is not known at compile time and the application doesn't wish to pre-compile modules to handle all types
of data it can work with. Loading modules at runtime can also provide flexible interfaces for perl modules. Modules can let the programmer
decide what modules will be used by it instead of hard-coding their names.
Class::Loader is an inheritable class that provides a method, _load(), to load a module from disk and construct an object by calling its
constructor. It also provides a way to map modules names and associated metadata with symbolic names that can be used in place of module
names at _load().
METHODS
new()
A basic constructor. You can use this to create an object of Class::Loader, in case you don't want to inherit Class::Loader.
_load()
_load() loads a module and calls its constructor. It returns the newly constructed object on success or a non-true value on failure.
The first argument can be the name of the key in which the returned object is stored. This argument is optional. The second (or the
first) argument is a hash which can take the following keys:
Module
This is name of the class to load. (It is not the module's filename.)
Name
Symbolic name of the module defined with _storemap(). Either one of Module or Name keys must be present in a call to _load().
Constructor
Name of the Module constructor. Defaults to "new".
Args
A reference to the list of arguments for the constructor. _load() calls the constructor with this list. If no Args are present,
_load() will call the constructor without any arguments.
CPAN
If the Module is not installed on the local system, _load() can fetch & install it from CPAN provided the CPAN key is present. This
functionality assumes availability of a pre-configured CPAN shell.
_storemap()
Class::Loader maintains a class table that maps symbolic names to parameters accepted by _load(). It takes a hash as argument whose
keys are symbolic names and value are hash references that contain a set of _load() arguments. Here's an example:
$self->_storemap ( "URL" => { Module => "Filter::URL",
Constructor => "foo",
Args => [qw(bar baz)],
}
);
# time passes...
$self->{handler} = $self->_load ( Name => 'URL' );
_retrmap()
_retrmap() returns the entire map stored with Class::Loader. Class::Loader maintains separate maps for different classes, and
_retrmap() returns the map valid in the caller class.
SEE ALSO AnyLoader(3)AUTHOR
Vipul Ved Prakash, <mail@vipul.net>
LICENSE
Copyright (c) 2001, Vipul Ved Prakash. All rights reserved. This code is free software; you can redistribute it and/or modify it under the
same terms as Perl itself.
perl v5.10.1 2005-04-27 Class::Loader(3pm)
Check Out this Related Man Page
Class::DBI::Loader(3pm) User Contributed Perl Documentation Class::DBI::Loader(3pm)NAME
Class::DBI::Loader - Dynamic definition of Class::DBI sub classes.
SYNOPSIS
use Class::DBI::Loader;
my $loader = Class::DBI::Loader->new(
dsn => "dbi:mysql:dbname",
user => "root",
password => "",
options => { RaiseError => 1, AutoCommit => 0 },
namespace => "Data",
additional_classes => qw/Class::DBI::AbstractSearch/, # or arrayref
additional_base_classes => qw/My::Stuff/, # or arrayref
left_base_classes => qw/Class::DBI::Sweet/, # or arrayref
constraint => '^foo.*',
relationships => 1,
options => { AutoCommit => 1 },
inflect => { child => 'children' },
require => 1
);
my $class = $loader->find_class('film'); # $class => Data::Film
my $obj = $class->retrieve(1);
use with mod_perl
in your startup.pl
# load all tables
use Class::DBI::Loader;
my $loader = Class::DBI::Loader->new(
dsn => "dbi:mysql:dbname",
user => "root",
password => "",
namespace => "Data",
);
in your web application.
use strict;
# you can use Data::Film directly
my $film = Data::Film->retrieve($id);
DESCRIPTION
Class::DBI::Loader automate the definition of Class::DBI sub-classes. scan table schemas and setup columns, primary key.
class names are defined by table names and namespace option.
+-----------+-----------+-----------+
| table | namespace | class |
+-----------+-----------+-----------+
| foo | Data | Data::Foo |
| foo_bar | | FooBar |
+-----------+-----------+-----------+
Class::DBI::Loader supports MySQL, Postgres and SQLite.
See Class::DBI::Loader::Generic.
METHODS
new %args
additional_base_classes
List of additional base classes your table classes will use.
left_base_classes
List of additional base classes, that need to be leftmost, for example Class::DBI::Sweet (former Catalyst::Model::CDBI::Sweet).
additional_classes
List of additional classes which your table classes will use.
constraint
Only load tables matching regex.
exclude
Exclude tables matching regex.
debug
Enable debug messages.
dsn DBI Data Source Name.
namespace
Namespace under which your table classes will be initialized.
password
Password.
options
Optional hashref to specify DBI connect options
relationships
Try to automatically detect/setup has_a and has_many relationships.
inflect
An hashref, which contains exceptions to Lingua::EN::Inflect::PL(). Useful for foreign language column names.
user
Username.
require
Attempt to require the dynamically defined module, so that extensions defined in files. By default errors from imported modules are
suppressed. When you want to debug, use require_warn.
require_warn
Warn of import errors when requiring modules.
AUTHOR
Daisuke Maki "dmaki@cpan.org"
AUTHOR EMERITUS
Sebastian Riedel, "sri@oook.de" IKEBE Tomohiro, "ikebe@edge.co.jp"
THANK YOU
Adam Anderson, Andy Grundman, Autrijus Tang, Dan Kubb, David Naughton, Randal Schwartz, Simon Flack and all the others who've helped.
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
SEE ALSO
Class::DBI, Class::DBI::mysql, Class::DBI::Pg, Class::DBI::SQLite, Class::DBI::Loader::Generic, Class::DBI::Loader::mysql,
Class::DBI::Loader::Pg, Class::DBI::Loader::SQLite
perl v5.10.0 2007-03-22 Class::DBI::Loader(3pm)