NAME

Mojo::Pua - HTTP Client + Evo::Promise

VERSION

version 0.010

SYNOPSIS

Mojo::Pua inherits all methods from Mojo::UserAgent but returns Evo::Promise::Mojo object for each request

use Evo 'Mojo::Pua';
my $ua = Mojo::Pua->new();

$ua->get("http://alexbyk.com/")

  ->then(sub($tx) {
    my $res = $tx->success;
    $res ? say $res->dom->at('title') : say "ERROR: ", $tx->error->{message};
  })

  ->catch(sub($err) { say "CATCHED: $err" })

  ->finally(sub { Mojo::IOLoop->stop; });

Mojo::IOLoop->start;

Pay attention, 400 and 500 codes don't cause an exception. You should check Mojo::Transaction::HTTP/success to determine a success of a request.

A promise will be rejected on network errors only:

$ua->get("http://localhost:2222/")

  ->catch(sub($err) { say "CATCHED: $err" })
  ->finally(sub     { Mojo::IOLoop->stop; });

But if you want to make life easier, see "want_code" promise onFulfill generator

DESCRIPTION

This module is based on Mojo::UserAgent and allows you to use promises (Evo::Promise::Mojo)

METHODS

All methods get, post ... from Mojo::UserAgent return a promise

FUNCTIONS

PUA

A single instance of Mojo::Pua.

use Evo 'Mojo::Pua PUA';
PUA->get('http://mail.ru')->then(sub {...});

want_code

Return a promise onFulfill handler that will be fulfilled only if the response code matches a given one. Then it will pass a Mojo::Message::Response object (not a transaction), or will throw an exception

use Evo 'Mojo::Pua want_code';
my $ua = Mojo::Pua->new();

# accept only 200 code
$ua->get("http://httpstat.us/200")->then(want_code 200)

  # pay attention, $res, not $tx
  ->then(sub ($res) { say $res->body })->finally(sub { Mojo::IOLoop->stop; });

Mojo::IOLoop->start;

# accept only 201 code
$ua->get("http://httpstat.us/200")->then(want_code 201)

  # 201 != 200, promise is rejected
  ->catch(sub($err) { say "CATCHED: $err" })
  ->finally(sub     { Mojo::IOLoop->stop; });

Mojo::IOLoop->start;

Return

SEE ALSO

Mojo::UserAgent Evo::Promise::Mojo https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

AUTHOR

alexbyk <alexbyk.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2016 by alexbyk.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.