NAME
YADA - "Yet Another Download Accelerator": alias for AnyEvent::Net::Curl::Queued
VERSION
version 0.049
SYNOPSIS
#!/usr/bin/env perl
use
common::sense;
use
YADA;
YADA->new->append(
[
qw[
...
]
] =>
sub
{
say
$_
[0]->final_url;
say
${
$_
[0]->header};
},
)->
wait
;
WARNING: GONE MOO!
This module isn't using Any::Moose anymore due to the announced deprecation status of that module. The switch to the Moo is known to break modules that do extend 'AnyEvent::Net::Curl::Queued::Easy'
/ extend 'YADA::Worker'
! To keep the compatibility, make sure that you are using MooseX::NonMoose:
Or MouseX::NonMoose:
Or the Any::Moose equivalent:
However, the recommended approach is to switch your subclassing module to Moo altogether (you can use MooX::late to smoothen the transition):
DESCRIPTION
Use AnyEvent::Net::Curl::Queued with fewer keystrokes. Also, the easy things should be easy side of the package. For the hard things should be possible side, refer to the complete AnyEvent::Net::Curl::Queued documentation.
USAGE
The example in "SYNOPSIS" is equivalent to:
#!/usr/bin/env perl
use
common::sense;
my
$q
= AnyEvent::Net::Curl::Queued->new;
$q
->append(
sub
{
AnyEvent::Net::Curl::Queued::Easy->new({
initial_url
=>
$_
,
on_finish
=>
sub
{
say
$_
[0]->final_url;
say
${
$_
[0]->header};
},
})
})
for
qw(
...
)
;
$q
->
wait
;
As you see, YADA overloads append
/prepend
from AnyEvent::Net::Curl::Queued, adding implicit constructor for the worker object. It also makes both methods return a reference to the queue object, so (almost) everything gets chainable. The implicit constructor is triggered only when append
/prepend
receives multiple arguments. The order of arguments (mostly) doesn't matter. Their meaning is induced by their reference type:
String (non-reference) or URI: assumed as "initial_url" in AnyEvent::Net::Curl::Queued::Easy attribute. Passing several URLs will construct & enqueue several workers;
Array: process a batch of URLs;
Hash: attributes set for each AnyEvent::Net::Curl::Queued::Easy instantiated. Passing several hashes will merge them, overwriting values for duplicate keys;
sub { ... }
: assumed as "on_finish" in AnyEvent::Net::Curl::Queued::Easy attribute;sub { ... }, sub { ... }
: the first block is assumed as "on_init" in AnyEvent::Net::Curl::Queued::Easy attribute, while the second one is assumed as "on_finish" in AnyEvent::Net::Curl::Queued::Easy.
Beware!
YADA tries to follow the principle of least astonishment, at least when you play nicely. All the following snippets have the same meaning:
$q
->append(
{
retry
=> 3 },
sub
{
$_
[0]->setopt(
verbose
=> 1) },
# on_init placeholder
\
&on_finish
,
);
$q
->append(
[
qw[
]
],
{
retry
=> 3,
opts
=> {
verbose
=> 1 } },
\
&on_finish
,
);
$q
->append(
URI->new(
$_
) => \
&on_finish
,
{
retry
=> 3,
opts
=> {
verbose
=> 1 } },
)
for
qw[
]
;
$q
->append(
[
qw[
]
] => {
retry
=> 3,
opts
=> {
verbose
=> 1 },
on_finish
=> \
&on_finish
,
}
);
However, you will be astonished if you specify multiple distinct on_init
and on_finish
or try to sneak in initial_url
through attributes! At least, RTFC if you seriously attempt to do that.
SEE ALSO
AUTHOR
Stanislaw Pusep <stas@sysd.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2021 by Stanislaw Pusep.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.