Changeset 308

Show
Ignore:
Timestamp:
05/25/06 15:59:17 (6 years ago)
Author:
nick
Message:

Support for RSS feeds of the node all versions, and tests for it

Location:
wiki-toolkit/trunk
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • wiki-toolkit/trunk/MANIFEST

    r306 r308  
    7171t/296_feed_rss_recentchanges_add_test_data.t 
    7272t/297_feed_rss_recentchanges.t 
     73t/298_feed_rss_node_all_versions.t 
    7374t/300_feed_atom_setup.t 
    7475t/301_feed_atom_add_test_data.t 
  • wiki-toolkit/trunk/lib/Wiki/Toolkit/Feed/Listing.pm

    r298 r308  
    99Handles common data fetching tasks, so that child classes need only 
    1010worry about formatting the feeds. 
     11 
     12Also enforces some common methods that must be implemented. 
    1113 
    1214=cut 
     
    7476    my ($self, %args) = @_; 
    7577 
    76     # TODO. Will make use of store->list_node_all_versions() 
     78    # Check we got the right options 
     79    unless($args{'name'}) { 
     80        return (); 
     81    } 
     82 
     83    # Do the fetch 
     84    my @nodes = $self->{wiki}->list_node_all_versions( 
     85                        name => $args{'name'}, 
     86                        with_content => 0, 
     87                        with_metadata => 1, 
     88    ); 
     89 
     90    # Ensure that all the metadata fields are arrays and not strings 
     91    foreach my $node (@nodes) { 
     92        foreach my $mdk (keys %{$node->{'metadata'}}) { 
     93            unless(ref($node->{'metadata'}->{$mdk}) eq "ARRAY") { 
     94                $node->{'metadata'}->{$mdk} = [ $node->{'metadata'}->{$mdk} ]; 
     95            } 
     96        } 
     97    } 
     98 
     99    return @nodes; 
    77100} 
    78101 
     102 
     103# The following are methods that any feed renderer must provide 
     104 
     105=item B<recent_changes> 
     106All implementing feed renderers must implement a method to fetch a list 
     107of recent changes, and render them 
     108=cut 
     109sub recent_changes    { die("Not implemented by feed renderer!"); } 
     110=item B<node_all_versions> 
     111All implementing feed renderers must implement a method to fetch a list 
     112of the different versions of a node, and render them 
     113=cut 
     114sub node_all_versions { die("Not implemented by feed renderer!"); } 
     115=item B<feed_timestamp> 
     116All implementing feed renderers must implement a method to produce a 
     117feed specific timestamp, based on the supplied node 
     118=cut 
     119sub feed_timestamp    { die("Not implemented by feed renderer!"); } 
     120 
    791211; 
  • wiki-toolkit/trunk/lib/Wiki/Toolkit/Feed/RSS.pm

    r297 r308  
    6262 
    6363  my @changes = $self->fetch_recently_changed_nodes(%args); 
    64   my $rss_timestamp = $self->rss_timestamp( 
     64  my $feed_timestamp = $self->feed_timestamp( 
    6565                              $self->fetch_newest_for_recently_changed(%args) 
    6666  ); 
    6767 
    68   return $self->generate_node_list_feed($rss_timestamp, @changes); 
    69 } 
     68  return $self->generate_node_list_feed($feed_timestamp, @changes); 
     69} 
     70 
     71 
     72=item B<node_all_versions> 
     73 
     74Build an RSS Feed of all the different versions of a given node. 
     75 
     76=cut 
     77sub node_all_versions 
     78{ 
     79  my ($self, %args) = @_; 
     80 
     81  my @all_versions = $self->fetch_node_all_versions(%args); 
     82  my $feed_timestamp = $self->feed_timestamp( $all_versions[0] ); 
     83 
     84  return $self->generate_node_list_feed($feed_timestamp, @all_versions); 
     85} 
     86 
    7087 
    7188=item <generate_node_list_feed> 
     
    7592=cut 
    7693sub generate_node_list_feed { 
    77   my ($self,$rss_timestamp,@nodes) = @_; 
     94  my ($self,$feed_timestamp,@nodes) = @_; 
    7895 
    7996  #"http://purl.org/rss/1.0/modules/wiki/" 
     
    124141<link>}               . $self->{recent_changes_link}  . qq{</link> 
    125142<description>}        . $self->{site_description}     . qq{</description> 
    126 <dc:date>}            . $rss_timestamp                . qq{</dc:date> 
     143<dc:date>}            . $feed_timestamp                . qq{</dc:date> 
    127144<modwiki:interwiki>}     . $self->{interwiki_identifier} . qq{</modwiki:interwiki>}; 
    128145 
     
    214231} 
    215232 
    216 =item B<rss_timestamp> 
     233=item B<feed_timestamp> 
    217234 
    218235Generate the timestamp for the RSS, based on the newest node (if available) 
    219236 
    220237=cut 
    221 sub rss_timestamp 
     238sub feed_timestamp 
    222239{ 
    223240    my ($self, $newest_node) = @_; 
     
    394411=back 
    395412 
    396 =head2 C<rss_timestamp()> 
    397  
    398   print $rss->rss_timestamp(); 
     413=head2 C<feed_timestamp()> 
     414 
     415  print $rss->feed_timestamp(); 
    399416 
    400417Returns the timestamp of the feed in POSIX::strftime style ("Tue, 29 Feb 2000  
  • wiki-toolkit/trunk/t/296_feed_rss_recentchanges_add_test_data.t

    r306 r308  
    1919      my $wiki = Wiki::Toolkit->new( store => $store ); 
    2020 
     21      # Write two versions of one node 
     22      # The recent changes should only show it once though 
    2123      $wiki->write_node( "Old Node", 
    22                          "We will write at least 15 nodes after this one" ); 
     24                         "First version of Old Node" ); 
     25      my %old_node = $wiki->retrieve_node("Old Node"); 
     26      $wiki->write_node( "Old Node", 
     27                         "We will write at least 15 nodes after this one", 
     28                         $old_node{'checksum'} ); 
    2329 
    2430      my $slept = sleep(2);