8381021df574eb7de08ad8a7459f019d4f5e5901
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / TransformBuilder.pm
1 package HTML::Zoom::TransformBuilder;
2
3 use strict;
4 use warnings FATAL => 'all';
5 use base qw(HTML::Zoom::SubObject);
6 use HTML::Zoom::Transform;
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;