Fix instanciating an object from the database. Write core Crud properties to the db.

This commit is contained in:
Colin Kuskie 2010-11-04 17:13:54 -07:00
parent 2e79a4b52f
commit 87f49191db
2 changed files with 32 additions and 27 deletions

View file

@ -105,7 +105,7 @@ around BUILDARGS => sub {
WebGUI::Error::ObjectNotFound->throw(error=>'no such '.$tableKey, id=>$identifier);
}
$data->{session} = $session;
return $class->$orig(@_);
return $class->$orig($data);
};
=head1 NAME
@ -466,7 +466,7 @@ sub crud_updateTable {
foreach my $property_name (@property_names) {
my $property = $class->meta->find_attribute_by_name($property_name);
my $form_properties = $property->form;
my $control = WebGUI::Form::DynamicField->new( $session, fieldType => $form_properties->fieldType,);
my $control = WebGUI::Form::DynamicField->new( $session, fieldType => $form_properties->{fieldType},);
my $fieldType = $control->getDatabaseFieldType;
my $isKey = $property->isQueryKey;
my $default = $property->default;
@ -972,6 +972,13 @@ sub write {
}
$data->{$property_name} = $value;
}
my $tableKey = $self->meta->tableKey;
$data->{$tableKey} = $self->$tableKey;
$data->{lastUpdated} = $self->lastUpdated;
$data->{dateCreated} = $self->dateCreated;
if (my $sequenceKey = $self->meta->sequenceKey) {
$data->{$sequenceKey} = $self->$sequenceKey;
}
$session->db->setRow($self->tableName, $self->tableKey, $data);
}

View file

@ -30,11 +30,9 @@ extends 'WebGUI::Crud';
define tableName => 'some_crud_table';
define tableKey => 'id';
property id => (
has id => (
required => 1,
is => 'ro',
label => 'id',
fieldType => 'hidden',
);
package main;
@ -73,15 +71,15 @@ $sth->finish;
my $record1 = WebGUI::Cruddy->new($session);
can_ok($record1, 'id');
isa_ok($record1, "WebGUI::Crud", "isa WebGUI::Crud");
like($record1->get('dateCreated'), qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "dateCreated looks like a date");
like($record1->get('lastUpdated'), qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "lastUpdated looks like a date");
like($record1->get('sequenceNumber'), qr/\d+/, "sequenceNumber looks like a number");
is($record1->get('sequenceNumber'), 1, "record 1 sequenceNumber is 1");
like($record1->get('id'), qr/[A-Za-z0-9_-]{22}/, "id looks like a guid");
like($record1->dateCreated, qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "dateCreated looks like a date");
like($record1->lastUpdated, qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "lastUpdated looks like a date");
like($record1->sequenceNumber, qr/\d+/, "sequenceNumber looks like a number");
is($record1->sequenceNumber, 1, "record 1 sequenceNumber is 1");
like($record1->id, qr/[A-Za-z0-9_-]{22}/, "id looks like a guid");
# custom id
my $record2 = WebGUI::Cruddy->new($session, {id=>'theshawshankredemption'});
is($record2->get('id'),'theshawshankredemption',"custom id works");
is($record2->id,'theshawshankredemption',"custom id works");
$record2->delete;
# instanciation
@ -92,39 +90,39 @@ my $copyOfRecord2 = WebGUI::Cruddy->new($session, $record2->getId);
is($record2->getId, $copyOfRecord2->getId, "can reinstanciate record");
# sequencing
is($record2->get('sequenceNumber'), 2, "record 1 sequenceNumber is 2");
my $record3 = WebGUI::Cruddy->create($session);
is($record3->get('sequenceNumber'), 3, "record 1 sequenceNumber is 3");
my $record4 = WebGUI::Cruddy->create($session);
is($record4->get('sequenceNumber'), 4, "record 1 sequenceNumber is 4");
is($record2->sequenceNumber, 2, "record 1 sequenceNumber is 2");
my $record3 = WebGUI::Cruddy->new($session);
is($record3->sequenceNumber, 3, "record 1 sequenceNumber is 3");
my $record4 = WebGUI::Cruddy->new($session);
is($record4->sequenceNumber, 4, "record 1 sequenceNumber is 4");
ok($record4->demote, "demotion reports success");
is($record4->get('sequenceNumber'), 4, "can't demote further than end");
is($record4->sequenceNumber, 4, "can't demote further than end");
ok($record1->promote, "promotion reports success");
is($record1->get('sequenceNumber'), 1, "can't promote further than beginning");
is($record1->sequenceNumber, 1, "can't promote further than beginning");
$record4->promote;
is($record4->get('sequenceNumber'), 3, "promotion from end works");
is($record4->sequenceNumber, 3, "promotion from end works");
$record4->demote;
is($record4->get('sequenceNumber'), 4, "demotion to end works");
is($record4->sequenceNumber, 4, "demotion to end works");
$record1->demote;
is($record1->get('sequenceNumber'), 2, "demotion from beginning works");
is($record1->sequenceNumber, 2, "demotion from beginning works");
$record1->promote;
is($record1->get('sequenceNumber'), 1, "promotion to beginning works");
is($record1->sequenceNumber, 1, "promotion to beginning works");
$record2->demote;
is($record2->get('sequenceNumber'), 3, "demotion from middle works");
is($record2->sequenceNumber, 3, "demotion from middle works");
$record2->promote;
is($record2->get('sequenceNumber'), 2, "promotion from middle works");
is($record2->sequenceNumber, 2, "promotion from middle works");
# deleting
ok($record2->delete, "deletion reports success");
my $copyOfRecord3 = WebGUI::Cruddy->new($session, $record3->getId);
my $copyOfRecord4 = WebGUI::Cruddy->new($session, $record4->getId);
is($copyOfRecord3->get('sequenceNumber'), '2', "deletion of record 2 moved record 3 to sequence 2");
is($copyOfRecord4->get('sequenceNumber'), '3', "deletion of record 2 moved record 4 to sequence 3");
is($copyOfRecord3->sequenceNumber, '2', "deletion of record 2 moved record 3 to sequence 2");
is($copyOfRecord4->sequenceNumber, '3', "deletion of record 2 moved record 4 to sequence 3");
# updating
sleep 1;
ok($copyOfRecord4->update, "update returns success");
isnt($copyOfRecord4->get('lastUpdated'), $copyOfRecord4->get('dateCreated'), "updates work");
isnt($copyOfRecord4->lastUpdated, $copyOfRecord4->get('dateCreated'), "updates work");
# retrieve data
my ($sql, $params) = WebGUI::Cruddy->getAllSql($session);