NAME

Statocles::Store - The source for data documents and files

DESCRIPTION

A Statocles::Store reads and writes documents and files (mostly pages).

This class also handles the parsing and inflating of "document objects".

Frontmatter Document Format

Documents are formatted with a YAML document on top, and Markdown content on the bottom, like so:

    ---
    title: This is a title
    author: preaction
    ---
    # This is the markdown content
    
    This is a paragraph

ATTRIBUTES

path

The path to the directory containing the documents.

document_extensions

An array of file extensions that should be considered documents. Defaults to "markdown" and "md".

METHODS

is_document

    my $bool = $store->is_document( $path );

Returns true if the path looks like a document path (matches the "document_extensions").

has_file

    my $bool = $store->has_file( $path )

Returns true if a file exists with the given path.

write_file

    $store->write_file( $path, $content );

Write the given content to the given path. This is mostly used to write out page objects.

content may be a simple string or a filehandle. If given a string, will write the string using UTF-8 characters. If given a filehandle, will write out the raw bytes read from it with no special encoding.

remove

    $store->remove( $path )

Remove the given path from the store. If the path is a directory, the entire directory is removed.

iterator

    my $iter = $store->iterator;

Iterate over all the objects in this store. Returns an iterator that will yield a Statocles::Document object or a Statocles::File object.

Hidden files and folders are automatically ignored by this method.

    my $iter = $store->iterator;
    while ( my $obj = $iter->() ) {
        if ( $obj->isa( 'Statocles::Document' ) ) {
            ...;
        }
        else {
            ...;
        }
    }