Mojo-Transaction-HTTP-Role-Mechanize

 view release on metacpan or  search on metacpan

lib/Mojo/Transaction/HTTP/Role/Mechanize.pm  view on Meta::CPAN

sub extract_forms {
  my $self = shift;

  my $forms
    = $self->res->dom->find('form')->each(sub { $_->with_roles('+Form') });

  return $forms;
}

sub submit {
  my ($self, $selector, $overlay) = (shift);
  $overlay  = pop   if @_ && ref($_[-1]) eq 'HASH';
  $selector = shift if @_ % 2;
  $overlay ||= {@_};

  # cannot continue from error state
  return if $self->error;

  # extract form
  my $form = $self->extract_forms->grep(sub { $_->at($selector // '') })->first
    or return;

  return unless (my ($method, $target, $type) = $form->target($selector));
  $target = $self->req->url->new($target);
  $target = $target->to_abs($self->req->url) unless $target->is_abs;

  # values from form
  my $state = $form->val($selector);

  # merge in new values of form elements
  my @keys = grep { exists $overlay->{$_} } keys %$state;
  @$state{@keys} = @$overlay{@keys};

  # build a new transaction ...
  return Mojo::UserAgent::Transactor->new->tx(
    $method => $target,
    {}, form => $state
  )->previous($self);
}

1;



( run in 0.419 second using v1.01-cache-2.11-cpan-3b35f9de6a3 )