Rules / Types, classes & roles / domain-specific

CompUnit::Repository::FileSystem Reference

CompUnit::Repository::FileSystem

What it is #

Routines #

Signatures are reproduced from the documentation, including their declared return types. A routine listed here is part of the type's published interface; whether Raku++ implements it is a separate question, answered by the examples below.

method candidates #

multi method candidates(Str:D $name, :$auth, :$ver, :$api)
multi method candidates(CompUnit::DependencySpecification $spec)

Return all distributions that contain a module matching the specified $name, auth, ver, and api.

method files #

multi method files(Str:D $name, :$auth, :$ver, :$api)
multi method files(CompUnit::DependencySpecification $spec)

Return all distributions that match the specified auth ver and api, and contains a non-module file matching the specified $name.

method resolve #

method resolve(CompUnit::DependencySpecification $spec --> CompUnit:D)

Returns CompUnit:D.

Returns a CompUnit mapped to the highest version distribution matching $spec from the first repository in the repository chain that contains any version of a distribution matching $spec.

method need #

method need(

Loads and returns a CompUnit which is mapped to the highest version distribution matching $spec from the first repository in the repository chain that contains any version of a distribution matching $spec.

method load #

method load(IO::Path:D $file --> CompUnit:D)

Returns CompUnit:D.

Load the $file and return a CompUnit object representing it.

method loaded #

method loaded(--> Iterable:D)

Returns Iterable:D.

Returns all CompUnits this repository has loaded.

method short-id #

method short-id()

Returns the repo short-id, which for this repository is file.

attribute extensions #

The extensions of files the repository will consider raku modules when prefix does not contain a META6.json file. This can be set when including the library path itself by setting the attribute through the path spec:

Examples, run three ways #

Every example below comes from the official documentation, together with the output that documentation asserts. Each was then executed by Rakudo and by Raku++ when this page was built. Where the three agree, one result is shown; where they do not, all three are — because which of them is wrong is exactly the information worth having.

4 no-output · 2 not-runnable · 1 rakupp-differs

class CompUnit::Repository::FileSystem
does CompUnit::Repository::Locally
does CompUnit::Repository
{ }

Not executed: the documentation states no expected output for this example.

# assuming one is cloned into the zef git repository...
my $repo = CompUnit::Repository::FileSystem.new(prefix => $*CWD);
with $repo.candidates("Zef").head -> $dist {
    say "Zef version: " ~ $dist.meta<version>;
}
else {
    say "No candidates for 'Zef' found";
}

Not executed: the documentation states no expected output for this example.

# assuming one is cloned into the zef git repository...
my $repo = CompUnit::Repository::FileSystem.new(prefix => $*CWD);
say $repo.files('bin/zef', :ver<419.0+>).head.<name>              // "Nada"; # OUTPUT: «Nada␤»
say $repo.files('resources/config.txt', :ver<419.0+>).head.<name> // "Nada"; # OUTPUT: «Nada␤»
Documentation
Nada
Nada
Rakudo
Nada
Nada
Raku++

Raku++ disagrees with both the documentation and Rakudo — a defect.

say $repo.files('bin/zef', :ver<0.4.0+>).head.<name>;                        # OUTPUT: «zef␤»
say $repo.files('resources/config.txt', :ver<0.4.0+>).head.<name>;           # OUTPUT: «zef␤»

Neither engine can run this in isolation — the example depends on context from the surrounding text.

CompUnit::DependencySpecification $spec,
CompUnit::PrecompilationRepository $precomp = self.precomp-repository(),
CompUnit::PrecompilationStore :@precomp-stores = self!precomp-stores(),
--> CompUnit:D)

Not executed: the documentation states no expected output for this example.

my $repo = CompUnit::RepositoryFileSystem.new(:prefix($*CWD));
say $repo.extensions; # OUTPUT: «[rakumod pm6 pm]␤»

Neither engine can run this in isolation — the example depends on context from the surrounding text.

# Like '-I lib', but only considers .rakumod and .pm6 files as raku modules
raku -I "file#extensions<rakumod pm6>#lib" -e 'use MyModule'

Not executed: the documentation states no expected output for this example.