[Rt-commit] r3061 - in DBIx-SearchBuilder/trunk: . SearchBuilder t
Ruslan U. Zakirov
Ruslan.Zakirov at miet.ru
Fri Jun 3 05:58:54 EDT 2005
Hello, David.
IMHO this change duplicates a little Objects mapping functionality. At
least for read operation.
How about merge it in some way?
Also wouldn't it be confusing if some getters/setters return scalars,
but some - objects?
--
Regards, Ruslan.
glasser at bestpractical.com wrote:
>Author: glasser
>Date: Thu Jun 2 20:11:44 2005
>New Revision: 3061
>
>Modified:
> DBIx-SearchBuilder/trunk/ (props changed)
> DBIx-SearchBuilder/trunk/SearchBuilder/Record.pm
> DBIx-SearchBuilder/trunk/t/11schema_records.t
>Log:
> r33832 at tin-foil: glasser | 2005-06-02 17:57:40 -0400
> Reading and writing to (non-foreign) references. Recognition of foreign-collections,
> but doesn't do anything with them
>
>
>Modified: DBIx-SearchBuilder/trunk/SearchBuilder/Record.pm
>==============================================================================
>--- DBIx-SearchBuilder/trunk/SearchBuilder/Record.pm (original)
>+++ DBIx-SearchBuilder/trunk/SearchBuilder/Record.pm Thu Jun 2 20:11:44 2005
>@@ -431,22 +431,33 @@
>
> if ( $self->_Accessible( $Attrib, 'read' ) ) {
> *{$AUTOLOAD} = sub { return ( $_[0]->_Value($Attrib) ) };
>- goto &$AUTOLOAD;
>+ goto &$AUTOLOAD;
>+ }
>+ elsif ( $self->_Accessible( $Attrib, 'record-read') ) {
>+ *{$AUTOLOAD} = sub { $_[0]->_ToRecord( $Attrib, $_[0]->_Value($Attrib) ) };
>+ goto &$AUTOLOAD;
> }
> elsif ( $AUTOLOAD =~ /.*::[sS]et_?(\w+)/o ) {
>- $Attrib = $1;
>+ $Attrib = $1;
>
> if ( $self->_Accessible( $Attrib, 'write' ) ) {
>-
> *{$AUTOLOAD} = sub {
> return ( $_[0]->_Set( Field => $Attrib, Value => $_[1] ) );
> };
>- goto &$AUTOLOAD;
>- }
>+ goto &$AUTOLOAD;
>+ } elsif ( $self->_Accessible( $Attrib, 'record-write') ) {
>+ *{$AUTOLOAD} = sub {
>+ my $self = shift;
>+ my $val = shift;
>
>+ $val = $val->id if UNIVERSAL::isa($val, 'DBIx::SearchBuilder::Record');
>+ return ( $self->_Set( Field => $Attrib, Value => $val ) );
>+ };
>+ goto &$AUTOLOAD;
>+ }
> elsif ( $self->_Accessible( $Attrib, 'read' ) ) {
> *{$AUTOLOAD} = sub { return ( 0, 'Immutable field' ) };
>- goto &$AUTOLOAD;
>+ goto &$AUTOLOAD;
> }
> else {
> return ( 0, 'Nonexistant field?' );
>@@ -461,7 +472,7 @@
> Args => [@_],
> );
> };
>- goto &$AUTOLOAD;
>+ goto &$AUTOLOAD;
> }
> else {
> return ( 0, 'No object mapping for field' );
>@@ -476,7 +487,7 @@
> $Attrib = $1;
>
> *{$AUTOLOAD} = sub { return ( $_[0]->_Validate( $Attrib, $_[1] ) ) };
>- goto &$AUTOLOAD;
>+ goto &$AUTOLOAD;
> }
>
> # TODO: if autoload = 0 or 1 _ then a combination of lowercase and _ chars,
>@@ -586,9 +597,17 @@
> my $schema = $self->Schema;
>
> for my $field (keys %$schema) {
>- next unless $schema->{$field}{'TYPE'} or $schema->{$field}{'REFERENCES'};
>-
>- $accessible->{$field} = { 'read' => 1, 'write' => 1 };
>+ if ($schema->{$field}{'TYPE'}) {
>+ $accessible->{$field} = { 'read' => 1, 'write' => 1 };
>+ } elsif (my $refclass = $schema->{$field}{'REFERENCES'}) {
>+ if (UNIVERSAL::isa($refclass, 'DBIx::SearchBuilder::Record')) {
>+ $accessible->{$field} = { 'record-read' => 1, 'record-write' => 1 };
>+ } elsif (UNIVERSAL::isa($refclass, 'DBIx::SearchBuilder')) {
>+ $accessible->{$field} = { 'foreign-collection' => 1 };
>+ } else {
>+ warn "Error: $refclass neither Record nor Collection";
>+ }
>+ }
> }
>
> return $accessible;
>@@ -668,8 +687,7 @@
>
> sub __Value {
> my $self = shift;
>- my $origfield = shift;
>- my $field = lc $origfield;
>+ my $field = lc shift;
>
> if (!$self->{'fetched'}{$field} and my $id = $self->id() ) {
> my $pkey = $self->_PrimaryKey();
>@@ -683,9 +701,7 @@
> }
>
> my $value = $self->{'values'}{$field};
>-
>- $value = $self->_ToRecord($origfield, $value) if $self->can('Schema');
>-
>+
> return $value;
> }
> # }}}
>
>Modified: DBIx-SearchBuilder/trunk/t/11schema_records.t
>==============================================================================
>--- DBIx-SearchBuilder/trunk/t/11schema_records.t (original)
>+++ DBIx-SearchBuilder/trunk/t/11schema_records.t Thu Jun 2 20:11:44 2005
>@@ -9,7 +9,7 @@
> BEGIN { require "t/utils.pl" }
> our (@AvailableDrivers);
>
>-use constant TESTS_PER_DRIVER => 10;
>+use constant TESTS_PER_DRIVER => 17;
>
> my $total = scalar(@AvailableDrivers) * TESTS_PER_DRIVER;
> plan tests => $total;
>@@ -33,10 +33,11 @@
> my $emp = TestApp::Employee->new($handle);
> my $e_id = $emp->Create( Name => 'RUZ' );
> ok($e_id, "Got an id for the new employee: $e_id");
>+ $emp->Load($e_id);
>+ is($emp->id, $e_id);
> my $phone = TestApp::Phone->new($handle);
> isa_ok( $phone, 'TestApp::Phone');
> my $p_id = $phone->Create( Employee => $e_id, Phone => '+7(903)264-03-51');
>- # XXX: test fails if next string is commented
> is($p_id, 1, "Loaded phone $p_id");
> $phone->Load( $p_id );
>
>@@ -50,6 +51,24 @@
> # tests for no object mapping
> my $val = $phone->Phone;
> is( $val, '+7(903)264-03-51', 'Non-object things still work');
>+
>+ my $emp2 = TestApp::Employee->new($handle);
>+ isa_ok($emp2, 'TestApp::Employee');
>+ my $e2_id = $emp2->Create( Name => 'Dave' );
>+ ok($e2_id, "Got an id for the new employee: $e2_id");
>+
>+ $phone->SetEmployee($e2_id);
>+
>+ my $emp3 = $phone->Employee;
>+ isa_ok($emp3, 'TestApp::Employee');
>+ is($emp3->Name, 'Dave', 'changed employees by ID');
>+
>+ $phone->SetEmployee($emp);
>+
>+ my $emp4 = $phone->Employee;
>+ isa_ok($emp4, 'TestApp::Employee');
>+ is($emp4->Name, 'RUZ', 'changed employees by obj');
>+
>
> cleanup_schema( 'TestApp', $handle );
> }} # SKIP, foreach blocks
>_______________________________________________
>Rt-commit mailing list
>Rt-commit at lists.bestpractical.com
>http://lists.bestpractical.com/cgi-bin/mailman/listinfo/rt-commit
>
>
>
More information about the Rt-commit
mailing list