dynamic page-name publishing for mediawiki
[scpubgit/System-Introspector-Report.git] / lib / System / Introspector / Report / Publish / MediaWiki / Page.pm
CommitLineData
499ebcdd 1package System::Introspector::Report::Publish::MediaWiki::Page;
2use Moo;
3
21e7cc98 4use aliased 'System::Introspector::Report::Publish::MediaWiki::Parser';
5use aliased 'System::Introspector::Report::Publish::MediaWiki::Producer';
6use aliased 'System::Introspector::Report::Updater';
7
8has name => (is => 'ro', required => 1);
0331d9cd 9has timestamp => (is => 'ro', predicate => 'has_timestamp');
21e7cc98 10has content => (is => 'rwp', required => 1);
11
7a479e54 12sub is_new { not $_[0]->has_timestamp }
13
21e7cc98 14my $_producer = Producer->new;
15my $_parser = Parser->new;
16my $_updater = Updater->new;
499ebcdd 17
7a479e54 18my $_trim = sub {
19 my ($body) = @_;
20 $body =~ s{^\s+}{};
21 $body =~ s{\s+$}{};
22 return $body;
23};
24
499ebcdd 25sub update {
26 my ($self, $update_stream) = @_;
7a479e54 27 my $content_before = $self->content;
28 my $original_stream = $_parser->parse($content_before);
21e7cc98 29 my $merged_stream = $_updater->merge($original_stream, $update_stream);
7a479e54 30 my $content_updated = $_producer->render($merged_stream);
31 if ($content_updated->$_trim eq $content_before->$_trim) {
32 return 0;
33 }
34 $self->_set_content($content_updated);
21e7cc98 35 return 1;
499ebcdd 36}
37
381;