add missing return call fixing the failures introduced when trying to fix 73160
[catagits/XML-Feed.git] / lib / XML / Feed / Format / RSS.pm
index 18026cd..ab150ad 100644 (file)
@@ -7,6 +7,7 @@ use base qw( XML::Feed );
 use DateTime::Format::Mail;
 use DateTime::Format::W3CDTF;
 use XML::Atom::Util qw(iso2dt);
+use XML::Feed::Enclosure;
 
 our $PREFERRED_PARSER = "XML::RSS";
 
@@ -48,7 +49,12 @@ sub format { 'RSS ' . $_[0]->{rss}->{'version'} }
 
 ## The following elements are the same in all versions of RSS.
 sub title       { shift->{rss}->channel('title', @_) }
-sub link        { shift->{rss}->channel('link', @_) }
+sub link        {
+    my $link = shift->{rss}->channel('link', @_);
+    $link =~ s/^\s+//;
+    $link =~ s/\s+$//;
+    return $link;
+}
 sub description { shift->{rss}->channel('description', @_) }
 sub updated     { shift->modified(@_) }
 
@@ -134,8 +140,12 @@ sub modified {
         my $date;
         eval {
             if (my $ts = $rss->channel('pubDate')) {
+                $ts =~ s/^\s+//;
+                $ts =~ s/\s+$//;
                 $date = DateTime::Format::Mail->parse_datetime($ts);
             } elsif ($ts = $rss->channel->{dc}{date}) {
+                $ts =~ s/^\s+//;
+                $ts =~ s/\s+$//;
                 $date = DateTime::Format::W3CDTF->parse_datetime($ts);
             }
         };
@@ -190,7 +200,14 @@ sub link {
         ## For RSS 2.0 output from XML::RSS. Sigh.
         $entry->{entry}{permaLink} = $_[0];
     } else {
-        $entry->{entry}{link} || $entry->{entry}{guid};
+        my $link = $entry->{entry}{link} ||
+            $entry->{entry}{permaLink} ||
+            $entry->{entry}{guid};
+        if (defined $link) {
+            $link =~ s/^\s+//;
+            $link =~ s/\s+$//;
+        }
+        return $link;
     }
 }
 
@@ -300,9 +317,13 @@ sub issued {
             if (my $ts = $item->{pubDate}) {
                 my $parser = DateTime::Format::Mail->new;
                 $parser->loose;
+                $ts =~ s/^\s+//;
+                $ts =~ s/\s+$//;
                 $date = $parser->parse_datetime($ts);
             } elsif ($ts = $item->{dc}{date} or $ts = $item->{dcterms}{date}) {
-               $date = DateTime::Format::W3CDTF->parse_datetime($ts);
+                $ts =~ s/^\s+//;
+                $ts =~ s/\s+$//;
+                $date = DateTime::Format::W3CDTF->parse_datetime($ts);
             }
         };
         return $date;
@@ -315,7 +336,10 @@ sub modified {
         $item->{dcterms}{modified} =
             DateTime::Format::W3CDTF->format_datetime($_[0]);
     } else {
-        if (my $ts = $item->{dcterms}{modified} || $item->{'http://www.w3.org/2005/Atom'}{updated}) {
+        if (my $ts = $item->{dcterms}{modified} ||
+                $item->{'http://www.w3.org/2005/Atom'}{updated}) {
+            $ts =~ s/^\s+//;
+            $ts =~ s/\s+$//;
             return eval { DateTime::Format::W3CDTF->parse_datetime($ts) } || eval { XML::Atom::Util::iso2dt($ts) };
         } 
     }
@@ -356,8 +380,12 @@ sub enclosure {
         }
     } else {
         my $tmp  = $entry->{entry}->{enclosure};
-        my @encs = map { XML::Feed::Enclosure->new($_) } (ref $tmp eq 'ARRAY')? @$tmp : ($tmp);
-        return ($XML::Feed::MULTIPLE_ENCLOSURES)? @encs : $encs[-1];
+        if (defined $tmp) {
+            my @encs = map { XML::Feed::Enclosure->new($_) }
+              (ref $tmp eq 'ARRAY')? @$tmp : ($tmp);
+            return ($XML::Feed::MULTIPLE_ENCLOSURES)? @encs : $encs[-1];
+        }
+        return;
     }
 }