add a simple summary to mediawiki edits
[scpubgit/System-Introspector-Report.git] / lib / System / Introspector / Report / Publish / MediaWiki / Page.pm
1 package System::Introspector::Report::Publish::MediaWiki::Page;
2 use Moo;
3
4 use aliased 'System::Introspector::Report::Publish::MediaWiki::Parser';
5 use aliased 'System::Introspector::Report::Publish::MediaWiki::Producer';
6 use aliased 'System::Introspector::Report::Updater';
7
8 has name      => (is => 'ro', required => 1);
9 has timestamp => (is => 'ro', predicate => 'has_timestamp');
10 has content   => (is => 'rwp', required => 1);
11
12 sub is_new { not $_[0]->has_timestamp }
13
14 my $_producer = Producer->new;
15 my $_parser   = Parser->new;
16 my $_updater  = Updater->new;
17
18 my $_trim = sub {
19   my ($body) = @_;
20   $body =~ s{^\s+}{};
21   $body =~ s{\s+$}{};
22   return $body;
23 };
24
25 sub update {
26   my ($self, $update_stream) = @_;
27   my $content_before  = $self->content;
28   my $original_stream = $_parser->parse($content_before);
29   my $merged_stream   = $_updater->merge($original_stream, $update_stream);
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);
35   return 1;
36 }
37
38 1;