[Rt-commit] [svn] r1184 - in DBIx-SearchBuilder/trunk: . SearchBuilder

jesse at pallas.eruditorum.org jesse at pallas.eruditorum.org
Wed Jul 7 12:31:30 EDT 2004


Author: jesse
Date: Wed Jul  7 12:31:29 2004
New Revision: 1184

Modified:
   DBIx-SearchBuilder/trunk/   (props changed)
   DBIx-SearchBuilder/trunk/Changes
   DBIx-SearchBuilder/trunk/META.yml
   DBIx-SearchBuilder/trunk/SIGNATURE
   DBIx-SearchBuilder/trunk/SearchBuilder.pm
   DBIx-SearchBuilder/trunk/SearchBuilder/Record.pm
Log:
 ----------------------------------------------------------------------
 r2076 at tinbook:  jesse | 2004-07-07T16:31:21.661837Z
 
 
 Revision history for Perl extension DBIx::SearchBuilder.
 
 1.02_01 Wed Jul  7 12:28:08 EDT 2004
         - magic _Object instantiation from cubic at acronis.ru
         - make SB::_Handle settable directly  (cubic at acronis.ru)
         - document the above        
 
 ----------------------------------------------------------------------


Modified: DBIx-SearchBuilder/trunk/Changes
==============================================================================
--- DBIx-SearchBuilder/trunk/Changes	(original)
+++ DBIx-SearchBuilder/trunk/Changes	Wed Jul  7 12:31:29 2004
@@ -1,5 +1,15 @@
 Revision history for Perl extension DBIx::SearchBuilder.
 
+1.02_01 Wed Jul  7 12:28:08 EDT 2004
+        - magic _Object instantiation from cubic at acronis.ru
+        - make SB::_Handle settable directly  (cubic at acronis.ru)
+        - document the above        
+
+
+1.01    Sun Jun 27 23:35:46 EDT 2004
+
+        - Releasing 1.00_06 as stable
+
 1.00_06 - Pg/Oracle: Don't attempt to do case insensitive comparisons on
           integer values.
 

Modified: DBIx-SearchBuilder/trunk/META.yml
==============================================================================
--- DBIx-SearchBuilder/trunk/META.yml	(original)
+++ DBIx-SearchBuilder/trunk/META.yml	Wed Jul  7 12:31:29 2004
@@ -1,5 +1,5 @@
 name: DBIx-SearchBuilder
-version: 1.00_05
+version: 1.02_01
 license: perl
 distribution_type: module
 build_requires:

Modified: DBIx-SearchBuilder/trunk/SIGNATURE
==============================================================================
--- DBIx-SearchBuilder/trunk/SIGNATURE	(original)
+++ DBIx-SearchBuilder/trunk/SIGNATURE	Wed Jul  7 12:31:29 2004
@@ -14,33 +14,34 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-SHA1 6b86a2386aecfa50985724130a8eba17c07fe846 Changes
-SHA1 4c80b9b3ced55a0a392956e4bb988e9f5c33c0c5 MANIFEST
+SHA1 cdcfe8762beecc2efa51d97ebbb9c8d2c42b4c9e Changes
+SHA1 f5a02a65c7d73ceb666d3351cdede865555f5fd4 MANIFEST
 SHA1 8541c8988476422ee38fbc8714c1dd45b212f7fb MANIFEST.SKIP
-SHA1 b7612c5c409f89caa2643c97cf8066afbd50707b META.yml
+SHA1 d85c5711b3a5445b0f478788b0791011d8c6f7ad META.yml
 SHA1 2948c70821e3394e345c1b5e5352abd01219680d Makefile.PL
