Revision 240 (by dpavlin, 2008/10/01 19:58:37) return id correctly
package A3C::Record;

use strict;
use warnings;

use base 'Jifty::Record';

use Data::Dump qw/dump/;

=head1 NAME

Custom Record class for A3C

=head1 METHODS

=head2 load_or_create

Perform canonicalization on C<load_or_create> and loads subset of columns
(which hopfully are indexes in model for performance reasons).

=cut

sub load_or_create {
	my $class = shift;
	my $self;
	if ( ref($class) ) {
		( $self, $class ) = ( $class, undef );
	} else {
		$self = $class->new();
	}

	my %args = (@_);

	foreach my $key ( keys %args ) {
		$args{$key} = $self->run_canonicalization_for_column(
			column => $key,
			value  => $args{$key}
		);
	}

	my %load_cols;

	if ( ref($self) eq Jifty->app_class('Model','Person') ) {

		$load_cols{$_} = $args{$_} foreach ( qw/
			uid
			hrEduPersonUniqueID
			mail
		/ );
	
	} else {
		%load_cols = %args;
	}

	my ( $id, $msg ) = $self->load_by_cols(%load_cols);
	unless ( $self->id ) {
		return $self->create(%args);
	}

	return ( $self->id, $msg );
}

=head2 create

Serialize ARRAY values into single scalar separated by magic C<< <*> >> marker

=cut

sub create {
	#warn "# create",dump(@_);
	my $self = shift;
	my %data = @_ or die "no data?";
	foreach my $col ( keys %data ) {
		#warn "## ref($col)=",ref($col);
		$data{$col} = join(' <*> ', @{$data{$col}}) if ref( $data{$col} ) eq 'ARRAY';
	}
	#warn "## data = ",dump( %data );
	$self->SUPER::create( %data );
}


1;