Ecosystem

Accessing a Raku Ecosystem

NAME

Ecosystem - Accessing a Raku Ecosystem

SYNOPSIS

use Ecosystem;

my $ec = Ecosystem.new;  # access the REA ecosystem

say "Ecosystem has $ec.identities.elems() identities:";
.say for $ec.identities.keys.sort;

DESCRIPTION

Ecosystem provides the basic logic to accessing a Raku Ecosystem, defaulting to the Raku Ecosystem Archive, a place where (almost) every distribution ever available in the Raku Ecosystem, can be obtained even after it has been removed (specifically in the case of the old ecosystem master list and the distributions kept on CPAN).

CONSTRUCTOR ARGUMENTS

IO

my $ec = Ecosystem.new(IO => "path".IO);

The IO named argument specifies the path of the file that contains / will contain the META information. If not specified, will default to whatever can be determined from the other arguments.

meta-url

my $ec = Ecosystem.new(meta-url => "https://foo.bar/META.json");

The meta-url named argument specifies the URL that should be used to obtain the META information if it is not available locally yet, or if it has been determined to be stale. Will default to whatever can be determined from the other arguments. If specified, then the IO arguments must also be specified to store the meta information in.

stale-period

my $ec = Ecosystem.new(stale-period => 3600);

The stale-period named argument specifies the number of seconds after which the meta information is considered to be stale and needs updating using the meta-url. Defaults to 86400, aka 1 day.

fez

my $ec = Ecosystem.new(:fez);

The fez named argument is a boolean that indicates that the IO and meta-url named arguments should be set to the values needed to access the fez ecosystem. Defaults to False.

rea

my $ec = Ecosystem.new(:rea);

The rea named argument is a boolean that indicates that the IO and meta-url named arguments should be set to the values needed to access the Raku Ecosystem Archive. Defaults to True if no fez or meta-url argument has been specified.

METHODS

distro-names

my $ec = Ecosystem.new;
say "Found $ec.distro-names.elems() differently named distributions";

The distro-names method returns a Map keyed on distribution name, with a sorted list of the identities that have that distribution name (sorted by short-name, latest version first).

find-identities

my $ec = Ecosystem.new;
.say for $ec.find-identities: / Utils /, :ver<0.0.3+>, :auth<zef:lizmat>;

The find-identities method returns identities (sorted by short-name, latest version first) that match the given string or regular expression, potentially filtered by :ver, :auth and/or :api value.

identities

my $ec = Ecosystem.new;
my %identities := $ec.identities;
say "Found %identities.elems() identities";

The identities method returns a Map keyed on identity string, with a Map of the META information of that identity as the value.

IO

my $ec = Ecosystem.new(:IO("foobar.json").IO);
say $ec.IO;  # "foobar.json".IO

The IO method returns the IO::Path object of the file where the local copy of the META data lives.

matches

my $ec = Ecosystem.new;
.say for $ec.matches{ / Utils / };

The matches method returns a Map::Match with the string that caused addition of an identity as the key, and a sorted list of the identities that either matched the distribution name or the description (sorted by short-name, latest version first). It is basically the workhorse of the find-identities method.

meta

my $ec = Ecosystem.new;
say $ec.meta;  # ...

The meta method returns the JSON representation of the META data.

meta-url

my $ec = Ecosystem.new(:fez);
say $ec.meta-url;  # https://360.zef.pm/

The meta-url method returns the URL that is used to fetch the META data, if any.

stale-period

my $ec = Ecosystem.new;
say $ec.stale-period;  # 86400

The stale-period method returns the number of seconds after which any locally stored META information is considered to be stale.

use-targets

my $ec = Ecosystem.new;
say "Found $ec.use-targets.elems() different 'use' targets";

The use-targets method returns a Map keyed on 'use' target, with a sorted list of the identities that provide that 'use' target (sorted by short-name, latest version first).

AUTHOR

Elizabeth Mattijsen [email protected]

Source can be located at: https://github.com/lizmat/Ecosystem . Comments and Pull Requests are welcome.

COPYRIGHT AND LICENSE

Copyright 2022 Elizabeth Mattijsen

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.

Ecosystem v0.0.1

Accessing a Raku Ecosystem

Authors

  • Elizabeth Mattijsen

License

Artistic-2.0

Dependencies

JSON::Fast:ver<0.16>Rakudo::CORE::META:ver<0.0.3>:auth<zef:lizmat>Identity::Utils:ver<0.0.5>:auth<zef:lizmat>Map::Match:ver<0.0.2>:auth<zef:lizmat>

Test Dependencies

Provides

  • Ecosystem

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.