-SHA1 bc9bdb43882d388cdf40593327563124e001755f SearchBuilder.pm
-SHA1 8b6334d48acaf0a345b71774a4095c569c83dd97 SearchBuilder/Handle.pm
+SHA1 fd5d94a3ba7e72d70f82358ef3bc689b549b40ab SearchBuilder.pm
+SHA1 4a91b3855a941fc5dd5c7e8edd7b50e27820d51f SearchBuilder/Handle.pm
 SHA1 68a6d7d744e5d123e3c8b59041d12253fcee5d04 SearchBuilder/Handle/Informix.pm
 SHA1 35f764ab7e3c675ffc568f5bcb1ebf921813d801 SearchBuilder/Handle/ODBC.pm
 SHA1 6f9abc7ece4b28988fa53f45ccafb7bc31454588 SearchBuilder/Handle/Oracle.pm
-SHA1 2f2b69089f17dde2758a11aef136df41330c3194 SearchBuilder/Handle/Pg.pm
+SHA1 18332427eebac78ea1e6bb8f6ba281f63f65bbf7 SearchBuilder/Handle/Pg.pm
 SHA1 2d651d9a1b941be09a2b956a8d7475822da6b662 SearchBuilder/Handle/SQLite.pm
+SHA1 97af6fa4d25c34fa9ffd03c50463fa78d283b2d6 SearchBuilder/Handle/Sybase.pm
 SHA1 cf4420e25ae28aa09fbf5e12643ff43f6a2d9241 SearchBuilder/Handle/mysql.pm
 SHA1 e9716814b99c423b8e3f46c68a86363047b408fd SearchBuilder/Handle/mysqlPP.pm
 SHA1 dfb989fdac5a6df1a677e3fbd4084ef54d61b1bb SearchBuilder/Record.pm
 SHA1 4be7e87f7a4679b36e3ac5e8b44180c52abc8925 SearchBuilder/Record/Cachable.pm
 SHA1 437511f27cc1319839143e560368fa1ceb4d697a SearchBuilder/Union.pm
-SHA1 1c4a7470ed3ccf5c4145c942f861e8c38d51ba8d inc/Module/Install.pm
-SHA1 54278b050ddfc2e0c852197e1f2195b94abf05b4 inc/Module/Install/Base.pm
-SHA1 cd57a7aec4ec3a938e4a243e4a83dc6798c904c6 inc/Module/Install/Makefile.pm
-SHA1 6096a872f6cfe1fb533f405ff6aea7822e874365 inc/Module/Install/Metadata.pm
+SHA1 90c19f4d1cef235e05176f2e89227351a4b65264 inc/Module/Install.pm
+SHA1 9d69487127cef5f79db775e9a3de93bb9d90cd71 inc/Module/Install/Base.pm
+SHA1 28d2deeca781323948253499889536f28ea0d636 inc/Module/Install/Makefile.pm
+SHA1 427c6d91969cbb8e014f3ffe70a63c65573f9d4f inc/Module/Install/Metadata.pm
 SHA1 9768f7bbbd233cb9f2924db07f2f3c3a421a1c4b t/00.load.t
 SHA1 e9c6a5881fc60173fbc8d479c1afd2ce3b43bef1 t/pod.t
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.2.4 (Darwin)
 
-iD8DBQFApCu7Ei9d9xCOQEYRAjRPAKCWOIxRWWekZotD9u1Pu+dSFZhaPgCeNIha
-E4uHrCf4phY0PWDDPWThfE8=
-=Zmte
+iD8DBQFA35QvEi9d9xCOQEYRAjCoAJkBvS/Hw0e5LvL3eZxe6TmVKipWwwCfQ+nn
+3sJlaMENnYHN+VwOENq0el0=
+=23t8
 -----END PGP SIGNATURE-----

Modified: DBIx-SearchBuilder/trunk/SearchBuilder.pm
==============================================================================
--- DBIx-SearchBuilder/trunk/SearchBuilder.pm	(original)
+++ DBIx-SearchBuilder/trunk/SearchBuilder.pm	Wed Jul  7 12:31:29 2004
@@ -5,7 +5,7 @@
 use strict;
 use vars qw($VERSION);
 
