| Email-Sender documentation | Contained in the Email-Sender distribution. |
Email::Sender::Transport::Failable - a wrapper to makes things fail predictably
version 0.110001
This transport extends Email::Sender::Transport::Wrapper, meaning that it
must be created with a transport attribute of another
Email::Sender::Transport. It will proxy all email sending to that transport,
but only after first deciding if it should fail.
It does this by calling each coderef in its failure_conditions attribute,
which must be an arrayref of code references. Each coderef will be called and
will be passed the Failable transport, the Email::Abstract object, the
envelope, and a reference to an array containing the rest of the arguments to
send.
If any coderef returns a true value, the value will be used to signal failure.
Ricardo Signes <rjbs@cpan.org>
This software is copyright (c) 2011 by Ricardo Signes.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
| Email-Sender documentation | Contained in the Email-Sender distribution. |
package Email::Sender::Transport::Failable; BEGIN { $Email::Sender::Transport::Failable::VERSION = '0.110001'; } use Moose; extends 'Email::Sender::Transport::Wrapper'; # ABSTRACT: a wrapper to makes things fail predictably has 'failure_conditions' => ( is => 'ro', isa => 'ArrayRef', clearer => 'clear_failure_conditions', auto_deref => 1, default => sub { [] }, ); sub fail_if { my ($self, $cond) = @_; push @{ scalar $self->failure_conditions }, $cond; } around send_email => sub { my ($orig, $self, $email, $env, @rest) = @_; for my $cond ($self->failure_conditions) { my $reason = $cond->($self, $email, $env, \@rest); next unless $reason; die (ref $reason ? $reason : Email::Sender::Failure->new($reason)); } return $self->$orig($email, $env, @rest); }; __PACKAGE__->meta->make_immutable; no Moose; 1; __END__