The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Bootylicious::ArticleByTagIterator;

use strict;
use warnings;

use base 'Bootylicious::Decorator';

__PACKAGE__->attr('tag');

use Bootylicious::IteratorSearchable;

sub new {
    my $self = shift->SUPER::new(@_);

    return $self->build;
}

sub build {
    my $self = shift;

    my $tag = $self->tag;

    return Bootylicious::IteratorSearchable->new($self->object)->find_all(
        sub {
            my ($iterator, $elem) = @_;

            return unless scalar grep { $_ eq $tag } @{$elem->tags};

            return $elem;
        }
    );
}

1;