NAME

Rose::Planter - Keep track of classes created with Rose::DB::Object::Loader.

SYNOPSIS

In My/Objects.pm :

    package My::Objects;

    use Rose::Planter
        loader_params => {
            class_prefix => "My::Object",
            db_class     => "My::DB",
        },
        nested_tables => {
            foo => [ qw(params) ]
        },
        convention_manager_params => {};

In plant.pl :

    #!/usr/bin/env perl

    Rose::Planter->plant("My::Objects" => "My/Objects/autolib");

In another file :

    use My::Objects;

    my $class = Rose::Planter->find_class("my_table");
    my $object = Rose::Planter->find_object("my_table","my_key1","my_key2");

DESCRIPTION

This is a thin layer above Rose::DB::Object::Loader for keeping track of and managing classes which are created based on a database schema. It will transparently either query the database using Rose::DB::Object::Loader or use an auto-generated class hierarchy.

This module works well with Module::Build::Database and Clustericious to create a simple RESTful service based on a database schema. It can be used to provide a common base class, conventions, and settings for a collection of services, as well as describe which tables within a schema should be coupled with other tables during CRUD operations.

By default the loader is told that the base_class should be Rose::Planter::Soil. You can send "base_classes" or just "base_class" as loader_params to changes this.

nested_tables will cause find_object to automatically join tables connected to the primary table with a many-to-one relationship.

FUNCTIONS

plant

    Rose::Planter->plant($class => $dir)

Write a class hierarchy to disk. This will send the make_modules parameter to Rose::DB::Object::Loader. The directory used will default to My/Objects/autolib. This directory is also searched when My::Objects uses Rose::Planter.

For each class, if the class already exists in @INC, the source from that class will be included in the autogenerated class.

tables

Return a list of all tables.

regex_for_tables

Create a regex that matches all the tables.

plurals

Return a list of all plurals.

regex_for_plurals

Create a regex that matches all the plurals.

find_class

Given the name of a database table, return the object class associated with it. e.g.

    Rose::Planter->find_class("app");

If the table name ends in _def, the prefix may be used, e.g these are equivalent :

    Rose::Planter->find_class("esdt_def");
    Rose::Planter->find_class("esdt");

Also, given the plural of the name of a database table, return the manager class associated with it.

    Rose::Planter->find_class("esdts");
    Rose::Planter->find_class("apps");

find_object

Given a table and a primary or other unique key(s), find a load an object.

Return false if there is no object matching that key.

NOTES

This is a beta release. The API is subject to change without notice.

AUTHORS

Marty Brandon

Brian Duggan

Graham Ollis

Curt Tilmes

BUGS

Currently only really used/tested against postgres.