---
name: "Catmandu::DirectoryIndex::Map"
section: "3pm"
platform: "linux"
package: "libcatmandu-filestore-perl"
version: "1.16-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Catmandu::DirectoryIndex::Map"
---

# Catmandu::DirectoryIndex::Map(3pm)

translates between id and path using a Catmandu::Bag as lookup

## NAME

Catmandu::DirectoryIndex::Map - translates between id and path using a Catmandu::Bag as lookup

## SYNOPSIS

```
    use Catmandu::DirectoryIndex::Map;
    use Catmandu::Store::DBI;
    # Bag to store/retrieve all path -> directory mapping
    my $bag = Catmandu::Store::DBI->new(
        data_source => "dbi:sqlite:dbname=/data/index.db"
    )->bag("paths");
    my $p = Catmandu::DirectoryIndex::Map->new(
        base_dir => "/data",
        bag => $bag
    );
    # Tries to find a mapping for id "a".
    # return: mapping or undef
    my $mapping = $p->get("a");
    # Returns a mapping like { _id => "a", _path => "/data/2018/01/01/16/00/00/0cc175b9c0f1b6a831c399e269772661" }
    my $mapping = $p->add("a");
    # Catmandu::DirectoryIndex::Map is a Catmandu::Iterable
    # Returns list of records: [{ _id => "a", _path => "/data/2018/01/01/16/00/00/0cc175b9c0f1b6a831c399e269772661" }]
    my $mappings = $p->to_array();
```

## DESCRIPTION

```
    This package uses a Catmandu::Bag backend to translate between ids and paths.
    Each record looks like this:
        { _id => "a", _path => "/data/2018/01/01/16/00/00/0cc175b9c0f1b6a831c399e269772661" }
    If the mapping for the id does not exist yet, this package calculates it by concatenating
    into a path:
    * $base_dir which is configurable
    * YYYY: current year
    * MM: current month
    * DD: current day of month
    * HH: current hour
    * MM: current minute
    * SS: current second
    * TEXT: the md5 of the _id
    Every call to C<add> will generate a directory entry in the backend database,
    if it didn't already exist.
```

## METHODS

### new( OPTIONS )

Create a new Catmandu::DirectoryIndex::Map with the following configuration parameters:

- base\_dir

  See Catmandu::DirectoryIndex

- store\_name

  Name of the store in the Catmandu configuration.

  Ignored when bag instance is given.

- bag\_name

  Name of the bag in the Catmandu configuration.

  Ignored when bag instance is given

- bag

  Instance of Catmandu::Bag where all mappings between \_id and \_path are stored.

## INHERITED METHODS

This Catmandu::DirectoryIndex::Map implements:

- Catmandu::DirectoryIndex

  ## SEE ALSO

Catmandu::DirectoryIndex
