NAME

MVC::Neaf::Util::Container - path & method based container for Not Even A Framework

DESCRIPTION

This is utility class. Nothing to see here unless one intends to work on MVC::Neaf itself.

This class can hold multiple entities addressed by paths and methods and extract them in the needed order.

SYNOPSIS

my $c = MVC::Neaf::Util::Container->new;

$c->store( "foo", path => '/foo', method => 'GET' );
$c->store( "bar", path => '/foo/bar', exclude => '/foo/bar/baz' );

$c->fetch( path => "/foo", method => 'GET' ); # foo
$c->fetch( path => "/foo/bar", method => 'GET' ); # foo bar
$c->fetch( path => "/foo/bar", method => 'POST' );
        # qw(bar) - 'foo' limited to GET only
$c->fetch( path => "/foo/bar/baz", method => 'GET' );
        # qw(foo) - 'bar' excluded

ATTRIBUTES

exclusive

Only store one item per (path,method) pair, and fail loudly in case of conflicts.

METHODS

store

store( $data, %spec )

Store $data in container. Spec may include:

path - single path or list of paths, '/' assumed if none.
method - name of method or array of methods. By default, all methods supported by Neaf.
exclude - single path or list of paths. None by default.
prepend - if true, prepend to the list instead of appending.
tentative (exclusive container only) - if true, don't override existing declarations, and don't complain when overridden.
override (exclusive container only) - if true, override any preexisting content.

store_check_conflict

store_check_conflict( path => ..., method => ... )

Check that no previous declarations conflict with the new one.

This is only if exclusive was specified.

list_methods

Returns methods currently in the storage.

list_paths

Returns paths for given method, or all if no method given.

fetch

fetch( %spec )

Return all matching previously stored objects, from shorter to longer paths, in order of addition.

Spec may include:

path - a single path to match against
method - method to match against

fetch_last

Same as fetch(), but only return the last (last added & longest path) element.

fetch_raw

Same as fetch(), but return additional info instead of just stored item:

{
    data   => $your_item_here,
    path   => $all_the_paths,
    method => $list_of_methods,
    ...
}

LICENSE AND COPYRIGHT

This module is part of MVC::Neaf suite.

Copyright 2016-2023 Konstantin S. Uvarin khedin@cpan.org.

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.