use strictures 1;
use Test::More;
use DX::Solver;
+use DX::SetOver;
my @servers = qw(
kitty.scsys.co.uk
);
my $solver = DX::Solver->new(
- facts => { servers => \%servers, shells => \%shells }
+ facts => {
+ servers => DX::SetOver->new(
+ over => sub { $_[0]->{name} }, values => \%servers,
+ ),
+ shells => DX::SetOver->new(
+ over => sub { $_[0]->{name} }, values => \%shells,
+ ),
+ }
);
-$solver->add_rule(server => [ 'S' ] => [ member_of => qw(S servers) ]);
+$solver->add_rule(
+ server => [ 'S' ] => [ member_of => S => [ value => 'servers' ] ]
+);
-my $s = $solver->query([ 'S' ], [ call => server => 'S' ]);
+my $s = $solver->query([ 'S' ], [ server => 'S' ]);
-is_deeply([ map $_->{S}{name}, $s->results ], [ sort @servers ]);
+is_deeply([ map $_->value_for('S')->{name}, $s->results ], [ sort @servers ]);
-$solver->add_rule(shell => [ 'S' ] => [ member_of => qw(S shells) ])
+$solver->add_rule(
+ shell => [ 'S' ] => [ member_of => S => [ value => 'shells' ] ])
->add_rule(name => [ qw(T N) ],
[ constrain => [ qw(T N) ],
- sub { ::Dwarn(\@_); $_[0]->{name} eq $_[1] } ]
+ sub { $_[0]->{name} eq $_[1] } ]
)
->add_rule(shell_installed_on => [ qw(Shell Srv) ],
[ constrain => [ qw(Shell Srv) ],
$s = $solver->query(
[ qw(Shell Srv) ],
- [ call => shell => 'Shell' ],
- [ call => name => 'Shell', [ value => 'bash' ] ],
- [ call => server => 'Srv' ],
- [ call => shell_installed_on => qw(Shell Srv) ],
+ [ shell => 'Shell' ],
+ [ name => 'Shell', [ value => 'bash' ] ],
+ [ server => 'Srv' ],
+ [ shell_installed_on => qw(Shell Srv) ],
);
-::Dwarn($s->results);
+is_deeply(
+ [ sort map $_->value_for('Srv')->{name}, $s->results ],
+ [ qw(joe.example.com kitty.scsys.co.uk) ]
+);
done_testing;