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.