add DESTROY methods to fix 5.14 noticing them being missing.
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / StreamBase.pm
CommitLineData
5f74b883 1package HTML::Zoom::StreamBase;
2
1cf03540 3use strictures 1;
97192b02 4use HTML::Zoom::TransformBuilder;
d80786d0 5
6sub _zconfig { shift->{_zconfig} }
5f74b883 7
3cdbc13f 8sub peek {
9 my ($self) = @_;
10 if (exists $self->{_peeked}) {
11 return ($self->{_peeked});
12 }
12bfb3b7 13 if (my ($peeked) = $self->_next(1)) {
3cdbc13f 14 return ($self->{_peeked} = $peeked);
15 }
16 return;
17}
18
b5a48c47 19sub next {
20 my ($self) = @_;
21
22 # peeked entry so return that
23
24 if (exists $self->{_peeked}) {
12bfb3b7 25 if (my $peeked_from = delete $self->{_peeked_from}) {
26 $peeked_from->next;
27 }
b5a48c47 28 return (delete $self->{_peeked});
29 }
30
31 $self->_next;
32}
33
34
3cdbc13f 35sub flatten {
8a1c87d1 36 my $self = shift;
37 require HTML::Zoom::FlattenedStream;
38 HTML::Zoom::FlattenedStream->new({
39 source => $self,
40 zconfig => $self->_zconfig
3cdbc13f 41 });
42}
43
44sub map {
8a1c87d1 45 my ($self, $mapper) = @_;
46 require HTML::Zoom::MappedStream;
47 HTML::Zoom::MappedStream->new({
48 source => $self, mapper => $mapper, zconfig => $self->_zconfig
3cdbc13f 49 });
50}
51
d80786d0 52sub with_filter {
53 my ($self, $selector, $filter) = @_;
54 my $match = $self->_parse_selector($selector);
55 $self->_zconfig->stream_utils->wrap_with_filter($self, $match, $filter);
56}
57
97192b02 58sub with_transform {
59 my ($self, $transform) = @_;
60 $transform->apply_to_stream($self);
d80786d0 61}
62
97192b02 63sub select {
d80786d0 64 my ($self, $selector) = @_;
97192b02 65 return HTML::Zoom::TransformBuilder->new({
66 zconfig => $self->_zconfig,
67 selector => $selector,
68 filters => [],
69 proto => $self,
70 });
d80786d0 71}
72
a88c1c57 73sub then {
74 my ($self) = @_;
75 # see notes in HTML/Zoom.pm for why this needs to be fixed
76 $self->select($self->transform->selector);
77}
78
1c4455ae 79sub apply {
80 my ($self, $code) = @_;
81 local $_ = $self;
82 $self->$code;
83}
84
fdb039c6 85sub apply_if {
86 my ($self, $predicate, $code) = @_;
87 if($predicate) {
88 local $_ = $self;
89 $self->$code;
90 }
91 else {
92 $self;
93 }
94}
95
12bfb3b7 96sub to_html {
97 my ($self) = @_;
98 $self->_zconfig->producer->html_from_stream($self);
99}
100
94a3ddd9 101sub AUTOLOAD {
102 my ($self, $selector, @args) = @_;
8de323e1 103 my $sel = $self->select($selector);
94a3ddd9 104 my $meth = our $AUTOLOAD;
105 $meth =~ s/.*:://;
8de323e1 106 if (ref($selector) eq 'HASH') {
107 my $ret = $self;
108 $ret = $ret->_do($_, $meth, @{$selector->{$_}}) for keys %$selector;
109 $ret;
110 } else {
111 $self->_do($selector, $meth, @args);
112 }
113}
114
115sub _do {
116 my ($self, $selector, $meth, @args) = @_;
117 return $self->select($selector)->$meth(@args);
94a3ddd9 118}
119
268f2c35 120sub DESTROY {}
bce7b351 121
5f74b883 1221;