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

View file

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