Commit | Line | Data |
499ebcdd |
1 | package System::Introspector::Report::Publish::MediaWiki; |
2 | use Moo; |
499ebcdd |
3 | use aliased 'System::Introspector::Report::Publish::MediaWiki::Connection'; |
4 | |
5 | has page_options => ( |
6 | is => 'ro', |
7 | default => sub { {} }, |
8 | init_arg => 'page', |
9 | ); |
10 | |
499ebcdd |
11 | has connection => (is => 'ro', lazy => 1, builder => 1, handles => { |
12 | get_page => 'get', |
13 | put_page => 'put', |
14 | }); |
15 | |
16 | sub _build_producer { Producer->new } |
17 | sub _build_connection { Connection->new } |
18 | |
19 | sub 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 | |
28 | sub _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 | |
45 | sub _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 | |
54 | with $_ for qw( |
55 | System::Introspector::Report::Publish::API |
56 | ); |
57 | |
58 | 1; |