Maypole::Model::Base(3p)

NAME
Maypole::Model::Base - Base class for model classes

DESCRIPTION
Anyone subclassing this for a different database abstraction mechanism needs to provide the following methods:

  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 to "view", or "edit" if there were any errors. A hash of errors will be passed to the template.

  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.

  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".

  columns
This is a list of all the columns in a table. You may also override "display_columns", which is the list of columns you want to view, in the right order.

  table
This is the name of the table.

  Commands

list
    The "list" method should fill "$r-> objects" with all of the objects in the class. You may want to page this using "Data::Page" or similar.

Also, see the exported commands in "Maypole::Model::CDBI".

Other overrides
Additionally, individual derived model classes may want to override the following methods:

  column_names
Return a hash mapping column names with human-readable equivalents.

  description
A description of the class to be passed to the template.