diff options
Diffstat (limited to 'lib/Sietima/Subscriber.pm')
-rw-r--r-- | lib/Sietima/Subscriber.pm | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/Sietima/Subscriber.pm b/lib/Sietima/Subscriber.pm index 9954ffb..c223343 100644 --- a/lib/Sietima/Subscriber.pm +++ b/lib/Sietima/Subscriber.pm @@ -1,9 +1,11 @@ package Sietima::Subscriber; use 5.020; use Moo; -use Types::Standard qw(HashRef); +use Types::Standard qw(ArrayRef HashRef Object); +use Type::Params qw(compile); use Sietima::Types qw(Address AddressFromStr); use Email::Address; +use List::AllUtils qw(any); use namespace::clean; has raw_address => ( @@ -14,10 +16,30 @@ has raw_address => ( handles => [qw(address name original)], ); +my $address_array = ArrayRef[ + Address->plus_coercions( + AddressFromStr + ) +]; +has aliases => ( + isa => $address_array, + is => 'lazy', + coerce => $address_array->coercion, +); +sub _build_aliases { +[] } + has prefs => ( isa => HashRef, is => 'ro', default => sub { +{} }, ); +sub match { + state $check = compile(Object,Address->plus_coercions(AddressFromStr)); + my ($self,$addr) = $check->(@_); + + return any { $addr->address eq $_->address } + $self->raw_address, @{$self->aliases}; +} + 1; |