package Test::Sietima::MailStore;
use strict;
use warnings;
use 5.024;
use Moo;
use List::AllUtils qw(all);
use namespace::clean;
with 'Sietima::MailStore';
has _mails => (
is => 'rw',
default => sub { +[] },
);
sub clear { shift->_mails([]) }
sub store {
my ($self,$mail,@tags) = @_;
my $id = time();
push $self->_mails->@*, {
id => $id,
mail => $mail->as_string,
tags => { map {$_ => 1;} @tags, },
};
return $id;
}
sub retrieve_by_tags {
my ($self,@tags) = @_;
my @ret;
for my $m ($self->_mails->@*) {
next unless all { $m->{tags}{$_} } @tags;
push @ret, {
$m->%{id},
mail => Email::MIME->new($m->{mail})
};
}
return \@ret;
}
sub retrieve_by_id {
my ($self,$id) = @_;
for my $m ($self->_mails->@*) {
next unless $m->{id} eq $id;
return Email::MIME->new($m->{mail});
}
return;
}
1;