diff options
Diffstat (limited to 'lib/Sietima/Role/WithOwner.pm')
-rw-r--r-- | lib/Sietima/Role/WithOwner.pm | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/Sietima/Role/WithOwner.pm b/lib/Sietima/Role/WithOwner.pm new file mode 100644 index 0000000..dccb904 --- /dev/null +++ b/lib/Sietima/Role/WithOwner.pm @@ -0,0 +1,50 @@ +package Sietima::Role::WithOwner; +use Moo::Role; +use Sietima::Policy; +use Sietima::Types qw(Address AddressFromStr); +use namespace::clean; + +=head1 NAME + +Sietima::Role::WithOwner - role for lists with an owner + +=head1 SYNOPSIS + + my $sietima = Sietima->with_traits('WithOwner')->new({ + %args, + owner => 'listmaster@example.com', + }); + +=head1 DESCRIPTION + +This role adds an L<< /C<owner> >> attribute, and exposes it via the +L<< C<list_addresses>|Sietima/list_addresses >> method. + +On its own, this role is not very useful, but other roles (like L<< +C<SubscriberOnly::Moderate>|Sietima::Role::SubscriberOnly::Moderate +>>) can have uses for an owner address. + +=head1 ATTRIBUTES + +=head2 C<owner> + +Required instance of L<< C<Email::Address> >>, coercible from a +string. This is the address of the owner of the list. + +=cut + +has owner => ( + is => 'ro', + isa => Address, + required => 1, + coerce => AddressFromStr, +); + +around list_addresses => sub($orig,$self) { + return +{ + $self->$orig->%*, + owner => $self->owner, + }; +}; + +1; |