Added apply_if to only run an apply block if a predicate is true
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / StreamBase.pm
CommitLineData
5f74b883 1package HTML::Zoom::StreamBase;
2
3use strict;
4use warnings FATAL => 'all';
97192b02 5use HTML::Zoom::TransformBuilder;
d80786d0 6
7sub _zconfig { shift->{_zconfig} }
5f74b883 8
3cdbc13f 9sub peek {
10 my ($self) = @_;
11 if (exists $self->{_peeked}) {
12 return ($self->{_peeked});
13 }
12bfb3b7 14 if (my ($peeked) = $self->_next(1)) {
3cdbc13f 15 return ($self->{_peeked} = $peeked);
16 }
17 return;
18}
19
b5a48c47 20sub next {
21 my ($self) = @_;
22
23 # peeked entry so return that
24
25 if (exists $self->{_peeked}) {
12bfb3b7 26 if (my $peeked_from = delete $self->{_peeked_from}) {
27 $peeked_from->next;
28 }
b5a48c47 29 return (delete $self->{_peeked});
30 }
31
32 $self->_next;
33}
34
35
3cdbc13f 36sub flatten {
8a1c87d1 37 my $self = shift;
38 require HTML::Zoom::FlattenedStream;
39 HTML::Zoom::FlattenedStream->new({
40 source => $self,
41 zconfig => $self->_zconfig
3cdbc13f 42 });
43}
44
45sub map {
8a1c87d1 46 my ($self, $mapper) = @_;
47 require HTML::Zoom::MappedStream;
48 HTML::Zoom::MappedStream->new({
49 source => $self, mapper => $mapper, zconfig => $self->_zconfig
3cdbc13f 50 });
51}
52
d80786d0 53sub with_filter {
54 my ($self, $selector, $filter) = @_;
55 my $match = $self->_parse_selector($selector);
56 $self->_zconfig->stream_utils->wrap_with_filter($self, $match, $filter);
57}
58
97192b02 59sub with_transform {
60 my ($self, $transform) = @_;
61 $transform->apply_to_stream($self);
d80786d0 62}
63
97192b02 64sub select {
d80786d0 65 my ($self, $selector) = @_;
97192b02 66 return HTML::Zoom::TransformBuilder->new({
67 zconfig => $self->_zconfig,
68 selector => $selector,
69 filters => [],
70 proto => $self,
71 });
d80786d0 72}
73
a88c1c57 74sub then {
75 my ($self) = @_;
76 # see notes in HTML/Zoom.pm for why this needs to be fixed
77 $self->select($self->transform->selector);
78}
79
1c4455ae 80sub apply {
81 my ($self, $code) = @_;
82 local $_ = $self;
83 $self->$code;
84}
85
fdb039c6 86sub apply_if {
87 my ($self, $predicate, $code) = @_;
88 if($predicate) {
89 local $_ = $self;
90 $self->$code;
91 }
92 else {
93 $self;
94 }
95}
96
12bfb3b7 97sub to_html {
98 my ($self) = @_;
99 $self->_zconfig->producer->html_from_stream($self);
100}
101
5f74b883 1021;