Commit | Line | Data |
eeeb0921 |
1 | package HTML::Zoom::TransformBuilder; |
2 | |
3 | use strict; |
4 | use warnings FATAL => 'all'; |
5 | use base qw(HTML::Zoom::SubObject); |
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; |