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