Fix WebGUI::Crud to autowrite objects when created.

This commit is contained in:
Colin Kuskie 2010-11-28 22:01:26 -08:00
parent ef3cbf3303
commit 0983362204
3 changed files with 17 additions and 5 deletions

View file

@ -48,6 +48,11 @@ has sequenceNumber => (
default => 1,
);
has _dirty => (
is => 'rw',
default => 0,
);
sub _now {
my $self = shift;
return WebGUI::DateTime->new($self->session)->toDatabase;
@ -96,6 +101,7 @@ around BUILDARGS => sub {
$data->{session} = $session;
$data->{sequenceNumber} = $sequenceNumber;
$data->{$tableKey} = $data->{id} || $session->id->generate;
$data->{_dirty} = 1;
return $class->$orig($data);
}
@ -114,6 +120,13 @@ around BUILDARGS => sub {
return $class->$orig($data);
};
sub BUILD {
my $self = shift;
if ($self->_dirty) {
$self->write;
}
}
=head1 NAME
Package WebGUI::Crud
@ -967,6 +980,7 @@ sub write {
$data->{$sequenceKey} = $self->$sequenceKey;
}
$session->db->setRow($self->tableName, $self->tableKey, $data);
$self->_dirty(0);
}
1;

View file

@ -71,7 +71,6 @@ $sth->finish;
# check data
my $record1 = WebGUI::Cruddy->new($session);
$record1->write;
can_ok($record1, 'id');
isa_ok($record1, "WebGUI::Crud");
like($record1->dateCreated, qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "dateCreated looks like a date");
@ -79,6 +78,8 @@ like($record1->lastUpdated, qr/\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}/, "lastUpdat
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");
my $written = $session->db->quickScalar('select COUNT(*) from some_crud_table where id=?',[ $record1->id ]);
is $written, 1, 'autowrite for a new object works';
can_ok($record1, 'prop');
my $prop = $record1->meta->find_attribute_by_name('prop');
@ -101,7 +102,6 @@ $record2->delete;
# instanciation
$record2 = WebGUI::Cruddy->new($session);
$record2->write;
isnt($record1->getId, $record2->getId, "can retrieve unique rows");
my $copyOfRecord2 = WebGUI::Cruddy->new($session, $record2->getId);
is($record2->getId, $copyOfRecord2->getId, "can reinstanciate record");
@ -109,10 +109,8 @@ is($record2->getId, $copyOfRecord2->getId, "can reinstanciate record");
# sequencing
is($record2->sequenceNumber, 2, "record 1 sequenceNumber is 2");
my $record3 = WebGUI::Cruddy->new($session);
$record3->write;
is($record3->sequenceNumber, 3, "record 1 sequenceNumber is 3");
my $record4 = WebGUI::Cruddy->new($session);
$record4->write;
is($record4->sequenceNumber, 4, "record 1 sequenceNumber is 4");
ok($record4->demote, "demotion reports success");
is($record4->sequenceNumber, 4, "can't demote further than end");

View file

@ -37,11 +37,11 @@ WebGUI::Test->addToCleanup(sub {
});
my $cereal = WebGUI::Serialize->new($session);
$cereal->write;
isa_ok($cereal, 'WebGUI::Serialize');
cmp_deeply(
$cereal->get,
{
_dirty => 0,
someName => 'someName',
jsonField => [],
dateCreated => ignore(),