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

NAME

Statocles::Store::File - A store made up of plain files

VERSION

version 0.054

DESCRIPTION

This store reads/writes files from the filesystem.

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".

documents

All the documents currently read by this store.

METHODS

clear

    $store->clear;

Clear the cached documents in this Store.

read_documents

    my $docs = $store->read_documents;

Read the directory path and create the document objects inside. Returns an arrayref of document objects.

read_document

    my $doc = $store->read_document( $path )

Read a single document in Markdown with optional YAML frontmatter.

parse_frontmatter

    my %doc_attrs = $store->parse_frontmatter( $from, $content )

Parse a document with YAML frontmatter. $from is a string identifying where the content comes from (a path or other identifier). $content is the content to parse for frontmatter.

write_document

    my $full_path = $store->write_document( $path, $doc );

Write a document to the store at the given store path. Returns the full path to the newly-updated document.

The document is written in Frontmatter format.

is_document

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

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

read_file

    my $content = $store->read_file( $path )

Read the file from the given path.

has_file

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

Returns true if a file exists with the given path.

NOTE: This should not be used to check for directories, as not all stores have directories.

find_files

    my $iter = $store->find_files( %opt )
    while ( my $path = $iter->() ) {
        # ...
    }

Returns an iterator that, when called, produces a single path suitable to be passed to read_file.

Available options are:

    include_documents      - If true, will include files that look like documents.
                             Defaults to false.

open_file

    my $fh = $store->open_file( $path )

Open the file with the given path. Returns a filehandle.

The filehandle opened is using raw bytes, not UTF-8 characters.

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.

AUTHOR

Doug Bell <preaction@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by Doug Bell.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.