mediawiki merging, row identification, tests
[scpubgit/System-Introspector-Report.git] / lib / System / Introspector / Report / Publish / MediaWiki.pm
CommitLineData
499ebcdd 1package System::Introspector::Report::Publish::MediaWiki;
2use Moo;
499ebcdd 3use aliased 'System::Introspector::Report::Publish::MediaWiki::Connection';
4
5has page_options => (
6 is => 'ro',
7 default => sub { {} },
8 init_arg => 'page',
9);
10
499ebcdd 11has connection => (is => 'ro', lazy => 1, builder => 1, handles => {
12 get_page => 'get',
13 put_page => 'put',
14});
15
16sub _build_producer { Producer->new }
17sub _build_connection { Connection->new }
18
19sub publish {
20 my ($self, $reports) = @_;
21 my $pages = $self->page_options;
22 for my $page (sort keys %$pages) {
23 $self->_publish_page($reports, $page, $pages->{$page});
24 }
25 return 1;
26}
27
28sub _sort_reports {
29 my ($self, $reports, $included) = @_;
30 my @matchers = map {
31 $self->_prepare_matcher_from($_);
32 } ref($included) ? @{$included} : $included;
33 my @grouped;
34 for my $report (@$reports) {
35 my ($group_idx) = grep {
36 $self->_match_id($report, $matchers[$_]);
37 } 0 .. $#matchers;
38 if (defined $group_idx) {
39 push @{$grouped[$group_idx]}, $report;
40 }
41 }
42 return [ map { (@$_) } @grouped ];
43}
44
45sub _publish_page {
21e7cc98 46 my ($self, $reports, $page_name, $options) = @_;
499ebcdd 47 my $sorted = $self->_sort_reports($reports, $options->{report} || []);
21e7cc98 48 my $page = $self->get_page($page_name);
49 $page->update($sorted);
50 $self->put_page($page);
499ebcdd 51 return 1;
52}
53
54with $_ for qw(
55 System::Introspector::Report::Publish::API
56);
57
581;