1 package Promulger::List;
9 use File::Slurp qw/read_file, write_file/;
11 $Data::Dumper::Purity = 1;
13 use Promulger::Config;
17 isa => sub { $_[0] =~ /^\w+$/ or die "listname must be a string" },
23 isa => sub { ($_[0] == 0 || $_[0] == 1) or die "active must be 0 or 1" },
30 isa => sub { ref $_[0] eq 'HASH' or die "subscribers must be a hashref" },
32 default => sub { {} },
36 my ($self, $proto) = @_;
37 $proto =~ s/-request$//;
38 my $path = find_path_for($proto);
41 $maybe_list = __PACKAGE__->load($path->stringify);
47 my ($self, $new) = @_;
48 return if $self->subscribers->{$new};
49 $self->subscribers->{$new} = 1;
50 $self->store(find_path_for($self->listname)->stringify);
56 return unless exists $self->subscribers->{$ex};
57 delete $self->subscribers->{$ex};
58 $self->store(find_path_for($self->listname)->stringify);
62 # XXX implement ACLs and other shinies -- apeiron, 2010-03-13
63 sub accept_posts_from {
64 my ($self, $sender) = @_;
65 return grep { $sender eq $_ } keys %{$self->subscribers};
70 my $config = Promulger::Config->config;
71 my $name = $self->listname;
72 croak "${name} already a known list" if $self->resolve($name);
73 my $path = find_path_for($name);
75 my $tie = tie my @aliases, 'Tie::File', $config->{aliases};
77 my @list_aliases = ($name, "${name}-request");
79 for my $list_alias (@list_aliases) {
80 if(grep { /^${list_alias}:/ } @aliases) {
81 croak "${list_alias} already in $config->{aliases}";
84 qq(${list_alias}: "|$config->{bin_root}/pmg msg -c $config->{config_file}"\n);
87 $self->store($path->stringify);
92 my $config = Promulger::Config->config;
93 my $name = $self->listname;
95 my $tie = tie my @aliases, 'Tie::File', $config->{aliases};
98 my @list_aliases = ($name, "${name}-request");
100 $_ !~ /^$list_aliases[0]:/ &&
101 $_ !~ /^$list_aliases[1]:/
104 unlink find_path_for($self->listname)->stringify;
109 my $path = file(Promulger::Config->config->{list_home}, $proto . ".list");
114 my ($self, $path) = @_;
115 my $dumped = 'do { my '. Dumper($self) . '; $VAR1; }';
116 write_file($path, $dumped);
120 my ($class, $path) = @_;
124 'http://mitpress.mit.edu/sicp/';