package Sietima::Subscriber;
use Moo;
use Sietima::Policy;
use Types::Standard qw(ArrayRef HashRef Object);
use Type::Params -sigs;
use Sietima::Types qw(Address AddressFromStr);
use Email::Address;
use List::AllUtils qw(any);
use namespace::clean;
# VERSION
# ABSTRACT: a subscriber to a mailing list
=head1 DESCRIPTION
This class holds the primary email address for a mailing list
subscriber, together with possible aliases and preferences.
=head1 ATTRIBUTES
All attributes are read-only.
=attr C
Required L<< C >> object, coercible from a string.
This is the primary address for the subscriber, the one where they
will receive messages from the mailing list.
=cut
has primary => (
isa => Address,
is => 'ro',
required => 1,
coerce => AddressFromStr,
handles => [qw(address name original)],
);
=attr C
Arrayref of L<< C >> objects, each coercible from a
string. Defaults to an empty arrayref.
These are secondary addresses that the subscriber may write
from. Subscriber-only mailing lists should accept messages from any of
these addresses as if they were from the primary. The L<< /C >>
simplifies that task.
=cut
my $address_array = ArrayRef[
Address->plus_coercions(
AddressFromStr
)
];
has aliases => (
isa => $address_array,
is => 'lazy',
coerce => $address_array->coercion,
);
sub _build_aliases { +[] }
=attr C
A hashref. Various preferences that may be interpreted by Sietima
roles. Defaults to an empty hashref.
=cut
has prefs => (
isa => HashRef,
is => 'ro',
default => sub { +{} },
);
=method C
if ($subscriber->match($address)) { ... }
Given a L<< C >> object (or a string), this method
returns true if the address is equivalent to the
L or any of the L.
This method should be used to determine whether an address belongs to
a subscriber.
=cut
signature_for match => (
method => Object,
positional => [ Address->plus_coercions(AddressFromStr) ],
);
sub match($self,$addr) {
return any { $addr->address eq $_->address }
$self->primary, $self->aliases->@*;
}
=method C
=method C
=method C
These methods delegate to L<< C >>'s methods of the
same name, invoked on the L.
=cut
1;