use Moo;
+ with 'DX::Role::Fact';
+
has path => (is => 'ro', required => 1);
has info => (is => 'ro', predicate => 1);
use Moo;
+ with 'DX::Role::Fact';
+
has is_directory => (is => 'ro', default => 0);
has is_file => (is => 'ro', default => 0);
has mode => (is => 'ro', required => 1);
[ path => [ qw(PS P) ],
[ prop => 'PS', \'path', 'P' ] ],
[ info_prop => [ qw(PS N V) ],
- [ exists => [ qw(PSI) ],
- [ prop => 'PS', \'info', 'PSI' ],
- [ prop => 'PSI', 'N', 'V' ] ] ],
+ [ prop => 'PS', \'info', 'PSI' ],
+ [ prop => 'PSI', 'N', 'V' ] ],
[ mode => [ qw(PS M) ],
[ info_prop => 'PS', \'mode', 'M' ] ],
[ exists_path => [ qw(PS) ],
sub paths_for_simple {
join ' ', map $_->value_for('PS')->path, $solver->query(
- [ qw(PS) ], [ path_status => 'PS' ], @_
+ [ path_status => 'PS' ], @_
)->results;
}
is(paths_for_simple([ is_file => 'PS' ]), '.ssh/authorized_keys');
-is(paths_for_simple([ mode => 'PS', [ value => '0755' ] ]), '.ssh');
+is(paths_for_simple([ mode => 'PS', \'0755' ]), '.ssh');
$solver->add_rule(
path_status_at => [ 'PS', 'P' ],
throws_ok {
$solver->query(
- [ qw(PS) ],
- [ path_status_at => 'PS', [ value => '.ssh' ] ]
+ [ path_status_at => 'PS', \'.ssh' ]
)->results
} qr/ARGH/;
lives_ok {
@res = $solver->query(
- [ qw(PS) ],
- [ path_status_at => 'PS', [ value => '.ssh' ] ]
+ [ path_status_at => 'PS', \'.ssh' ]
)->results
};
$ob_res{'.ssh'} = $protos{'.ssh'};
sub paths_for {
- join ' ', map $_->value_for('PS')->path, $solver->query([ 'PS' ], @_)->results;
+ join ' ', map $_->value_for('PS')->path, $solver->query(@_)->results;
}
is(
- paths_for([ path_status => 'PS' ], [ path => 'PS', [ value => '.ssh' ] ]),
+ paths_for([ path_status => 'PS' ], [ path => 'PS', \'.ssh' ]),
'',
'no .ssh entry'
);
-throws_ok { paths_for([ path_status_at => 'PS', [ value => '.ssh' ] ]) }
+throws_ok { paths_for([ path_status_at => 'PS', \'.ssh' ]) }
qr/refused/;
$solver->{observation_policy} = sub { 1 };
is(
- paths_for([ path_status_at => 'PS', [ value => '.ssh' ] ]),
+ paths_for([ path_status_at => 'PS', \'.ssh' ]),
'.ssh',
'observation'
);
delete $solver->{observation_policy};
-lives_ok { paths_for([ path_status_at => 'PS', [ value => '.ssh' ] ]) }
+lives_ok { paths_for([ path_status_at => 'PS', \'.ssh' ]) }
'No observation required anymore';
$path_status{'.ssh/authorized_keys'} = $protos{'.ssh/authorized_keys'};
$solver->{observation_policy} = sub { 1 };
sub dot_ssh_query {
- $solver->query([ 'PS' ], [ directory_at => 'PS' => [ value => '.ssh' ] ]);
+ $solver->query([ directory_at => 'PS' => \'.ssh' ]);
}
is_deeply(
[]
);
-#::Dwarn(paths_for([ directory_at => 'PS', [ value => '.ssh' ] ]));
+#::Dwarn(paths_for([ directory_at => 'PS', \'.ssh' ]));
$solver->add_rule(@$_) for (
[ is_directory => [ qw(PS) ],
[ not => [ exists_path => 'PS' ] ],
[ act => [ 'PS' ],
sub {
- my ($ps_var) = @_;
- my ($id, $value) = ($ps_var->id, $ps_var->bound_value);
+ my ($value) = @_;
DX::Action::FromCode->new(
expect => sub {
- ($id => My::PathStatus->new(
+ (path_status => My::PathStatus->new(
path => $value->path,
info => My::PathStatusInfo->new(
is_directory => 1, mode => ''
$solver->add_rule(@$_) for (
[ file_in => [ qw(DirStatus FileName FileStatus) ],
[ is_directory => qw(DirStatus) ],
- [ exists => [ qw(DirPath) ],
- [ path => qw(DirStatus DirPath) ],
- [ exists => [ qw(FilePath) ],
- [ catfile => qw(DirPath FileName FilePath) ],
- [ file_at => qw(FileStatus FilePath) ] ] ] ],
+ [ path => qw(DirStatus DirPath) ],
+ [ catfile => qw(DirPath FileName FilePath) ],
+ [ file_at => qw(FileStatus FilePath) ] ],
[ is_file => [ qw(PS) ],
[ not => [ exists_path => 'PS' ] ],
[ act => [ 'PS' ],
sub {
- my ($ps_var) = @_;
- my ($id, $value) = ($ps_var->id, $ps_var->bound_value);
+ my ($value) = @_;
DX::Action::FromCode->new(
expect => sub {
- ($id => My::PathStatus->new(
+ (path_status => My::PathStatus->new(
path => $value->path,
info => My::PathStatusInfo->new(
is_file => 1, mode => ''
%ob_res = %empty;
sub keys_file {
- $solver->query([ qw(D F) ],
+ $solver->query(
[ directory_at => 'D' => \'.ssh' ],
[ file_in => 'D' => \'authorized_keys' => 'F' ],
);
is(scalar(my @act = $res[0]->actions), 2, 'Two actions');
+#::Dwarn(\@act);
+
is(scalar(my ($poss) = grep !@{$_->dependencies}, @act), 1, 'One possible');
$solver->run_action($poss);