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 )