From 09833622046ee1d8b3afed16c6592fe96b081342 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Sun, 28 Nov 2010 22:01:26 -0800 Subject: [PATCH] Fix WebGUI::Crud to autowrite objects when created. --- lib/WebGUI/Crud.pm | 14 ++++++++++++++ t/Crud.t | 6 ++---- t/Crud/serialize.t | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/WebGUI/Crud.pm b/lib/WebGUI/Crud.pm index e91fed856..42ae3c835 100644 --- a/lib/WebGUI/Crud.pm +++ b/lib/WebGUI/Crud.pm @@ -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; diff --git a/t/Crud.t b/t/Crud.t index 3ac0e345f..d1a963a34 100644 --- a/t/Crud.t +++ b/t/Crud.t @@ -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"); diff --git a/t/Crud/serialize.t b/t/Crud/serialize.t index 196272956..6b5a46afa 100644 --- a/t/Crud/serialize.t +++ b/t/Crud/serialize.t @@ -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(),