NAME
Maypole::Model::Base - Base class for model classes
DESCRIPTION
This is the base class for Maypole data models. This is an abstract class meant to define the interface, and can't be used directly.
process
This is the engine of this module. It populates all the relevant variables and calls the requested action.
Anyone subclassing this for a different database abstraction mechanism needs to provide the following methods:
setup_database
$model->setup_database($config, $namespace, @data)
Uses the user-defined data in @data
to specify a database- for example, by passing in a DSN. The model class should open the database, and create a class for each table in the database. These classes will then be adopt
ed. It should also populate $config->{tables}
and $config->{classes}
with the names of the classes and tables respectively. The classes should be placed under the specified namespace. For instance, beer
should be mapped to the class BeerDB::Beer
.
class_of
$model->class_of($r, $table)
This maps between a table name and its associated class.
retrieve
This turns an ID into an object of the appropriate class.
adopt
This is called on an model class representing a table and allows the master model class to do any set-up required.
columns
This is a list of all the columns in a table. You may also override see also display_columns
table
This is the name of the table.
Commands
- do_edit
-
If there is an object in
$r->objects
, then it should be edited with the parameters in$r->params
; otherwise, a new object should be created with those parameters, and put back into$r->objects
. The template should be changed toview
, oredit
if there were any errors. A hash of errors will be passed to the template. - list
-
The
list
method should fill$r-> objects
with all of the objects in the class. You may want to page this usingData::Page
or similar. - edit
-
Empty Action
- view
-
Empty Action.
Also, see the exported commands in Maypole::Model::CDBI
.
Other overrides
Additionally, individual derived model classes may want to override the following methods:
display_columns
Returns a list of columns to display in the model. by default returns all columns in alphabetical order. Override this in base classes to change ordering, or elect not to show columns.
list_columns
Same as display_columns, only for listings. Defaults to display_columns
column_names
Return a hash mapping column names with human-readable equivalents.
description
A description of the class to be passed to the template.
is_public
should return true if a certain action is supported, or false otherwise. Defaults to checking if the sub has the :Exported attribute.
related
This can go either in the master model class or in the individual classes, and returns a list of has-many accessors. A brewery has many beers, so BeerDB::Brewery
needs to return beers
.