Skip to content

LibreCat/Catmandu-FileStore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

Catmandu::FileStore - Namespace for packages that can make files persistent

STATUS

Build Status Coverage

SYNOPSIS

# From the command line

# Export a list of all file containers
$ catmandu export File::Simple --root t/data to YAML

# Export a list of all files in container '1234'
$ catmandu export File::Simple --root t/data --bag 1234 to YAML

# Add a file to the container '1234'
$ catmandu stream /tmp/myfile.txt to File::Simple --root t/data --bag 1234 --id myfile.txt

# Download the file 'myfile.txt' from the container '1234'
$ catmandu stream File::Simple --root t/data --bag 1234 --id myfile.txt to /tmp/output.txt

# Delete the file 'myfile.txt' from the container '1234'
$ catmandu delete File::Simple --root t/data --bag 1234 --id myfile.txt

# From Perl
use Catmandu;

my $store = Catmandu->store('File::Simple' , root => 't/data');

# List all containers
$store->index->each(sub {
    my $container = shift;

    print "%s\n" , $container->{_id};
});

# Add a new container
$store->index->add({ _id => '1234' });

# Get the container
my $files = $store->index->files('1234');

# Add a file to the container
$files->upload(IO::File->new('<foobar.txt'), 'foobar.txt');

my $file = $files->get('foobar.txt');

# Stream the contents of a file
$files->stream(IO::File->new('>foobar.txt'), $file);

# Delete a file
$files->delete('foobar.txt');

# Delete a container
$store->index->delete('1234');

DESCRIPTION

Each Catmandu::FileStore is a Catmandu::Store and inherits all its methods,

A Catmandu::FileStore is package to store and retrieve binary content in an filesystem, memory or a network. A Catmandu::FileStore contains one or more Catmandu::FileBag which is a kind of folder.

Each Catmandu::FileBag contains one or more files.

One special Catmandu::FileBag is the index and contains the listing of all Catmandu::FileBag in the Catmandu::FileStore.

CONFIGURATION

  • index_bag

    The name of the index bag to use when no bag name is give. The index bag is a bag containing a listing of all Catmandu::FileBag-s in the Store.

      my $index = $store->index;
    
      $index->each(sub {
          my $bag = shift;
    
          printf "%s\n" , $bag->{_id};
      });
    
  • index_class

    The default class implementation to use for an index of Catmandu::FileBag-s. By default this is the Catmandu::FileStore implementation with '::Index' added.

METHODS

bag($name)

Create or retieve a bag with name $name. Returns a Catmandu::FileBag.

index

Returns the index Catmandu::FileBag for the Catmandu::FileStore.

my $index = $store->index;

# Add a new file container
$index->add({ _id => '1234'});

# Anf use it...
my $container = $store->bag('1234');

$container->upload(IO::File->new('data.txt') , 'data.txt');

log

Return the current logger. Can be used when creating your own Stores.

E.g.

package Catmandu::Store::Hash;

...

sub generator {
    my ($self) = @_;

    $self->log->debug("generating record");
    ...
}

See also: Catmandu for activating the logger in your main code.

AUTHOR

Patrick Hochstenbach, <patrick.hochstenbach at ugent.be>

Nicolas Steenlant, <nicolas.steenlant at ugent.be>

Nicolas Franck, <nicolas.franck at ugent.be>

SEE ALSO

Catmandu::Store::File::Simple, Catmandu::Store::File::Memory, Catmandu::FileBag

LICENSE AND COPYRIGHT

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.