Commit | Line | Data |
499ebcdd |
1 | package System::Introspector::Report::Publish::MediaWiki::Page; |
2 | use Moo; |
3 | |
21e7cc98 |
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); |
0331d9cd |
9 | has timestamp => (is => 'ro', predicate => 'has_timestamp'); |
21e7cc98 |
10 | has content => (is => 'rwp', required => 1); |
11 | |
7a479e54 |
12 | sub is_new { not $_[0]->has_timestamp } |
13 | |
21e7cc98 |
14 | my $_producer = Producer->new; |
15 | my $_parser = Parser->new; |
16 | my $_updater = Updater->new; |
499ebcdd |
17 | |
7a479e54 |
18 | my $_trim = sub { |
19 | my ($body) = @_; |
20 | $body =~ s{^\s+}{}; |
21 | $body =~ s{\s+$}{}; |
22 | return $body; |
23 | }; |
24 | |
499ebcdd |
25 | sub 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 | |
38 | 1; |