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 )