The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Data::Resolver::FromTar - resolver for TAR file

SYNOPSIS

   use Data::Resolver::FromTar;
   my $resolver = Data::Resolver::FromTar->new(root => $path);

   my @list_of_asset_keys = $resolver->list_asset_keys;
   say 'have it' if $resolver->has_asset($key);
   my $asset = $resolver->get($key);

   my @list_of_sub_resolver_keys = $resolver->list_sub_resolver_keys;
   say 'have it' if $resolver->has_sub_resolver($srkey);
   my $sub_resolver = $resolver->get_sub_resolver($srkey);

DESCRIPTION

This class implements a resolver that is fed from a TAR file in the filesystem. It inherits from Data::Resolver::Base and implements the corresponding methods according to the expected semantics.

The class is provided a path to the TAR file in the filesystem and an optional prefix; plain files in the archive will be considered valid assets if they appear at the right level, as well as directory objects will be considere valid starting points for sub-resolvers.

Only files immediately below the provided prefix will be listed, although all will be accessible. E.g. consider the following tree of files inside the archive:

   .
   ├── ciao.txt
   └── foo
      ├── bar.txt
      └── galook
         └── final.txt

If the prefix is empty, then:

  • listing of available assets will give back ciao.txt only

  • all txt files will be accessible, through keys ciao.txt, foo/bar.txt, and foo/bar/galook/final.txt

  • listing of available sub-resolvers will give back foo only

  • it's possible to get sub-resolvers for keys foo as well as foo/galook.

INTERFACE

This class inherits from Data::Resolver::Base, inheriting all of its methods and overloading the abstract ones, while keeping the expected semantics.

METHODS

get_asset

   sub get_asset              ($self, $key) { ... }

retrieve the file data associated to $key, as a Data::Resolver::Asset.

get_sub_resolver

   sub get_sub_resolver       ($self, $key) { ... }

retrieve the sub-resolver associated to sub-directory $key, as a new object of class Data::Resolver::FromTar. It is obtained by pointing to the same TAR archive, but setting a different "prefix".

has_asset

   sub has_asset              ($self, $key) { ... }

test existence of asset (file) for $key.

has_sub_resolver

   sub has_sub_resolver       ($self, $key) { ... }

test existence of sub-resolver for sub-directory $key.

list_asset_keys

   sub list_asset_keys        ($self)       { ... }

return a list of file names available from the resolver.

list_sub_resolver_keys

   sub list_sub_resolver_keys ($self)       { ... }

return a list of directory names available as sub-resolvers.

prefix

   my $string = $obj->prefix;

get the prefix used for accessing sub-directories in a TAR archive.

root

   my $dirpath = $obj->root;

The path to the base TAR file used for the resolver.

AUTHOR

Flavio Poletti <flavio@polettix.it>

COPYRIGHT AND LICENSE

Copyright 2023 by Flavio Poletti <flavio@polettix.it>

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.