I have a module which makes connections to databases via the Perl 
DBI by way of
information stored via AppConfig (ABW's CPAN module)... which 
actually means
via an AppConfig file or via simple or complex command-line 
control. Docs included below.

I am torn between naming it AppConfig::DBI and DBIx::Connect. 
Randy Ray made a great
point when he thought that naming it AppConfig::DBI would imply 
that I had implemented
a way of configuring apps via databases. So I renamed it DBIx::Connect.

Perhaps DBIx::AppConfig::Connect is the best name?

NAME
     DBIx::Connect - support for DBI connection (info) via AppConfig

SYNOPSIS
      # .cshrc
      setenv APPCONFIG /Users/metaperl/.appconfig
      setenv DBIX_CONN "${APPCONFIG}-dbi"

      # .appconfig-dbi
      [basic]
      user   = postgres
      pass   = <STDIN>
      dsn    = dbi:Pg:dbname=mydb
      attr RaiseError =  0
      attr PrintError =  0
      attr Taint      =  1

      # DBIx::AnyDBD usage:
      my @connect_data = DBIx::Connect->data_for('dev_db');
      my $dbh          = DBIx::AnyDBD->connect(@connect_data, "MyClass");

      # pure DBI usage
      use DBIx::Connect;

      my $config = shift or die "must give label for config";
      my $dbh    = DBIx::Connect->to($config);

      # over-ride .appconfig-dbi from the command line:
      perl dbi-script.pl basic -basic_user tim_bunce -basic_pass 
dbi_rocks
      perl dbi-script.pl basic -basic_attr "RaiseError=1" 
-basic_attr "Taint=0"

DESCRIPTION
     This module facilitates DBI-style or DBIx::AnyDBD-style database
     connections for sites and applications which make use of 
AppConfig to
     configure their applications via files and/or command-line 
arguments.

     It provides two methods, "to" and "data_for" which return a 
DBI database
     handle and an array of DBI connection info, respectively.

     Each of the 4 DBI connection parameters (username, password, 
dsn, attr)
     can be defined via any of the methods supported by AppConfig, 
meaning
     via a configuration file, or simple-style command-line arguments.
     AppConfig also provides support for both simple and 
Getopt::Long style,
     but Getopt::Long is overkill for a module this simple.

RELATED MODULES / MOTIVATION FOR THIS ONE
     The only module similar to this on CPAN is DBIx::Password. 
Here are some
     points of comparison/contrast.

     * DBI configuration info location
         DBIx::Password uses an autogenerated Perl module for its 
connection
         data storage. DBIx::Connect uses a Windows INI-style 
AppConfig file
         for its connection information.

         The advantage of a config file is that each programmer 
can have his
         own config file whereas it could prove tedious for each 
programmer
         to have his own personal copy of a Perl configuration module.

         Not to mention the fact that if each Perl module in your large
         application went this route, you would be stuck with n-fold Perl
         configuration modules as opposed to one centralized 
AppConfig file.
         For example, my module SQL::Catalog, used to use 
on-the-fly Config
         modules and Net::FTP::Common did as well.

     * Routes to configurability and password security
         DBIx::Password DBI connection options (username, password, dsn,
         attr) are not over-ridable or settable at the command line. This
         means passwords must be stored in the configuration file 
and that
         efforts must be taken to make a module readable by a program not
         readable by a human.

         In contrast, DBIx::Connect can add configuration 
information upon
         invocation via the command-line or via the 
"read-from-STDIN-flag",
         "<STDIN">, which will overwrite or set arguments which 
could have
         been in the configuration file, which means your 
passwords need not
         be stored on disk at all.

     * Support for indirect connection
         vis-a-vis connection, DBIx::Password has one method, 
"connect" which
         returns a $dbh. While DBIx::Connect also supplies such a method
         (named "to"), it also supplies a "data_for" method which 
returns an
         array which can be passed to any other DBI connection 
scheme, the
         must ubiquitous of which is DBIx::AnyDBD, which handles 
connections
         for you after you give it the connection data.

         I submitted a patch to the author of DBIx::Password to 
support such
         functionality, but it was rejected on the grounds that
         DBIx::Password is designed to secure connection data, not 
make it
         available in any form or fashion.

   My CPAN module set will be AppConfig-dependant

     From now on, any module of mine which requires configuration 
info will
     use AppConfig to get it. I thought about using XML but a 
discussion on
     Perlmonks.Org and one on [EMAIL PROTECTED] both made strong arguments in
     favor of AppConfig.

   EXPORT

     None by default.

AUTHOR
     T. M. Brannon <[EMAIL PROTECTED]>

SEE ALSO
     DBIx::Password AppConfig AppConfig::Std DBI Term::ReadKey



$terrence = {
        hobby => Class::MakeMethods -> hacker (type => 'Just Another'),
        addiction => 'Chess on ICC as princepawn',
        job => 'seeking' ,
        URL => 'http://www.metaperl.com'
        };

Reply via email to