Commit | Line | Data |
514dce63 |
1 | package Promulger::List; |
2 | use Moose; |
f5baca29 |
3 | use MooseX::Storage; |
514dce63 |
4 | |
f5baca29 |
5 | use autodie ':all'; |
514dce63 |
6 | use Carp; |
f5baca29 |
7 | use Path::Class; |
8 | use Fcntl ':flock'; |
514dce63 |
9 | |
10 | has listname => ( |
11 | is => 'ro', |
12 | isa => 'Str', |
13 | required => 1, |
14 | ); |
15 | |
16 | has active => ( |
17 | is => 'rw', |
18 | isa => 'Bool', |
19 | required => 1, |
20 | default => 1, |
21 | ); |
22 | |
f5baca29 |
23 | with Storage ( |
24 | format => 'JSON', |
25 | io => 'File', |
26 | ); |
27 | |
28 | sub resolve {} |
29 | |
30 | sub subscribe {} |
31 | |
32 | sub unsubscribe {} |
33 | |
34 | sub accept_posts_from {} |
35 | |
36 | sub 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 | |
61 | 1; |