cleanup, call-as-default
[scpubgit/DKit.git] / lib / DX / Op / MemberLookup.pm
CommitLineData
b40e416a 1package DX::Op::MemberLookup;
2
3use Moo;
4
5with 'DX::Role::Op';
6
7has member_var => (is => 'ro', required => 1);
8has coll_name => (is => 'ro', required => 1);
9has key_name => (is => 'ro', required => 1);
10has key_var => (is => 'ro', required => 1);
11
12sub 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
241;