Make ->add_after("foo") etc. from HTML::Zoom::FilterBuilder work action
authorJakub Narebski <jnareb@gmail.com>
Wed, 12 Jan 2011 18:46:39 +0000 (19:46 +0100)
committerJakub Narebski <jnareb@gmail.com>
Wed, 12 Jan 2011 18:46:39 +0000 (19:46 +0100)
commit768272e475ef2f18ccecfc3e1c88cbc5c093feb7
treed1614e4c2bd0232e1baaf81d1de7b0de187d7a2b
parent9aa040d772843c4301d4d2e4469dc65f842798d9
Make ->add_after("foo") etc. from HTML::Zoom::FilterBuilder work

Unfortunately fixing ->add_before("foo") is not that easy.

  sub add_before {
    my ($self, $events) = @_;
    sub { return $self->$self->_stream_from_proto($events), $_[0]) };
  }

doesn't work, as it dies with the following error message

  Can't call method "next" on unblessed reference
  at HTML-Zoom/lib/HTML/Zoom/FlattenedStream.pm line 17.

The following does work, but is overly complicated; there should be
easier way to do this:

  sub add_before {
    my ($self, $events) = @_;
    my $emit = $self->_stream_from_proto($events);
    my @evts = $self->_zconfig->stream_utils->stream_to_array($emit);
    sub { return $self->_stream_from_array(@evts, $_[0]) };
  }
lib/HTML/Zoom/FilterBuilder.pm