1 package System::Introspector::Report::Publish::MediaWiki;
4 use aliased 'System::Introspector::Report::Publish::MediaWiki::Connection';
12 has connection => (is => 'ro', lazy => 1, builder => 1, handles => {
17 has api_uri => (is => 'ro', required => 1);
18 has username => (is => 'ro', required => 1);
19 has password => (is => 'ro', required => 1);
20 has create => (is => 'ro', default => sub { 0 });
21 has http_auth => (is => 'ro');
22 has http_realm => (is => 'ro');
24 sub _build_producer { Producer->new }
26 sub _build_connection {
28 return Connection->new(
29 api_uri => $self->api_uri,
30 username => $self->username,
31 password => $self->password,
32 create => $self->create,
35 http_realm => $self->http_realm,
41 my ($self, $reports) = @_;
42 my $pages = $self->page_options;
43 printf "Pushing reports to MediaWiki at '%s'\n", $self->api_uri;
44 for my $page (sort keys %$pages) {
45 print "Updating page '$page'\n";
46 $self->_publish_page($reports, $page, $pages->{$page});
52 my ($self, $reports, $included) = @_;
54 $self->_prepare_matcher_from($_);
55 } ref($included) ? @{$included} : $included;
57 for my $report (@$reports) {
58 my ($group_idx) = grep {
59 $self->_match_id($report, $matchers[$_]);
61 if (defined $group_idx) {
62 push @{$grouped[$group_idx]}, $report;
65 return [ map { (@$_) } @grouped ];
69 my ($self, $reports, $page_name, $options) = @_;
70 my $sorted = $self->_sort_reports($reports, $options->{report} || []);
72 my $page = $self->get_page($page_name);
73 $page->update($sorted);
74 $self->put_page($page);
77 print "Error during page update: $_\n";
83 System::Introspector::Report::Publish::API