Commit | Line | Data |
eeeb0921 |
1 | package HTML::Zoom::TransformBuilder; |
2 | |
1cf03540 |
3 | use strictures 1; |
eeeb0921 |
4 | use base qw(HTML::Zoom::SubObject); |
a88c1c57 |
5 | use HTML::Zoom::Transform; |
eeeb0921 |
6 | |
7 | sub new { |
8 | my ($class, $args) = @_; |
9 | my $new = $class->SUPER::new($args); |
10 | $new->{transform} = |
11 | $args->{transform} |
12 | || HTML::Zoom::Transform->new({ |
13 | zconfig => $new->{_zconfig}, |
14 | selector => $args->{selector}, |
15 | filters => [], |
16 | }); |
17 | $new->{proto} = $args->{proto}; |
18 | $new |
19 | } |
20 | |
21 | sub DESTROY {} |
22 | |
23 | sub AUTOLOAD { |
24 | my $meth = our $AUTOLOAD; |
25 | $meth =~ s/.*:://; |
26 | my $self = shift; |
27 | my $fb = $self->_zconfig->filter_builder; |
28 | if (my $cr = $fb->can($meth)) { |
29 | return $self->{proto}->with_transform( |
30 | $self->{transform}->with_filter($fb->$cr(@_)) |
31 | ); |
32 | } |
33 | die "Filter builder $fb does not provide action ${meth}"; |
34 | } |
35 | |
36 | 1; |