The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Bolts::Role::Locator - Interface for locating artifacts in a bag

VERSION

version 0.143171

DESCRIPTION

This is the interface that any locator must implement. A locator's primary job is to provide a way to find artifacts within a bag or selection of bags. This performs the acquisition and resolution process.

The reference implementation of this interface is found in Bolts::Role::RootLocator.

REQUIRED METHODS

Note that the behavior described here is considered the ideal and correct behavior. If it works within your application to fudge on this specifications a little bit, that's your choice, but the implementations provided by the Bolts library itself should adhere to these requirements perfectly.

acquire

    my $artifact = $loc->acquire(@path, \%options);

Given a @path of symbol names to traverse, this goes through each artifact in turn, resolves it, if necessary, and then continues to the next path component.

The final argument, \%options, is optional. It must be a reference to a hash to pass through to the final component to aid with resolution.

When complete, the complete, resolved artifact found is returned.

acquire_all

    my @artifacts = @{ $loc->acquire_all(@path, \%options) };

This is similar to acquire, but performs an extra step, the behavior of which varies slightly depending on what artifact is resolved on the component of @path:

  • If the last resolved artifact is a reference to an array, then all the artifacts within that bag are acquired, resolved, and returned as a reference to an array.

  • If the last resolved artifact is a reference to a hash, then all the values within are pulled, resolved, and returned as a reference to an array.

  • In any other case, the final resolved artifact is returned as a single item list.

The final argument is optional. As with "acquire", it is must be a hash reference and is passed to each of the artifacts during their resolution.

resolve

    my $resolved_artifact = $loc->resolve($bag, $artifact, \%options);

After the artifact has been found, this method resolves the a partial artifact implementing the Bolts::Role::Artifact and turns it into the complete artifact.

This method is called during each step of acquisition to resolve the artifact (which might be a bag) at each step, including the final step. The given %options are required. They are derefenced and passed to the "get" in Bolts::Role::Artifact method, if the artifact being resolved implements Bolts::Role::Artifact.

AUTHOR

Andrew Sterling Hanenkamp <hanenkamp@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2014 by Qubling Software LLC.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.