Provided by: libcatmandu-perl_1.0700-1_all bug

NAME

       Catmandu::Plugin::SideCar - Automatically update a parallel Catmandu::Store with metadata

SYNOPSIS

        # Using the command line

        $ cat catmandu.yml
        ---
        store:
            files:
             package: File::Simple
             options:
                 root: /data/test123
                 bags:
                     index:
                         plugins:
                             - SideCar
                         sidecar:
                                 package: ElasticSearch
                                 options:
                                     client: '1_0::Direct'
                                     index_name: catmandu

           ...

        # Add files to the FileStore in bag 1234
        $ catmandu stream /tmp/test.txt to files --bag 1234 --id test.txt

        # Add metadata to the FileStore for bag 1234
        $ cat metadata.yml
        ---
        _id: 1234
        colors:
           - red
           - green
           - blue
        name: test
        ...
        $ catmandu import YAML to files < metadata.yml

        # Export the metadata again from the FileStore
        $ catmandu export files to YAML
        ---
        _id: 1234
        colors:
           - red
           - green
           - blue
        name: test
        ...

        # Or in your Perl program
        my $store = Catmandu->store('File::Simple',
                   root => 'data/test123'
                   bags => {
                       index => {
                           plugins => [qw(SideCar)],
                           sidecar => {
                               package => "ElasticSearch",
                               options => {
                                   client => '1_0::Direct',
                                   index_name => 'catmandu',
                               }
                           }
                      }
                   });

        my $index = $store->index;

        $index->add({ _id => '1234' , colors => [qw(red green blue)] , name => 'test'});

        my $files = $index->files('1234');
        $files->upload(IO::File->new('</tmp/test.txt'), 'test.txt');

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

        $files->steam(IO::File->new('>/tmp/test.txt'),$file);

DESCRIPTION

       The Catmandu::Plugin::SideCar can be used to combine Catmandu::Store-s ,
       Catmandu::FileStore-s (and Catmandu::Store::Multi , Catmandu::Store::File::Multi) as one
       access point.  Every get,add,delete,drop and commit action in the store will be first
       executed in the original store and re-executed in the SideCar store.

COMBINING A FILESTORE WITH A STORE

       To add metadata to a Catmandu::FileStore a SideCar needs to be added to the "index" bag of
       the FileStore:

           package: File::Simple
           options:
               root: /data/test123
               bags:
                   index:
                       plugins:
                           - SideCar
                       sidecar:
                               package: ElasticSearch
                               options:
                                   client: '1_0::Direct'
                                   index_name: catmandu
                       sidecar_bag: data

COMBINING A STORE WITH A FILESTORE

       To add files to a Catmandu::Store a SideCar needs to be added to the bag containing the
       metadata (by default "data"):

           package: ElasticSearch
           options:
               client: '1_0::Direct'
               index_name: catmandu
               bags:
                   data:
                       plugins:
                           - SideCar
                       sidecar:
                               package: File::Simple
                               options:
                                   root: /data/test123
                                   uuid: 1
                       sidecar_bag: index

       Notice that we added for the Catmandu::Store::File::Simple the requires "uuid" options
       because the Catmandu::Store::ElasticSearch is using UUIDs as default identifiers.

RESTRICTIONS

       Some Catmandu::FileStore-s may set restrictions on the "_id"-s that can be used in
       records.

CONFIGURATION

       sidecar STRING
       sidecar HASH
       sidecar Catmandu::Store | Catmandu::FileStore
           The pointer to a configured Catmandu::Store or Catmandu::FileStore.

       sidecar_bag
           The SideCar Catmandu::Bag into which to store the data (default 'bag').

SEE ALSO

       Catmandu::Store, Catmandu::Bag, Catmandu::FileStore