aboutsummaryrefslogtreecommitdiff
path: root/lib/Sietima/Subscriber.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Sietima/Subscriber.pm')
-rw-r--r--lib/Sietima/Subscriber.pm24
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;