NAME

Path::Resolver::Resolver::Mux::Prefix - multiplex resolvers by using path prefix

VERSION

version 3.100452

SYNOPSIS

my $resolver = Path::Resolver::Resolver::Mux::Prefix->new({
  prefixes => {
    foo => $foo_resolver,
    bar => $bar_resolver,
  },
});

my $simple_entity = $resolver->entity_at('foo/bar.txt');

This resolver looks at the first part of paths it's given to resolve. It uses that part to find a resolver (by looking it up in the prefixes) and then uses that resolver to resolver the rest of the path.

The default native type of this resolver is Any, meaning that is is much more lax than other resolvers. A native_type can be specified while creating the resolver.

ATTRIBUTES

prefixes

This is a hashref of path prefixes with the resolver that should be used for paths under that prefix. If a resolver is given for the empty prefix, it will be used for content that did not begin with registered prefix.

METHODS

get_resolver_for

This method gets the resolver for the named prefix.

set_resolver_for

This method sets the resolver for the named prefix, replacing any that already existed.

add_resolver_for

This method sets the resolver for the named prefix, throwing an exception if one already exists.

has_resolver_for

This method returns true if a resolver exists for the given prefix.

delete_resolver_for

This method deletes the resolver for the named prefix.

WHAT'S THE POINT?

This multiplexer allows you to set up a virtual filesystem in which each subtree is handled by a different resolver. For example:

my $resolver = Path::Resolver::Resolver::Mux::Prefix->new({
  config   => Path::Resolver::Resolver::FileSystem->new({
    root => '/etc/my-app',
  }),

  template => Path::Resolver::Resolver::Mux::Ordered->new({
    Path::Resolver::Resolver::DistDir->new({ module => 'MyApp' }),
    Path::Resolver::Resolver::DataSection->new({ module => 'My::Framework' }),
  }),
});

The path /config/main.cf would be looked for on disk as /etc/my-app/main.cf. The path /template/main.html would be looked for first as main.html in the sharedir for MyApp and failing that in the DATA section of My::Framework.

This kind of resolver allows you to provide a very simple API (that is, filenames) to find all manner of resources, either files or otherwise.

AUTHOR

Ricardo Signes <rjbs@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by Ricardo Signes.

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