Fetch
=title class Zef::Fetch
=subtitle A configurable implementation of the Fetcher interface
Synopsis
use Zef;
use Zef::Fetch;
# Setup with a single fetcher backend
my $fetcher = Zef::Fetch.new(
backends => [
{ module => "Zef::Service::Shell::curl" },
{ module => "Zef::Service::Shell::wget" },
],
);
# Save the content of $uri to $save-to
my $uri = "https://httpbin.org/ip";
my $save-to = $*CWD.child("output.txt");
my $saved-to = $fetcher.fetch(Candidate.new(:$uri), $save-to);
say $saved-to ?? $saved-to.slurp !! "Failed to download and save";
Description
A Fetcher class that uses 1 or more other Fetcher instances as backends. It abstracts the logic
to do 'grab this uri with the first backend that supports the given uri'.
Methods
method fetch-matcher
method fetch-matcher($path --> Bool:D)
Returns True if any of the probeable self.plugins know how to fetch $path.
method fetch
method fetch(Candidate $candi, IO() $save-to, Supplier :$logger, Int :$timeout --> IO::Path)
Fetches the files for $candi (usually as $candi.uri) to $save-to. If a backend fails to fetch
for some reason (such as going over its :$timeout) the next matching backend will be used. Failure occurs
when no backend was able to fetch the $candi.
An optional :$logger can be supplied to receive events about what is occurring.
An optional :$timeout can be passed to denote the number of seconds after which we'll assume failure.
On success it returns the IO::Path where the data was actually fetched to. On failure it returns Nil.
Note this differs from other 'Fetcher' adapters method fetch (i.e. the fetchers this uses as backends) which
take a Str $uri as the first parameter, not a Candidate $candi.