add the TODO
[p5sagit/Promulger.git] / lib / Promulger / List.pm
CommitLineData
514dce63 1package Promulger::List;
2use Moose;
f5baca29 3use MooseX::Storage;
514dce63 4
f5baca29 5use autodie ':all';
514dce63 6use Carp;
f5baca29 7use Path::Class;
8use Fcntl ':flock';
514dce63 9
10has listname => (
11 is => 'ro',
12 isa => 'Str',
13 required => 1,
14);
15
16has active => (
17 is => 'rw',
18 isa => 'Bool',
19 required => 1,
20 default => 1,
21);
22
f5baca29 23with Storage (
24 format => 'JSON',
25 io => 'File',
26);
27
28sub resolve {}
29
30sub subscribe {}
31
32sub unsubscribe {}
33
34sub accept_posts_from {}
35
36sub setup {
514dce63 37 my($self, $config) = @_;
38 my $name = $self->listname;
f5baca29 39 my $path = file($config->{list_home}, $name . ".list");
40 eval {
41 __PACKAGE__->load($path->stringify);
42 };
43 croak "${name} already a known list" unless $@;
44
45 open my $fh, '+<', $config->{aliases};
46 flock $fh, LOCK_EX;
47 my @current_contents = <$fh>;
514dce63 48 my @aliases = ($name, "${name}-request");
49 for my $alias (@aliases) {
f5baca29 50 if(grep { /^${alias}:/ } @current_contents) {
514dce63 51 croak "${alias} already in $config->{aliases}";
52 }
f5baca29 53 push @current_contents,
54 qq(${alias}: "|$config->{bin_root}/pmg msg -c $config->{config_file}"\n);
514dce63 55 }
f5baca29 56 $self->store($path->stringify);
57 print $fh @current_contents;
58 flock $fh, LOCK_UN;
514dce63 59}
60
611;