aboutsummaryrefslogtreecommitdiff
path: root/lib/Sietima/Role/WithAdmin.pm
blob: 2781bf8dec4c2a7e2036f0c322c54916e0b62117 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package Sietima::Role::WithAdmin; 
use Moo::Role;
use Sietima::Policy;
use Sietima::Types qw(Address AddressFromStr);
use namespace::clean;
 
=head1 NAME
 
Sietima::Role::WithAdmin - role for lists with an owner / admin
 
=head1 SYNOPSIS
 
  my $sietima = Sietima->with_traits('WithAdmin')->new({
    %args,
    admin => 'listmaster@example.com',
  });
 
=head1 DESCRIPTION
 
This role adds an L<< /C<admin> >> 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 admin / owner address.
 
=head1 ATTRIBUTES
 
=head2 C<admin>
 
Required instance of L<< C<Email::Address> >>, coercible from a
string. This is the address of the owner / admin of the list.
 
=cut
 
has admin => (
    is => 'ro',
    isa => Address,
    required => 1,
    coerce => AddressFromStr,
);
 
around list_addresses => sub($orig,$self) {
    return +{
        $self->$orig->%*,
        admin => $self->admin,
    };
};
 
1;