AnyEvent-Net-Curl-Queued

 view release on metacpan or  search on metacpan

lib/YADA.pm  view on Meta::CPAN

package YADA;
# ABSTRACT: "Yet Another Download Accelerator": alias for AnyEvent::Net::Curl::Queued


use feature qw(switch);
use strict;
use utf8;
use warnings qw(all);

use Digest::SHA qw(sha256_base64);
use Moo;
use MooX::Types::MooseLike::Base qw(
    ArrayRef
    HashRef
    Object
    Str
);
use URI;

extends 'AnyEvent::Net::Curl::Queued';

use YADA::Worker;

no if ($] >= 5.017010), warnings => q(experimental);

our $VERSION = '0.049'; # VERSION

has _queue      => (
    is          => 'ro',
    isa         => ArrayRef[Object],
    default     => sub { [] },
);

has _unique_url => (
    is          => 'ro',
    isa         => HashRef[Str],
    default     => sub { {} },
);

# serious DWIMmery ahead!

## no critic (RequireArgUnpacking)
around append   => sub { _dwim(append => @_) };
around prepend  => sub { _dwim(prepend => @_) };

sub _dwim {
    my $type = shift;
    my $orig = shift;
    my $self = shift;

    if (1 < scalar @_) {
        my (%init, @url);
        for my $arg (@_) {
            for (ref $arg) {
                when ($_ eq '' or m{^URI::}x) {
                    push @url, $arg;
                } when ('ARRAY') {
                    push @url, @{$arg};
                } when ('CODE') {
                    unless (exists $init{on_finish}) {
                        $init{on_finish} = $arg;
                    } else {
                        @init{qw{on_init on_finish}} = ($init{on_finish}, $arg);
                    }
                } when ('HASH') {
                    $init{$_} = $arg->{$_}
                        for keys %{$arg};



( run in 0.616 second using v1.01-cache-2.11-cpan-39bf76dae61 )