- BUGS AND CAVEATS
- SEE ALSO
- COPYRIGHT AND LICENSE
Rose::DBx::MoreConfig - Rose::DB base class with extra configuration options
package My::Data::Source; use parent 'Rose::DBx::MoreConfig'; ... define data sources ... __PACKAGE__->auto_load_fixups; ...
This package provides a base class for modules defining Rose::DB data sources. It extends Rose::DB to allow more flexibility in placement of the YAML configuration file, in order to better accommodate packaged distributions, shared repositories, and the like.
Because it's common to break up data sources for different and possibly overlapping projects into several classes, it's difficult to store credentials for each datasource using Rose::DB's default YAML configuration scheme. It's built around the idea of a single rc file, but complains if that file includes fixups for data sources not known when the current class calls
auto_load_fixups. So we override the Rose::DB default behavior in two ways:
Warnings for data found in the rc file that apply to a data source we haven't (yet) seen are suppressed. This allows you to use a global rc file to supply credentials for several different classes.
Several different possibilities are checked, in order, for rc files:
A .rosedbrc file in the same directory as Rose/DB.pm
A .rosedbrc file in your home directory
A .rosedbrc file in the same directory as the Perl module for the calling class. (This assumes that the class is defined in a .pm file with the same name as the class, as is typical.)
If more than one of these files are present, they are evaluated in the order shown, so you can override values from "systemwide" files with "class-local" files.
One of the goals of the "local .rosedbrc" option provided here is to facilitate the distribution of Rose::DB-derived classes for a particular set of databases as packages or in an application's local library tree. However, for the same reasons that you want the content in your .rosedbrc separate from the rest of your module, you will likely not want to store a .rosedbrc with user credentials in a SCM repository that is visible by others. Depending on your SCM system, you may be able to exclude this file via an "ignore me" configuration directive (e.g. a .gitignore file or
svn:ignore property). Othewise, you will need to keep these files outside the development tree and include them when you build or deploy your distribution.
Any message that can be returned by an included package. Warnings generated by Rose::DB about unrecognized data sources encountered in a configuration file are suppressed.
Are there, for certain, but have yet to be cataloged. Please don't hesitate to report any you find, using either CPAN or GitHub.
Charles Bailey <email@example.com>
Copyright (C) 2015 by Charles Bailey
This software may be used under the terms of the Artistic License or the GNU General Public License, as the user prefers.
The code incorporated into this package was originally written with United States federal funding as part of research work done by the author at the Children's Hospital of Philadelphia.