XML::Atom::Syndication::Feed - class representing an Atom feed
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__