NAME
    Class::Forward - Namespace Dispatch and Resolution

VERSION
    version 0.100006

SYNOPSIS
        use Class::Forward;

        # create a resolution object
        my $res = Class::Forward->new(namespace => 'MyApp');

        # returns MyApp::Data
        say $res->forward('data');

        # returns a MyApp::Data instance
        my $data  = $res->forward('data.new');

        # returns the string /my_app/data
        my $string = $res->reverse('data.new');

        # returns MyApp::Data
        say $res->forward($string);

DESCRIPTION
    Class::Forward is designed to resolve Perl namespaces from shorthand
    (which is simply a file-path-like specification). Class::Forward can
    also be used to dispatch method calls using said shorthand. See the
    following exported functions for examples on how this can be used.

EXPORTS
  clsf
    The exported function clsf is responsible for resolving your shorthand.
    The following is an example of how it functions:

        package App::Store;

        use CGI;
        use Class::Forward;

        clsf;                             # returns App::Store
        clsf './user';                    # returns App::Store::User
        clsf './user.new', name => 'N30'; # return a new App::Store::User object
        clsf './user_profile.new';        # ... App::Store::UserProfile object
        clsf '../user';                   # returns App::User
        clsf '//';                        # returns App; (top of the calling class)
        clsf '//.new';                    # returns a new App object
        clsf '//view';                    # ... returns App::View
        clsf '//view.new';                # ... returns a new App::View object
        clsf '//view.new.render';         # ... dispatches methods in succession
        clsf 'cgi';                       # returns App::Store::Cgi
        clsf '/cgi';                      # returns Cgi (or CGI if already loaded)

        1;

    The clsf function takes two arguments, the shorthand to be translated,
    and an optional list of arguments to be passed to the last method
    appended to the shorthand.

  clsr
    The exported function clsr is responsible for resolving your shorthand.
    The following is an example of how it functions:

        package App::Store;

        use CGI;
        use Class::Forward;

        clsr;                             # returns /app/store
        clsr './user';                    # returns /app/store/user
        clsr './user.new', name => 'N30'; # returns /app/store/user
        clsr './user_profile';            # returns /app/store/user_profile
        clsr '../user';                   # returns /app/user
        clsr '//';                        # returns /app
        clsr '//.new';                    # returns /app
        clsr '//view';                    # returns /app/view
        clsr '//view.new';                # returns /app/view
        clsr '//view.new.render';         # returns /app/view
        clsr 'cgi';                       # returns /app/store/cgi
        clsr '/cgi';                      # returns /cgi

        1;

    The clsr function takes three arguments, the shorthand to be translated
    (required), the offset (optional level of namespace nodes to omit
    left-to-right), and the delimiter to be used to generate the resulting
    path (defaults to forward-slash).

METHODS
  new
    The new method is used to instantiate a new instance.

  namespace
    The namespace method is used to get/set the root namespace used as an
    anchor for all resolution requests.

        my $namespace = $self->namespace('MyApp');

  forward
    The forward (or forward_lookup) method is used to resolve Perl
    namespaces from path-like shorthand.

        say $self->forward('example');
        # given a default namespace of MyApp
        # prints MyApp::Example

  reverse
    The reverse method (or reverse_lookup) is used to generate path-like
    shorthand from Perl namespaces.

        say $self->reverse('Simple::Example');
        # given a default namespace of MyApp
        # prints /my_app/simple/example

        say $self->reverse('Simple::Example', 1);
        # given a default namespace of MyApp
        # prints simple/example

        say $self->reverse('Simple::Example', 1, '_');
        # given a default namespace of MyApp
        # prints simple_example

SEE ALSO
    Class::Forward was designed to provide shorthand and easy access to
    class namespaces in an environment where you're dealing with a multitude
    of long well-named classes. In that vein, it provides an alternative to
    modules like aliased, aliased::factory, as, and the like, and also
    modules like Namespace::Dispatch which are similar enough to be
    mentioned but really address a completely different issue.

AUTHOR
    Al Newkirk <anewkirk@ana.io>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2012 by Al Newkirk.

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

