cleanup, call-as-default
[scpubgit/DKit.git] / lib / DX / Op / MemberLookup.pm
1 package DX::Op::MemberLookup;
2
3 use Moo;
4
5 with 'DX::Role::Op';
6
7 has member_var => (is => 'ro', required => 1);
8 has coll_name => (is => 'ro', required => 1);
9 has key_name => (is => 'ro', required => 1);
10 has key_var => (is => 'ro', required => 1);
11
12 sub run {
13   my ($self, $state) = @_;
14   my ($member, $key) = map $state->scope_var($self->$_), qw(member_var key_var);
15   die "key unbound" unless $key->is_bound;
16   die "member bound" if $member->is_bound;
17   my $set = $state->facts->{$self->coll_name};
18   if (my $value = $set->{$key->bound_value}) {
19     return $state->bind_var_then($member, $value, $self->next);
20   }
21   return $state->backtrack;
22 }
23
24 1;