Algorithm-Dependency-Objects

 view release on metacpan or  search on metacpan

lib/Algorithm/Dependency/Objects.pm  view on Meta::CPAN

		croak "The 'objects' parameter must be an array reference or a Set::Object";
	
	my $selected = exists($params{selected})
		? $class->_to_set($params{selected})
		: Set::Object->new()
			or croak "If provided, the 'selected' parameter must be an array reference or a Set::Object";
	
	# all the contents of the Set::Object must have depends methods
	$class->assert_can_get_deps($objects);

	$objects = $class->verify_input_set($objects);

	return bless {
		objects  => $objects,
		selected => $selected,
	}, $class;
}

sub objects  { (shift)->{objects}  }
sub selected { (shift)->{selected} }

lib/Algorithm/Dependency/Objects.pm  view on Meta::CPAN

		push @queue, $self->get_deps($obj);

		$selected_now->insert($obj);
	}

	$selected_now->remove(@objs);

	return wantarray ? $selected_now->members : $selected_now;
}

sub verify_input_set {
	my ( $self, $objects ) = @_;

	my $dependant = Set::Object->new(map { $self->get_deps($_) } $objects->members);

	my $unresolvable = $dependant->difference($objects);

	if ($unresolvable->size){
		return $self->handle_missing_objects($unresolvable, $objects);
	}

lib/Algorithm/Dependency/Objects.pm  view on Meta::CPAN

those that don't need to be run.

=item B<depends>

=item B<schedule>

=item B<schedule_all>

See L<Algorithm::Dependency>'s corresponding methods.

=item B<verify_input_set> $object_set

Make sure that the dependencies of every object in the set are also in the set.

=item B<handle_missing_objects> $missing_set, $input_set

Called by C<verify_input_set> when objects are missing from the input set.

You can override this method to simply return

	$input_set->union($missing_set);

making all dependencies of the input objects implicit input objects themselves.

=item B<unknown_object> $object

Called when a new object pops out of the blue in the middle of processing (it

t/01_basics.t  view on Meta::CPAN


# Load the data/basics.txt file in as a source file, and test it rigorously.

{
	# Try to create a basic unordered dependency
	isa_ok(my $dep = $m->new(objects => $objs), $m);

	is($dep->objects->size, 6, "six objects are registered");
	is($dep->selected->size, 0, "no objects are selected");

	verify_dep_and_sched($dep, [
		[$a],		[],				[$a] 			], [
		[$b],		[$c],			[$b, $c] 		], [
		[$c],		[], 			[$c]			], [
		[$d],		[$e, $f],		[$d, $e, $f]	], [
		[$e],		[],				[$e]			], [
		[$f],		[],				[$f]			], [
		[$a, $b],	[$c],			[$a, $b, $c]	], [
		[$b, $d],	[$c, $e, $f],	[$b, $c, $d, $e, $f]		]
	);
}

t/01_basics.t  view on Meta::CPAN

		bag( $a, $b, $c, $d, $e ),  # no $f
		"schedule_all",
	);

	is($dep->objects->size, 6, "six objects registered" );
	is($dep->selected->size, 1, "one objects selected" );

	ok( !$dep->selected->contains($a), "a is not selected" );
	ok( $dep->selected->contains($f), "f is selected" );

	verify_dep_and_sched($dep, [
		[$a],		[],				[$a] 			], [
		[$b],		[$c],			[$b, $c] 		], [
		[$c],		[], 			[$c]			], [
		[$d],		[$e],			[$d, $e]		], [
		[$e],		[],				[$e]			], [
		[$f],		[],				[]				], [
		[$a, $b],	[$c],			[$a, $b, $c]	], [
		[$b, $d],	[$c, $e],	[$b, $c, $d, $e]	]
	);
}

sub verify_dep_and_sched {
	my $dep = shift;

	foreach my $data (@_){
		my $args = join( ', ', @{ $data->[0] } );
		my @deps = $dep->depends( @{ $data->[0] } );
		cmp_deeply(\@deps, bag(@{ $data->[1] }), "depends($args)" );
		my @sched = $dep->schedule( @{ $data->[0] } );
		cmp_deeply(\@sched, bag(@{ $data->[2] }), "schedule($args)" );
	}
}



( run in 0.368 second using v1.01-cache-2.11-cpan-5467b0d2c73 )