File Coverage

blib/lib/WWW/SourceForge/Wiki.pm
Criterion Covered Total %
statement 7 9 77.7
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 10 12 83.3


line stmt bran cond sub pod time code
1             package WWW::SourceForge::Wiki;
2 1     1   21729 use strict;
  1         2  
  1         35  
3 1     1   4 use warnings;
  1         2  
  1         22  
4 1     1   555 use WWW::SourceForge;
  0            
  0            
5             use WWW::SourceForge::Project;
6             use LWP::Simple qw();
7             use Data::Dumper;
8             use JSON::Parse;
9             use LWP::UserAgent;
10             use LWP::Authen::OAuth;
11             use HTTP::Request::Common;
12              
13             our $VERSION = '0.02';
14             our $baseurl = 'https://sourceforge.net/rest/p/';
15              
16             =head1 new
17              
18             my $wiki = WWW::SourceForge::Wiki->new( project => 'newsgrowler' );
19             my $content = $wiki->get_page( page => 'Home' );
20              
21             =cut
22              
23             sub new {
24             my ( $class, %parameters ) = @_;
25             my $self = bless( {}, ref($class) || $class );
26              
27             my $proj_name = $parameters{project};
28              
29             my $proj_obj = WWW::SourceForge::Project->new( name => $proj_name );
30            
31             # Must be an Allura project for this to work
32             if ( $proj_obj->type == 10 ) {
33              
34             # API URL
35             $self->{url_prefix} = $baseurl . $proj_obj->shortdesc() . '/wiki/';
36             return $self;
37              
38             } else {
39             die("This doesn't work on Classic SF projects");
40             }
41              
42             }
43              
44             =head1 list_pages
45              
46             my $ref = $self->list_pages();
47              
48             =cut
49             sub list_pages {
50             my ( $self, %parameters ) = @_;
51             my $url = $self->{url_prefix};
52             return $self->get( url => $url );
53             }
54              
55             =head1 get_page
56              
57             my $ref = $self->get_page( page => 'Home' );
58              
59             =cut
60             sub get_page {
61             my ( $self, %parameters ) = @_;
62             my $url = $self->{url_prefix} . $parameters{page};
63              
64             return $self->get( url => $url );
65             }
66              
67             =head1 get
68              
69             Fetch the JSON and parse it. Die on bad JSON;
70              
71             =cut
72             sub get {
73             my ( $self, %parameters ) = @_;
74             my $r = {};
75              
76             my $json = LWP::Simple::get( $parameters{url} );
77             eval { $r = JSON::Parse::json_to_perl( $json ); };
78             if ( $@ ) {
79             warn $@;
80             return {};
81             } else {
82             return $r;
83             }
84              
85             }
86              
87             =head1 post_page
88              
89             $self->post_page(
90             page => 'NewPage',
91             text => 'Wiki page body goes here',
92             labels => 'new,page,cool',
93             );
94              
95             Must have ConsumerKey and ConsumerSecret set in ~/.sourceforge See
96             https://sourceforge.net/auth/oauth/ to get one.
97              
98             =cut
99             sub post_page {
100             my ( $self, %parameters ) = @_;
101             my $url = $self->{url_prefix} . $parameters{page};
102              
103             my %config = WWW::SourceForge::get_config();
104              
105             my $ua = LWP::Authen::OAuth->new(
106             oauth_consumer_key => $config{consumer_key},
107             oauth_consumer_secret => $config{consumer_secret},
108             oauth_token => $config{oauth_token},
109             oauth_token_secret => $config{oauth_token_secret},
110             );
111              
112             my $response = $ua->post(
113             $url,
114             [
115             text => $parameters{text},
116             labels => $parameters{labels},
117             ]
118             );
119              
120              
121             # I don't know why this isn't working, and could use help from
122             # anyone with OAuth fu that can help me get it working.
123              
124              
125             # TODO: Error Handling
126              
127             return ($response);
128              
129             }
130