Test::DBIx::Class::FixtureCommand::Populate - Install fixtures using Populate


Test-DBIx-Class documentation Contained in the Test-DBIx-Class distribution.

Index


Code Index:

NAME

Top

Test::DBIx::Class::FixtureCommand::Populate - Install fixtures using Populate

SYNOPSIS

Top

	my $command = Test::DBIx::Class::FixtureComand::Populate->new(schema=>$schema);
	$command->install_fixtures($fixtures);

DESCRIPTION

Top

This uses the populate in DBIx::Class::Schema method to install fixture data. Expects an hash of "Source => [\@fields, \@rows]". Please see the 'populate' method for more information. Examples:

	->install_fixtures(
		Person => [
			['name', 'age'],
			['john', 40],
			['vincent', 15],
		],
		Job => [
			[title => 'description'],
			[programmer => 'Who wrote the code'],
			[marketer => 'Who sold the code'],
		],
	);

You may include as many Sources as you like, and even the same one more than once.

For additional flexibility with various configuration formats, we accept three variations of the incoming arguments:

	## Array of HashRefs
	->install_fixtures(
		{Person => [
			['name', 'age'],
			['john', 40],
			['vincent', 15],
		]},
		{Job => [
			[title => 'description'],
			[programmer => 'Who wrote the code'],
			[marketer => 'Who sold the code'],
		]},
	);

	## ArrayRef
	->install_fixtures([
		Person => [
			['name', 'age'],
			['john', 40],
			['vincent', 15],
		],
		Job => [
			[title => 'description'],
			[programmer => 'Who wrote the code'],
			[marketer => 'Who sold the code'],
		],
	]);

	## ArrayRef of HashRefs
	->install_fixtures([
		{Person => [
			['name', 'age'],
			['john', 40],
			['vincent', 15],
		]},
		{Job => [
			[title => 'description'],
			[programmer => 'Who wrote the code'],
			[marketer => 'Who sold the code'],
		]},
	]);

This should allow you to model your fixtures in your configuration format of choice without a lot of trouble.

METHODS

Top

This class defines the following methods

install_fixtures

Takes an Array or ArrayRef of arguments and installs them into your target database. Returns an array of hashrefs, where each hashref is a {$source => @rows} pair.

AUTHOR

Top

John Napiorkowski <jjnapiork@cpan.org>

COPYRIGHT & LICENSE

Top


Test-DBIx-Class documentation Contained in the Test-DBIx-Class distribution.

package Test::DBIx::Class::FixtureCommand::Populate; {

	use Moose;
	use Test::More ();
	with 'Test::DBIx::Class::Role::FixtureCommand';

	sub install_fixtures {
		my ($self, $arg, @rest) = @_;
		my $builder = $self
			->schema_manager
			->builder;

		$builder->croak("Argument is required.")
		  unless $arg;

		my @args;
		if(ref $arg && ref $arg eq 'ARRAY') {
			@args = @$arg;
		}
		elsif(ref $arg && ref $arg eq 'HASH') {
			@args = %$arg;
		}
		else {
			@args = ($arg, @rest);
		}

		my @definitions;
		while(@args) {
			my $next = shift(@args);
			if( (ref $next) && (ref $next eq 'HASH') ) {
				push @definitions, $next;
			} else {
				my $value = shift(@args);
				push @definitions, {$next => $value};
			}
		}

		my @return;
		foreach my $definition (@definitions) {
			my ($source, $rows) = each %$definition;
            my $rs = $self->schema_manager->schema->resultset($source);

			my @rows =  $rs->populate($rows);
			push @return, {$source => [@rows]};
		}
		return @return;
	}
} 1;

__END__