e5e9ca4231a683da0b0f46f5705b206abb5625b1
[scpubgit/DKit.git] / lib / DX / Op / MemberOf.pm
1 package DX::Op::MemberOf;
2
3 use DX::ArrayStream;
4 use Moo;
5
6 with 'DX::Role::Op';
7
8 has member_var => (is => 'ro', required => 1);
9 has coll_var => (is => 'ro', required => 1);
10
11 sub run {
12   my ($self, $state) = @_;
13   ($state, my %args) = $self->_expand_args($state,
14     member => $self->member_var,
15     of => $self->coll_var
16   );
17   my ($member, $of) = @args{qw(member of)};
18   die "member bound" if $member->is_bound;
19   my $set = $state->facts->{$of->bound_value};
20   return $state->then($self->next)
21                ->add_dependencies($member->id, $of->id)
22                ->bind_root_set($member->id, $set)
23 }
24
25 1;