aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2016-06-19 17:45:01 +0100
committerdakkar <dakkar@thenautilus.net>2016-06-19 17:45:01 +0100
commit175b96bddb37179ab9d851877fa1e99d31f8471d (patch)
tree23e0c0f9eddc7e80fcfdbfee985b9b78d93e9a12 /lib
parentTODO list (diff)
downloadSietima-175b96bddb37179ab9d851877fa1e99d31f8471d.tar.gz
Sietima-175b96bddb37179ab9d851877fa1e99d31f8471d.tar.bz2
Sietima-175b96bddb37179ab9d851877fa1e99d31f8471d.zip
NoMail role
Diffstat (limited to 'lib')
-rw-r--r--lib/Sietima.pm14
-rw-r--r--lib/Sietima/Role/NoMail.pm17
-rw-r--r--lib/Sietima/Types.pm8
3 files changed, 33 insertions, 6 deletions
diff --git a/lib/Sietima.pm b/lib/Sietima.pm
index fbf0566..1e463ec 100644
--- a/lib/Sietima.pm
+++ b/lib/Sietima.pm
@@ -5,7 +5,7 @@ use Types::Standard qw(ArrayRef Object FileHandle Maybe);
use Type::Params qw(compile);
use Sietima::Types qw(Address AddressFromStr
EmailMIME Message
- Subscriber SubscriberFromAddress SubscriberFromStr
+ Subscriber SubscriberFromAddress SubscriberFromStr SubscriberFromHashRef
Transport);
use Sietima::Message;
use Sietima::Subscriber;
@@ -27,6 +27,7 @@ my $subscribers_array = ArrayRef[
Subscriber->plus_coercions(
SubscriberFromAddress,
SubscriberFromStr,
+ SubscriberFromHashRef,
)
];
has subscribers => (
@@ -53,6 +54,13 @@ sub handle_mail {
return;
}
+sub addresses_to_send_to {
+ state $check = compile(Object,EmailMIME);
+ my ($self,$incoming_mail) = $check->(@_);
+
+ return [ map { $_->address } @{$self->subscribers} ];
+}
+
sub munge_mail {
state $check = compile(Object,EmailMIME);
my ($self,$incoming_mail) = $check->(@_);
@@ -60,9 +68,7 @@ sub munge_mail {
return Sietima::Message->new({
mail => $incoming_mail,
from => $self->return_path,
- to => [
- map { $_->address } @{$self->subscribers}
- ],
+ to => $self->addresses_to_send_to($incoming_mail),
});
}
diff --git a/lib/Sietima/Role/NoMail.pm b/lib/Sietima/Role/NoMail.pm
new file mode 100644
index 0000000..233f6b9
--- /dev/null
+++ b/lib/Sietima/Role/NoMail.pm
@@ -0,0 +1,17 @@
+package Sietima::Role::NoMail;
+use 5.020;
+use Moo::Role;
+use namespace::clean;
+
+around addresses_to_send_to => sub {
+ my ($orig,$self,@etc) = @_;
+
+ return [
+ map { $_->address }
+ grep { $_->prefs->{wants_mail} // 1 }
+ @{$self->subscribers},
+ ];
+};
+
+1;
+
diff --git a/lib/Sietima/Types.pm b/lib/Sietima/Types.pm
index af3e1c0..00f0883 100644
--- a/lib/Sietima/Types.pm
+++ b/lib/Sietima/Types.pm
@@ -3,13 +3,13 @@ use 5.020;
use strict;
use warnings;
use Type::Utils -all;
-use Types::Standard qw(Str);
+use Types::Standard qw(Str HashRef);
use namespace::clean;
use Type::Library
-base,
-declare => qw(Address AddressFromStr
EmailMIME Message
- Subscriber SubscriberFromAddress SubscriberFromStr
+ Subscriber SubscriberFromAddress SubscriberFromStr SubscriberFromHashRef
Transport MailStore);
class_type EmailMIME, { class => 'Email::MIME' };
@@ -31,4 +31,8 @@ declare_coercion SubscriberFromStr,
to_type Subscriber, from Str,
q{ Sietima::Subscriber->new(raw_address=>(Email::Address->parse($_))[0]) };
+declare_coercion SubscriberFromHashRef,
+ to_type Subscriber, from HashRef,
+ q{ Sietima::Subscriber->new($_) };
+
1;