Add built local::lib
[catagits/Gitalist.git] / local-lib5 / lib / perl5 / XML / Atom / Entry.pm
CommitLineData
3fea05b9 1# $Id$
2
3package XML::Atom::Entry;
4use strict;
5
6use XML::Atom;
7use base qw( XML::Atom::Thing );
8use MIME::Base64 qw( encode_base64 decode_base64 );
9use XML::Atom::Person;
10use XML::Atom::Content;
11use XML::Atom::Util qw( first );
12
13sub element_name { 'entry' }
14
15sub content {
16 my $entry = shift;
17 if (my @arg = @_) {
18 if (ref($arg[0]) ne 'XML::Atom::Content') {
19 $arg[0] = XML::Atom::Content->new(Body => $arg[0], Version => $entry->version);
20 }
21 $entry->set($entry->ns, 'content', @arg);
22 } else {
23 return $entry->get_object($entry->ns, 'content', 'XML::Atom::Content');
24 }
25}
26
27__PACKAGE__->mk_elem_accessors(qw( summary ));
28__PACKAGE__->mk_xml_attr_accessors(qw( lang base ));
29
30__PACKAGE__->_rename_elements('issued' => 'published');
31__PACKAGE__->_rename_elements('modified' => 'updated');
32
33# OMG 0.3 elements ... to be backward compatible
34__PACKAGE__->mk_elem_accessors(qw( created ));
35
36__PACKAGE__->mk_object_accessor( source => 'XML::Atom::Feed' );
37
381;
39__END__
40
41=head1 NAME
42
43XML::Atom::Entry - Atom entry
44
45=head1 SYNOPSIS
46
47 use XML::Atom::Entry;
48 my $entry = XML::Atom::Entry->new;
49 $entry->title('My Post');
50 $entry->content('The content of my post.');
51 my $xml = $entry->as_xml;
52 my $dc = XML::Atom::Namespace->new(dc => 'http://purl.org/dc/elements/1.1/');
53 $entry->set($dc, 'subject', 'Food & Drink');
54
55=head1 USAGE
56
57=head2 XML::Atom::Entry->new([ $stream ])
58
59Creates a new entry object, and if I<$stream> is supplied, fills it with the
60data specified by I<$stream>.
61
62Automatically handles autodiscovery if I<$stream> is a URI (see below).
63
64Returns the new I<XML::Atom::Entry> object. On failure, returns C<undef>.
65
66I<$stream> can be any one of the following:
67
68=over 4
69
70=item * Reference to a scalar
71
72This is treated as the XML body of the entry.
73
74=item * Scalar
75
76This is treated as the name of a file containing the entry XML.
77
78=item * Filehandle
79
80This is treated as an open filehandle from which the entry XML can be read.
81
82=back
83
84=head2 $entry->content([ $content ])
85
86Returns the content of the entry. If I<$content> is given, sets the content
87of the entry. Automatically handles all necessary escaping.
88
89=head2 $entry->author([ $author ])
90
91Returns an I<XML::Atom::Person> object representing the author of the entry,
92or C<undef> if there is no author information present.
93
94If I<$author> is supplied, it should be an I<XML::Atom::Person> object
95representing the author. For example:
96
97 my $author = XML::Atom::Person->new;
98 $author->name('Foo Bar');
99 $author->email('foo@bar.com');
100 $entry->author($author);
101
102=head2 $entry->link
103
104If called in scalar context, returns an I<XML::Atom::Link> object
105corresponding to the first I<E<lt>linkE<gt>> tag found in the entry.
106
107If called in list context, returns a list of I<XML::Atom::Link> objects
108corresponding to all of the I<E<lt>linkE<gt>> tags found in the entry.
109
110=head2 $entry->add_link($link)
111
112Adds the link I<$link>, which must be an I<XML::Atom::Link> object, to
113the entry as a new I<E<lt>linkE<gt>> tag. For example:
114
115 my $link = XML::Atom::Link->new;
116 $link->type('text/html');
117 $link->rel('alternate');
118 $link->href('http://www.example.com/2003/12/post.html');
119 $entry->add_link($link);
120
121=head2 $entry->get($ns, $element)
122
123Given an I<XML::Atom::Namespace> element I<$ns> and an element name
124I<$element>, retrieves the value for the element in that namespace.
125
126This is useful for retrieving the value of elements not in the main Atom
127namespace, like categories. For example:
128
129 my $dc = XML::Atom::Namespace->new(dc => 'http://purl.org/dc/elements/1.1/');
130 my $subj = $entry->get($dc, 'subject');
131
132=head2 $entry->getlist($ns, $element)
133
134Just like I<$entry-E<gt>get>, but if there are multiple instances of the
135element I<$element> in the namespace I<$ns>, returns all of them. I<get>
136will return only the first.
137
138=head1 AUTHOR & COPYRIGHT
139
140Please see the I<XML::Atom> manpage for author, copyright, and license
141information.
142
143=cut