1package Data::Object::Array::Func::Grep;
2
3use 5.014;
4
5use strict;
6use warnings;
7
8use registry 'Data::Object::Types';
9
10use Data::Object::Class;
11use Data::Object::ClassHas;
12
13extends 'Data::Object::Array::Func';
14
15our $VERSION = '2.05'; # VERSION
16
17# BUILD
18
19has arg1 => (
20  is => 'ro',
21  isa => 'ArrayLike',
22  req => 1
23);
24
25has arg2 => (
26  is => 'ro',
27  isa => 'CodeLike',
28  req => 1
29);
30
31has args => (
32  is => 'ro',
33  isa => 'ArrayRef[Any]',
34  opt => 1
35);
36
37# METHODS
38
39sub execute {
40  my ($self) = @_;
41
42  my ($data, $code, @args) = $self->unpack;
43
44  my $results = [];
45
46  for (my $i = 0; $i < @$data; $i++) {
47    my $index = $i;
48    my $value = $data->[$i];
49
50    push @$results, $value if $code->($value, @args);
51  }
52
53  return $results;
54}
55
56sub mapping {
57  return ('arg1', 'arg2', '@args');
58}
59
601;
61