support prefix list for bindir
[scpubgit/App-EzPz.git] / lib / Email / EzPz / ListCore.pm
CommitLineData
c5f4b6d4 1package Email::EzPz::ListCore;
2
3use Moo::Role;
4use IO::All;
5use IPC::System::Simple qw(run capture);
6
7has list_dir => (is => 'ro', required => 1);
8
9has ezmlm_bindir => (is => 'ro', required => 1);
10
11requires 'sublist_type';
12
13sub _command_path {
14 my ($self, $command) = @_;
b1194426 15 if (ref(my $bindir = $self->ezmlm_bindir) eq 'ARRAY') { # prefix list
16 return (@{$bindir}, "ezmlm-${command}");
17 } else {
18 return io->dir($bindir)->catfile("ezmlm-${command}");
19 }
c5f4b6d4 20}
21
22sub _command_args {
23 my ($self, $command, @args) = @_;
24 return (
25 $self->_command_path($command),
26 $self->list_dir,
27 $self->sublist_type,
28 @args
29 );
30}
31
32sub _call_command {
33 my ($self, @cmd) = @_;
34 run $self->_command_args(@cmd);
35}
36
37sub _capture_command {
38 my ($self, @cmd) = @_;
39 map { chomp; $_ } capture $self->_command_args(@cmd);
40}
41
42sub add_member {
43 my ($self, $member) = @_;
44 $self->_call_command(sub => $member);
45 return $member;
46}
47
48sub remove_member {
49 my ($self, $member) = @_;
50 $self->_call_command(unsub => $member);
51 return $member;
52}
53
54sub members {
55 my ($self) = @_;
56 $self->_capture_command('list');
57}
58
591;