XML::Atom::Syndication::Feed - class representing an Atom feed


XML-Atom-Syndication documentation Contained in the XML-Atom-Syndication distribution.

Index


Code Index:


XML-Atom-Syndication documentation Contained in the XML-Atom-Syndication distribution.

package XML::Atom::Syndication::Feed;
use strict;

use base qw( XML::Atom::Syndication::Thing );

use XML::Atom::Syndication::Util qw( nodelist );

XML::Atom::Syndication::Feed->mk_accessors('element', 'icon', 'logo');
XML::Atom::Syndication::Feed->mk_accessors('XML::Atom::Syndication::Generator',
                                           'generator');
XML::Atom::Syndication::Feed->mk_accessors('XML::Atom::Syndication::Text',
                                           'subtitle');

# deprecated 0.3 accessors
XML::Atom::Syndication::Feed->mk_accessors('attribute', 'version');
XML::Atom::Syndication::Feed->mk_accessors('element', 'copyright', 'modified',
                                           'created');
XML::Atom::Syndication::Feed->mk_accessors('XML::Atom::Syndication::Text',
                                           'tagline', 'info');

sub element_name { 'feed' }

sub add_entry {
    my ($feed, $entry) = @_;
    $entry = $entry->elem if ref $entry eq 'XML::Atom::Syndication::Entry';
    $feed->set_element($feed->ns, 'entry', $entry, 1);
}

sub insert_entry {
    my ($feed, $entry) = @_;
    $entry = $entry->elem if ref $entry eq 'XML::Atom::Syndication::Entry';
    my ($first) = nodelist($feed, $feed->ns, 'entry');
    if ($first) {
        my $e = $feed->elem;
        $entry->parent($e);
        my @new =
          map { $_ eq $first ? ($entry, $_) : $_ } @{$e->contents};
        $e->contents(\@new);
    } else {
        $feed->set_element($feed->ns, 'entry', $entry, 1);
    }
}

sub entries {    # why? because read_only????
    my $feed = shift;
    my @nodes = nodelist($feed, $feed->ns, 'entry');
    return unless @nodes;
    my @entries;
    require XML::Atom::Syndication::Entry;
    foreach my $node (@nodes) {
        my $entry =
          XML::Atom::Syndication::Entry->new(Elem      => $node,
                                             Namespace => $feed->ns);
        push @entries, $entry;
    }
    @entries;
}

1;

__END__