Rose-DB-Object
view release on metacpan or search on metacpan
lib/Rose/DB/Object/Loader.pm view on Meta::CPAN
my $exclude = exists $args{'exclude_tables'} ?
delete $args{'exclude_tables'} : $self->exclude_tables;
my $filter = exists $args{'filter_tables'} ? delete $args{'filter_tables'} :
(!defined $include && !defined $exclude) ? $self->filter_tables : undef;
if($include || $exclude)
{
if($filter)
{
croak "The filter_tables parameter and/or object attribute cannot ",
"be used with the include_tables or exclude_tables parameters ",
"or object attributes";
}
if(defined $include)
{
if(ref $include eq 'ARRAY')
{
$include = '(?i)\A(?:' . join('|', map { quotemeta } @$include) . ')\z'
}
$include = qr((?i)$include);
}
if(defined $exclude)
{
if(ref $exclude eq 'ARRAY')
{
$exclude = '(?i)\A(?:' . join('|', map { quotemeta } @$exclude) . ')\z'
}
$exclude = qr((?i)$exclude);
}
$filter = sub
{
no warnings 'uninitialized';
return 0 if((defined $include && !/$include/) ||
(defined $exclude && /$exclude/));
return 1;
};
}
my $class_prefix = exists $args{'class_prefix'} ?
delete $args{'class_prefix'} : $self->class_prefix || '';
if(length $class_prefix)
{
unless($class_prefix =~ /^(?:\w+::)*\w+(?:::)?$/)
{
croak "Illegal class prefix: $class_prefix";
}
$class_prefix .= '::' unless($class_prefix =~ /::$/);
}
# Evil masking of object attribute
local $self->{'class_prefix'} = $class_prefix;
# When setting explicit values for attributes that cascade to
# affect other attributes, save off the old values are restore
# them at the end.
my %save;
if(exists $args{'db_class'})
{
my $db_class = delete $args{'db_class'};
if($db && $db_class && $db_class ne $db->class)
{
Carp::croak "The db and db_class parameters conflict: ", $db->class,
" vs. $db_class";
}
if(defined(my $db_class = $self->db_class))
{
$save{'db_class'} = $db_class;
}
if(defined(my $db = $self->db))
{
$save{'db'} = $db;
}
$self->db_class($db_class);
}
#
# Get or create the db object
#
$db ||= $self->db;
my $db_class = $db ? $db->class : undef;
my $made_new_db_class = 0;
unless($db)
{
$db_class = $self->db_class;
if($db_class)
{
unless(UNIVERSAL::isa($db_class, 'Rose::DB'))
{
my $error;
TRY:
{
local $@;
eval "require $db_class";
$error = $@;
}
if($error)
{
# Failed to load existing module
unless($error =~ /^Can't locate $db_class\.pm/)
{
croak "Could not load db class '$db_class' - $error";
( run in 0.944 second using v1.01-cache-2.11-cpan-39bf76dae61 )