From: Christopher H. Laco Date: Tue, 22 May 2007 00:32:35 +0000 (+0000) Subject: added get_inflated_columns to Row X-Git-Tag: v0.08010~150^2~58 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=commitdiff_plain;h=ba4a645371fc328eb33fb947333423f753378245;hp=6c0ddbf737fa59fd988b0ca3bdbd0e68d2ef9e6d added get_inflated_columns to Row --- diff --git a/Changes b/Changes index 89d9328..615e344 100644 --- a/Changes +++ b/Changes @@ -11,6 +11,7 @@ Revision history for DBIx::Class - resultset_class/result_class now (again) auto loads the specified class; requires Class::Accessor::Grouped 0.05002+ - added 97result_class.t test, failing ATM + - added get_inflated_columns to Row 0.07006 2007-04-17 23:18:00 - Lots of documentation updates diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index 66c6cfb..f051629 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -292,6 +292,22 @@ sub get_dirty_columns { keys %{$self->{_dirty_columns}}; } +=head2 get_inflated_columns + + my $inflated_data = $obj->get_inflated_columns; + +Similar to get_columns but objects are returned for inflated columns instead of their raw non-inflated values. + +=cut + +sub get_inflated_columns { + my $self = shift; + return map { + my $accessor = $self->column_info($_)->{'accessor'} || $_; + ($_ => $self->$accessor); + } $self->columns; +} + =head2 set_column $obj->set_column($col => $val); diff --git a/t/60core.t b/t/60core.t index 3eb80df..75b6ba7 100644 --- a/t/60core.t +++ b/t/60core.t @@ -7,7 +7,7 @@ use DBICTest; my $schema = DBICTest->init_schema(); -plan tests => 64; +plan tests => 74; # figure out if we've got a version of sqlite that is older than 3.2.6, in # which case COUNT(DISTINCT()) doesn't work @@ -175,6 +175,14 @@ $new->pos(5); $new->update_or_insert; is( $schema->resultset("Track")->find(100)->pos, 5, 'update_or_insert update ok'); +# get_inflated_columns w/relation and accessor alias +my %tdata = $new->get_inflated_columns; +is($tdata{'trackid'}, 100, 'got id'); +isa_ok($tdata{'cd'}, 'DBICTest::CD', 'cd is CD object'); +is($tdata{'cd'}->id, 1, 'cd object is id 1'); +is($tdata{'position'}, 5, 'got position from pos'); +is($tdata{'title'}, 'Insert or Update'); + eval { $schema->class("Track")->load_components('DoesNotExist'); }; ok $@, $@; @@ -306,3 +314,14 @@ ok(!$@, "stringify to false value doesn't cause error"); ok(! exists $schema->source('CD')->_columns->{'year'}, 'year still exists in _columns'); } +# test get_inflated_columns with objects +{ + my $event = $schema->resultset('Event')->search->first; + my %edata = $event->get_inflated_columns; + is($edata{'id'}, $event->id, 'got id'); + isa_ok($edata{'starts_at'}, 'DateTime', 'start_at is DateTime object'); + isa_ok($edata{'created_on'}, 'DateTime', 'create_on DateTime object'); + is($edata{'starts_at'}, $event->starts_at, 'got start date'); + is($edata{'created_on'}, $event->created_on, 'got created date'); +} +