Class-DBI-Frozen-301

 view release on metacpan or  search on metacpan

lib/Class/DBI/Frozen/301.pm  view on Meta::CPAN

use Carp ();
use List::Util;
use UNIVERSAL::moniker;

use vars qw($Weaken_Is_Available);

BEGIN {
	$Weaken_Is_Available = 1;
	eval {
		require Scalar::Util;
		import Scalar::Util qw(weaken);
	};
	if ($@) {
		$Weaken_Is_Available = 0;
	}
}

use overload
	'""'     => sub { shift->stringify_self },
	bool     => sub { not shift->_undefined_primary },
	fallback => 1;

lib/Class/DBI/Frozen/301.pm  view on Meta::CPAN

	}

	unless (defined($obj = $Live_Objects{$obj_key})) {

		# not in the object_index, or we don't have all keys yet
		$obj = bless {}, $class;
		$obj->_attribute_store(%$data);

		# don't store it unless all keys are present
		if ($obj_key && $Weaken_Is_Available) {
			weaken($Live_Objects{$obj_key} = $obj);

			# time to clean up your room?
			$class->purge_dead_from_object_index
				if ++$Init_Count % $class->purge_object_index_every == 0;
		}
	}

	return $obj;
}

t/02-Film.t  view on Meta::CPAN

		isa_ok $byebye, 'DeletingFilm';
		isa_ok $byebye, 'Film';
		ok(Film->retrieve('Goodbye Norma Jean'), "Fetch it back again");
	}
	my $film;
	eval { $film = Film->retrieve('Goodbye Norma Jean') };
	ok !$film, "It destroys itself";
}

SKIP: {
	skip "Scalar::Util::weaken not available", 3
		if !$Class::DBI::Weaken_Is_Available;

	# my bad taste is your bad taste
	my $btaste  = Film->retrieve('Bad Taste');
	my $btaste2 = Film->retrieve('Bad Taste');
	is Scalar::Util::refaddr($btaste), Scalar::Util::refaddr($btaste2),
		"Retrieving twice gives ref to same object";

	$btaste2->remove_from_object_index;
	my $btaste3 = Film->retrieve('Bad Taste');



( run in 0.934 second using v1.01-cache-2.11-cpan-65fba6d93b7 )