X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCDBICompat%2FTempColumns.pm;h=d025bb8bf2622c540b2e7897d3230f334ababf33;hb=d03c070640a8a9a187ba4fa21d645287029abfca;hp=64d6d20b47ff40c37aa47ad0dd2fc6b47353856d;hpb=a137305427594f63407bbf2a354b96578f682294;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/CDBICompat/TempColumns.pm b/lib/DBIx/Class/CDBICompat/TempColumns.pm index 64d6d20..d025bb8 100644 --- a/lib/DBIx/Class/CDBICompat/TempColumns.pm +++ b/lib/DBIx/Class/CDBICompat/TempColumns.pm @@ -1,8 +1,9 @@ -package DBIx::Class::CDBICompat::TempColumns; +package # hide from PAUSE + DBIx::Class::CDBICompat::TempColumns; use strict; use warnings; -use base qw/Class::Data::Inheritable/; +use base qw/DBIx::Class/; __PACKAGE__->mk_classdata('_temp_columns' => { }); @@ -15,34 +16,53 @@ sub _add_column_group { $tmp{$_} = 1 for @cols; $class->_temp_columns(\%tmp); } else { - return $class->NEXT::ACTUAL::_add_column_group($group, @cols); + return $class->next::method($group, @cols); } } sub new { my ($class, $attrs, @rest) = @_; - my %temp; - foreach my $key (keys %$attrs) { - $temp{$key} = delete $attrs->{$key} if $class->_temp_columns->{$key}; - } - my $new = $class->NEXT::ACTUAL::new($attrs, @rest); - foreach my $key (keys %temp) { - $new->set_temp($key, $temp{$key}); - } + + my $temp = $class->_extract_temp_data($attrs); + + my $new = $class->next::method($attrs, @rest); + + $new->set_temp($_, $temp->{$_}) for keys %$temp; + return $new; } +sub _extract_temp_data { + my($self, $data) = @_; + + my %temp; + foreach my $key (keys %$data) { + $temp{$key} = delete $data->{$key} if $self->_temp_columns->{$key}; + } + + return \%temp; +} sub find_column { my ($class, $col, @rest) = @_; return $col if $class->_temp_columns->{$col}; - return $class->NEXT::ACTUAL::find_column($col, @rest); + return $class->next::method($col, @rest); +} + +sub set { + my($self, %data) = @_; + + my $temp_data = $self->_extract_temp_data(\%data); + + $self->set_temp($_, $temp_data->{$_}) for keys %$temp_data; + + return $self->next::method(%data); } sub get_temp { my ($self, $column) = @_; - $self->throw( "Can't fetch data as class method" ) unless ref $self; - $self->throw( "No such TEMP column '${column}'" ) unless $self->_temp_columns->{$column} ; + $self->throw_exception( "Can't fetch data as class method" ) unless ref $self; + $self->throw_exception( "No such TEMP column '${column}'" ) unless $self->_temp_columns->{$column} ; return $self->{_temp_column_data}{$column} if exists $self->{_temp_column_data}{$column}; return undef; @@ -50,15 +70,15 @@ sub get_temp { sub set_temp { my ($self, $column, $value) = @_; - $self->throw( "No such TEMP column '${column}'" ) + $self->throw_exception( "No such TEMP column '${column}'" ) unless $self->_temp_columns->{$column}; - $self->throw( "set_temp called for ${column} without value" ) + $self->throw_exception( "set_temp called for ${column} without value" ) if @_ < 3; return $self->{_temp_column_data}{$column} = $value; } sub has_real_column { - return 1 if shift->_columns->{shift}; + return 1 if shift->has_column(shift); } 1;