-$VERSION = "1.00_06";
+$VERSION = "1.02_01";
 
 =head1 NAME
 
@@ -91,8 +91,18 @@
 # }}}
 
 # {{{ sub _Handle
+
+=head2 _Handle  [DBH]
+
+Get or set this object's DBI database handle.
+
+=cut
+
 sub _Handle {
     my $self = shift;
+    if (@_) {
+        $self->{'DBIxHandle'} = shift;
+    }
     return ( $self->{'DBIxHandle'} );
 }
 
@@ -1439,7 +1449,7 @@
 
 =head1 AUTHOR
 
-Copyright (c) 2001 Jesse Vincent, jesse at fsck.com.
+Copyright (c) 2001-2004 Jesse Vincent, jesse at fsck.com.
 
 All rights reserved.
 

Modified: DBIx-SearchBuilder/trunk/SearchBuilder/Record.pm
==============================================================================
--- DBIx-SearchBuilder/trunk/SearchBuilder/Record.pm	(original)
+++ DBIx-SearchBuilder/trunk/SearchBuilder/Record.pm	Wed Jul  7 12:31:29 2004
@@ -408,9 +408,7 @@
 
     *{$AUTOLOAD} = sub { return ($_[0]->_Value($Attrib))};
     return($self->_Value($Attrib));
-  }
-    
-  elsif ($AUTOLOAD =~ /.*::[sS]et_?(\w+)/o) {
+  } elsif ($AUTOLOAD =~ /.*::[sS]et_?(\w+)/o) {
 
     if ($self->_Accessible($1,'write')) {
       my $Attrib = $1;
@@ -432,8 +430,23 @@
     else { 
       return(0, 'Nonexistant field?');
     }
+  } elsif ($AUTOLOAD =~ /.*::(\w+?)_?[oO]bj$/o) {
+    if ($self->_Accessible($1,'object')) {
+      my $Attrib = $1;
+      *{$AUTOLOAD} = sub {
+      	my $s = shift;
+      	return $s->_Object(
+      			Field => $Attrib,
+      			Args => [@_],
+      		);
+      };
+      return $self->_Object( Field => $Attrib, Args => [@_] );
+    } else {
+      return(0, 'No object mapping for field');
+    }
   }
 
+
   #Previously, I checked for writability here. but I'm not sure that's the
   #right idea. it breaks the ability to do ValidateQueue for a ticket
   #on creation.
@@ -720,6 +733,50 @@
   }	
 
 # }}}	
+# {{{ sub _Object 
+
+=head2 _Object
+
+_Object takes a single column name and an array reference.
+It creates new object instance of class specified in _ClassAccessable
+structure and calls LoadById on recently created object with the
+current column value as argument. It uses the array reference as
+the object constructor's arguments.
+Subclasses can override _Object to insert custom access control or
+define default contructor arguments.
+
+=cut
+
+sub _Object
+{
+  my $self = shift;
+  return $self->__Object(@_);
+}
+
+sub __Object
+{
+  my $self = shift;
+  my %args = ( Field => '', Args => [], @_ );
+
+  my $field = $args{'Field'};
+  my $class = $self->_Accessible( $field, 'object' );
+
+# Globs magic to be sure that we call 'eval "require $class"' only once
+# because eval is quite slow -- cubic at acronis.ru
+  no strict qw( refs );
+  my $vglob = ${ $class . '::' }{'VERSION'};
+  unless ( $vglob && *$vglob{'SCALAR'} ) {
+    eval "require $class";
+    die "Couldn't use $class: $@" if ( $@ );
+    unless ( $vglob && *$vglob{'SCALAR'} ) {
+      *{$class."::VERSION"} = '-1, By DBIx::SerchBuilder';
+    }
+  }
+
+  my $object = $class->new( @{ $args{'Args'} } );
+  $object->LoadById( $self->__Value( $field ) );
+  return $object;
+}
 
 # }}}
   


More information about the Rt-commit mailing list