merge allocate
Simon Elliott [Wed, 20 Feb 2013 14:51:45 +0000 (14:51 +0000)]
1  2 
lib/HTML/Zoom.pm

diff --combined lib/HTML/Zoom.pm
@@@ -8,7 -8,7 +8,7 @@@ use HTML::Zoom::Transform
  use HTML::Zoom::TransformBuilder;
  use Scalar::Util ();
  
- our $VERSION = '0.009005';
+ our $VERSION = '0.009007_1';
  
  $VERSION = eval $VERSION;
  
@@@ -155,19 -155,7 +155,19 @@@ sub AUTOLOAD 
    my $sel = $self->select($selector);
    my $meth = our $AUTOLOAD;
    $meth =~ s/.*:://;
 -  if(my $cr = $sel->_zconfig->filter_builder->can($meth)) {
 +  if (ref($selector) eq 'HASH') {
 +    my $ret = $self;
 +    $ret = $ret->_do($_, $meth, @{$selector->{$_}}) for keys %$selector;
 +    $ret;
 +  } else {
 +    $self->_do($selector, $meth, @args);
 +  }
 +}
 +
 +sub _do {
 +  my ($self, $selector, $meth, @args) = @_;
 +  my $sel = $self->select($selector);
 +  if( my $cr = $sel->_zconfig->filter_builder->can($meth)) {
      return $sel->$meth(@args);
    } else {
      die "We can't do $meth on ->select('$selector')";
@@@ -213,14 -201,13 +213,14 @@@ HTML::Zoom - selector based streaming t
              $_->select('.name')->replace_content('Matt')
                ->select('.age')->replace_content('26')
            },
 +          # alternate form
            sub {
 -            $_->select('.name')->replace_content('Mark')
 -              ->select('.age')->replace_content('0x29')
 +            $_->replace_content({'.name' => ['Mark'],'.age' => ['0x29'] })
            },
 +          #alternate alternate form
            sub {
 -            $_->select('.name')->replace_content('Epitaph')
 -              ->select('.age')->replace_content('<redacted>')
 +            $_->replace_content('.name' => 'Epitaph')
 +              ->replace_content('.age' => '<redacted>')
            },
          ],
          { repeat_between => '.between' }
@@@ -343,12 -330,14 +343,12 @@@ cleanly
         ->add_to_attribute( for => $field->{id} )
         ->then
         ->replace_content( $field->{label} )
 -
 -       ->select('input')
 -       ->add_to_attribute( name => $field->{name} )
 -       ->then
 -       ->add_to_attribute( type => $field->{type} )
 -       ->then
 -       ->add_to_attribute( value => $field->{value} )
 -
 +       ->add_to_attribute(
 +        input => { 
 +         name => $field->{name},
 +         type => $field->{type},
 +         value => $field->{value}
 +       })
      } } @fields
    ]);
  
@@@ -643,6 -632,12 +643,12 @@@ zoom instance with that as the source H
  
  Convenience method - slurps the contents of $file and calls from_html with it.
  
+ =head2 from_events
+   my $zoom = HTML::Zoom->from_events($evt);
+ Create a new Zoom object from collected events
  =head2 to_stream
  
    my $stream = $zoom->to_stream;
@@@ -691,6 -686,14 +697,14 @@@ sugar, the following is entirely equiva
  
    my $z2 = $sub->($z1);
  
+ =head2 apply_if
+   my $z2 = $z1->apply_if($cond, sub {
+     $_->select('div')->replace_content('I AM A DIV!') })
+   });
+ ->apply but will only run the tranform if $cond is true
  =head2 to_html
  
    my $html = $zoom->to_html;
@@@ -767,7 -770,7 +781,7 @@@ Oliver Charle
  
  Jakub Nareski
  
 -Simon Elliot
 +Simon Elliott
  
  Joe Highton
  
@@@ -775,6 -778,8 +789,8 @@@ John Napiorkowsk
  
  Robert Buels
  
+ David Dorward
  =head1 COPYRIGHT
  
  Copyright (c) 2010-2011 the HTML::Zoom L</AUTHOR> and L</CONTRIBUTORS>