Changeset 550


Ignore:
Timestamp:
Nov 16, 2004, 3:27:27 PM (17 years ago)
Author:
kake
Message:

Move RSS stuff to OpenGuides.pm, add some tests.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/OpenGuides.pm

    r549 r550  
    510510}
    511511
     512=item B<display_rss>
     513
     514  # Last ten non-minor edits to Hammersmith pages.
     515  $guide->display_rss(
     516                       items              => 10,
     517                       ignore_minor_edits => 1,
     518                       locale             => "Hammersmith",
     519                     );
     520
     521  # All edits bob has made to pub pages in the last week.
     522  $guide->display_rss(
     523                       days     => 7,
     524                       username => "bob",
     525                       category => "Pubs",
     526                     );
     527
     528As with other methods, the C<return_output> parameter can be used to
     529return the output instead of printing it to STDOUT.
     530
     531=cut
     532
     533sub display_rss {
     534    my ($self, %args) = @_;
     535    use Data::Dumper;warn Dumper \%args;
     536    my $return_output = $args{return_output} ? 1 : 0;
     537
     538    my $items = $args{items} || "";
     539    my $days  = $args{days}  || "";
     540    my $ignore_minor_edits = $args{ignore_minor_edits} ? 1 : 0;
     541    my $username = $args{username} || "";
     542    my $category = $args{category} || "";
     543    my $locale   = $args{locale}   || "";
     544    my %criteria = (
     545                     items              => $items,
     546                     days               => $days,
     547                     ignore_minor_edits => $ignore_minor_edits,
     548                   );
     549    my %filter;
     550    $filter{username} = $username if $username;
     551    $filter{category} = $category if $category;
     552    $filter{locale}   = $locale   if $locale;
     553    if ( scalar keys %filter ) {
     554        $criteria{filter_on_metadata} = \%filter;
     555    }
     556
     557    my $rdf_writer = OpenGuides::RDF->new( wiki   => $self->wiki,
     558                                           config => $self->config );
     559    my $output = "Content-type: text/plain\n\n";
     560    $output .= $rdf_writer->make_recentchanges_rss( %criteria );
     561    return $output if $return_output;
     562    print $output;
     563}
     564
    512565=item B<commit_node>
    513566
  • trunk/lib/OpenGuides/RDF.pm

    r549 r550  
    263263sub make_recentchanges_rss {
    264264    my ($self, %args) = @_;
     265
    265266    my $rssmaker = CGI::Wiki::Plugin::RSS::ModWiki->new(
    266267        wiki      => $self->{wiki},
  • trunk/t/22_rss_modwiki.t

    r549 r550  
    22use CGI::Wiki::Setup::SQLite;
    33use Config::Tiny;
     4use OpenGuides;
    45use OpenGuides::RDF;
    56use OpenGuides::Utils;
    6 use Test::More tests => 1;
     7use Test::More;
    78
    89eval { require DBD::SQLite; };
    9 my $have_sqlite = $@ ? 0 : 1;
     10if ( $@ ) {
     11    plan skip_all => "DBD::SQLite not installed";
     12} else {
     13    plan tests => 7;
    1014
    11 SKIP: {
    12     skip "DBD::SQLite not installed - no database to test with", 1
    13       unless $have_sqlite;
     15    # Clear out the database from any previous runs.
     16    unlink "t/node.db";
     17    unlink <t/indexes/*>;
    1418
    1519    CGI::Wiki::Setup::SQLite::setup( { dbname => "t/node.db" } );
     
    1923                     dbname             => "t/node.db",
    2024                     indexing_directory => "t/indexes",
    21                      script_url         => "http://wiki.example.com/",
    22                      script_name        => "mywiki.cgi",
    23                      site_name          => "CGI::Wiki Test Site",
     25                     script_name        => "wiki.cgi",
     26                     script_url         => "http://example.com/",
     27                     site_name          => "Test Site",
     28                     template_path      => "./templates",
     29                     home_name          => "Home",
    2430                   };
    2531
     32    # Plucene is the recommended searcher now.
     33    eval { require CGI::Wiki::Search::Plucene; };
     34    unless ( $@ ) {
     35        $config->{_}{use_plucene} = 1;
     36    }
     37
     38    # Basic sanity check first.
    2639    my $wiki = OpenGuides::Utils->make_wiki_object( config => $config );
    2740
     
    3144    my $rss = eval { $rdf_writer->make_recentchanges_rss; };
    3245    is( $@, "", "->make_recentchanges_rss doesn't croak" );
     46
     47    # Now write some data, first a minor edit then a non-minor one.
     48    my $guide = OpenGuides->new( config => $config );
     49   
     50    # Set up CGI parameters ready for a node write.
     51    # Most of these are in here to avoid uninitialised value warnings.
     52    my $q = CGI->new;
     53    $q->param( -name => "content", -value => "foo" );
     54    $q->param( -name => "categories", -value => "" );
     55    $q->param( -name => "locales", -value => "" );
     56    $q->param( -name => "phone", -value => "" );
     57    $q->param( -name => "fax", -value => "" );
     58    $q->param( -name => "website", -value => "" );
     59    $q->param( -name => "hours_text", -value => "" );
     60    $q->param( -name => "address", -value => "" );
     61    $q->param( -name => "postcode", -value => "" );
     62    $q->param( -name => "map_link", -value => "" );
     63    $q->param( -name => "os_x", -value => "" );
     64    $q->param( -name => "os_y", -value => "" );
     65    $q->param( -name => "username", -value => "bob" );
     66    $q->param( -name => "comment", -value => "foo" );
     67    $q->param( -name => "edit_type", -value => "Minor tidying" );
     68    $ENV{REMOTE_ADDR} = "127.0.0.1";
     69
     70    my $output = $guide->commit_node(
     71                                      return_output => 1,
     72                                      id => "Wombats",
     73                                      cgi_obj => $q,
     74                                    );
     75
     76    $q->param( -name => "edit_type", -value => "Normal edit" );
     77    $output = $guide->commit_node(
     78                                   return_output => 1,
     79                                   id => "Badgers",
     80                                   cgi_obj => $q,
     81                                 );
     82
     83    $q->param( -name => "username", -value => "Kake" );
     84    $output = $guide->commit_node(
     85                                   return_output => 1,
     86                                   id => "Wombles",
     87                                   cgi_obj => $q,
     88                                 );
     89
     90    # Check that the writes went in.
     91    ok( $wiki->node_exists( "Wombats" ), "Wombats written" );
     92    ok( $wiki->node_exists( "Badgers" ), "Badgers written" );
     93    ok( $wiki->node_exists( "Wombles" ), "Wombles written" );
     94
     95    # Check that the minor edits can be filtered out.
     96    $output = $guide->display_rss(
     97                                   items              => 5,
     98                                   username           => "bob",
     99                                   ignore_minor_edits => 1,
     100                                   return_output      => 1,
     101                                 );
     102    unlike( $output, qr/Wombats/, "minor edits filtered out when required" );
     103    like( $output, qr/Badgers/, "but normal edits still in" );
     104
     105    # Check that the username parameter is taken notice of.
     106    unlike( $output, qr/Wombles/, "username parameter taken note of" );
    33107}
    34 
    35 
  • trunk/wiki.cgi

    r549 r550  
    105105        my $feed = $q->param("feed");
    106106        if ( !defined $feed or $feed eq "recent_changes" ) {
    107             my $items = $q->param("items") || "";
    108             my $days  = $q->param("days")  || "";
    109             my $ignore_minor_edits = $q->param("ignore_minor_edits") ? 1 : 0;
    110             my $username = $q->param("username") || "";
    111             my $category = $q->param("category") || "";
    112             my $locale   = $q->param("locale")   || "";
    113             my %criteria = (
    114                              items              => $items,
    115                              days               => $days,
    116                              ignore_minor_edits => $ignore_minor_edits,
    117                            );
    118             my %filter;
    119             $filter{username} = $username if $username;
    120             $filter{category} = $category if $category;
    121             $filter{locale}   = $locale   if $locale;
    122             if ( scalar keys %filter ) {
    123                 $criteria{filter_on_metadata} = \%filter;
    124             }
    125             emit_recent_changes_rss( %criteria );
     107            my %args = map { $_ => ( $q->param($_) || "" ) }
     108                       qw( feed items days ignore_minor_edits username
     109                           category locale );
     110            $guide->display_rss( %args );
    126111        } elsif ( $feed eq "chef_dan" ) {
    127112            display_node_rdf( node => $node );
     
    266251}
    267252
    268 sub emit_recent_changes_rss {
    269     my %args = @_;
    270     my $rdf_writer = OpenGuides::RDF->new( wiki      => $wiki,
    271                                            config => $config );
    272     print "Content-type: text/plain\n\n";
    273     print $rdf_writer->make_recentchanges_rss( %args );
    274     exit 0;
    275 }
    276 
    277253sub display_node_rdf {
    278254    my %args = @_;
Note: See TracChangeset for help on using the changeset viewer.