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;