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