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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
package Net::Sieve::Script::Action;
use strict;
use warnings;
use base qw(Class::Accessor::Fast);
use vars qw($VERSION);
$VERSION = '0.09';
__PACKAGE__->mk_accessors(qw(command param));
sub new
{
my ($class, $init) = @_;
my $self = bless ({}, ref ($class) || $class);
my @MATCH = qw(\s?((\".*?\"|(.*)?)));
my ($command, $param) = $init =~ m/(keep|discard|redirect|stop|reject|fileinto)@MATCH?/sgi;
# RFC 5230
#Usage: vacation [":days" number] [":subject" string]
# [":from" string] [":addresses" string-list]
# [":mime"] [":handle" string] <reason: string>
#TODO make object vacation
if ( $init =~ m/vacation (.*")/sgi ) {
$command = 'vacation';
$param = $1;
};
$self->command(lc($command)) if $command;
$self->param($param) if $param ;
return $self;
}
sub equals {
my $self = shift;
my $object = shift;
return 0 unless (defined $object);
return 0 unless ($object->isa('Net::Sieve::Script::Action'));
my @accessors = qw( param command );
foreach my $accessor ( @accessors ) {
my $myvalue = $self->$accessor;
my $theirvalue = $object->$accessor;
if (defined $myvalue) {
return 0 unless (defined $theirvalue);
return 0 unless ($myvalue eq $theirvalue);
} else {
return 0 if (defined $theirvalue);
}
}
return 1;
}
=head1 NAME
Net::Sieve::Script::Action - parse and write actions in sieve scripts
=head1 SYNOPSIS
use Net::Sieve::Script::Action;
$action = Net::Sieve::Script::Action->new('redirect "bart@example.edu"');
or
$action = Net::Sieve::Script::Action->new();
$action->command('redirect');
$action->param('"bart@example.edu"');
=head1 DESCRIPTION
Action object for L<Net::Sieve::Script>, with command and optional param.
Support RFC 5228, RFC 5230 (vacation), regex draft
=head1 METHODS
=head2 CONSTRUCTOR new
Argument : "command param" string,
parse valid commands from RFCs, param are not validate.
=head2 command
read command : C<< $action->command() >>
set command : C<< $action->command('stop') >>
=head2 param
read param : C<< $action->param() >>
set param : C<< $action->param(' :days 3 "I am away this week."') >>
=head2 equals
return 1 if actions are equals
=head1 AUTHOR
Yves Agostini - <yvesago@cpan.org>
=head1 COPYRIGHT
This program is free software; you can redistribute
it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the
LICENSE file included with this module.
=cut
return 1;
|