Apache-RSS

 view release on metacpan or  search on metacpan

lib/Apache/RSS.pm  view on Meta::CPAN


my %SortBy = (
    'N' => 'title' ,
    'M' => 'mtime',
);

sub build_sorter {
    my $args = shift;

    # N=A by default
    my $sortby = (grep exists $args->{$_}, keys %SortBy)[0] || 'N';
    my $order  = $args->{$sortby} || 'A';
    my @target = $order eq 'A' ? qw($_[0] $_[1]) : qw($_[1] $_[0]);
    my $cmp    = $sortby eq 'N' ? 'cmp' : '<=>';

    return eval sprintf "sub { %s->%s %s %s->%s }",
	$target[0], $SortBy{$sortby}, $cmp, $target[1], $SortBy{$sortby};
}

##----------------------------------------------------------------
## Directives
##----------------------------------------------------------------
sub RSSEnableRegexp($$$){
    my($cfg, $params, $arg) = @_;
    $cfg->{RSSEnableRegexp} = eval "qr/$arg/";
    die $@ if $@;
}

sub RSSChannelTitle($$$) {
    my($cfg, $params, $arg) = @_;
    $cfg->{RSSChannelTitle} = $arg;
}

sub RSSChannelDescription($$$) {
    my($cfg, $params, $arg) = @_;
    $cfg->{RSSChannelDescription} = $arg;
}

sub RSSCopyRight($$$) {
    my($cfg, $params, $arg) = @_;
    $cfg->{RSSCopyRight} = $arg;
}

sub RSSScanHTMLTitle($$$){
    my($cfg, $params, $arg) = @_;
    $cfg->{RSSScanHTMLTitle} = $arg;
}

sub RSSLanguage($$$){
    my($cfg, $params, $arg) = @_;
    $cfg->{RSSLanguage} = $arg;
}

sub RSSEncoding($$$){
    my($cfg, $params, $arg) = @_;
    $cfg->{RSSEncoding} = $arg;
}

sub RSSEncodeHandler($$$) {
    my($cfg, $params, $arg) = @_;
    $arg =~ m/([a-zA-Z0-9:]+)/; # untaint
    my $class = $1;
    eval "require $class";
    if ($@ && $@ !~ m/^Can't locate/) {
	die $@;
    }
    $cfg->{RSSEncodeHandler} = $arg;
}

sub DIR_CREATE {
    my $class = shift;
    my $self = bless {}, $class;
    $self;
}

sub DIR_MERGE {
    my($parent, $current) = @_;
    my %new = (%$parent, %$current);
    return bless \%new, ref($parent);
}

## ---------------------------------------------------------------- 
## Apache::RSS::Item
## ---------------------------------------------------------------- 
package Apache::RSS::Item;
use strict;

sub new {
    my($class, $args) = @_;
    my $self = bless {
    }, $class;
    $self->{filename} = $args->{filename};
    $self->{content_type} = $args->{content_type};
    $self->{link} = $args->{link};
    $self->{title} = $args->{title};
    $self->{mtime} = $args->{mtime};
    $self;
}

{
    my $loaded;
    unless ($loaded) {
	for my $attr (qw(mtime filename name link title content_type)) {
	    no strict 'refs';
	    *$attr = sub {
		my $self = shift;
		$self->{$attr} = shift if @_;
		return $self->{$attr};
	    };
	}
	$loaded++;
    }
}

1;

__END__

=head1 NAME

Apache::RSS - generate RSS output for directory Index. 



( run in 1.596 second using v1.01-cache-2.11-cpan-39bf76dae61 )